diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..7409294b0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "*.rmd": "markdown", + "*.inc": "c" + } +} \ No newline at end of file diff --git a/bundles/mesh/api.list b/bundles/mesh/api.list deleted file mode 100644 index 853549a0f..000000000 --- a/bundles/mesh/api.list +++ /dev/null @@ -1,381 +0,0 @@ -========================= -api in att_db.h: - att_set_db - att_set_read_callback - att_set_write_callback - att_handle_request - att_prepare_handle_value_notification - att_prepare_handle_value_indication - att_clear_transaction_queue -========================= -api in att_server.h: -========================= -api in gatt_external.h: - att_server_init - att_server_register_packet_handler - att_server_can_send_packet_now - att_server_request_can_send_now_event - att_server_notify - att_server_indicate - att_emit_general_event - gatt_client_discover_primary_services - gatt_client_discover_primary_services_by_uuid16 - gatt_client_discover_primary_services_by_uuid128 - gatt_client_discover_characteristics_for_service - gatt_client_find_included_services_for_service - gatt_client_discover_characteristics_for_handle_range_by_uuid16 - gatt_client_discover_characteristics_for_handle_range_by_uuid128 - gatt_client_discover_characteristics_for_service_by_uuid16 - gatt_client_discover_characteristics_for_service_by_uuid128 - gatt_client_discover_characteristic_descriptors - gatt_client_read_value_of_characteristic - gatt_client_read_value_of_characteristic_using_value_handle - gatt_client_read_value_of_characteristics_by_uuid16 - gatt_client_read_value_of_characteristics_by_uuid128 - gatt_client_read_long_value_of_characteristic - gatt_client_read_long_value_of_characteristic_using_value_handle - gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset - gatt_client_read_multiple_characteristic_values - gatt_client_write_value_of_characteristic_without_response - gatt_client_signed_write_without_response - gatt_client_write_value_of_characteristic - gatt_client_write_long_value_of_characteristic - gatt_client_write_long_value_of_characteristic_with_offset - gatt_client_reliable_write_long_value_of_characteristic - gatt_client_read_characteristic_descriptor - gatt_client_read_characteristic_descriptor_using_descriptor_handle - gatt_client_read_long_characteristic_descriptor - gatt_client_read_long_characteristic_descriptor_using_descriptor_handle - gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset - gatt_client_write_characteristic_descriptor - gatt_client_write_characteristic_descriptor_using_descriptor_handle - gatt_client_write_long_characteristic_descriptor - gatt_client_write_long_characteristic_descriptor_using_descriptor_handle - gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset - gatt_client_write_client_characteristic_configuration - gatt_client_prepare_write - gatt_client_execute_write - gatt_client_cancel_write - ble_gatts_find_svc - ble_gatts_find_chr - ble_att_mtu -========================= -api in gap_external.h: - gap_dispose_set_scan_para_complete - gap_dispose_set_adv_para_complete - gap_discovery_proc_init - gap_general_connection_proc_init - gap_auto_connection_proc_init - fill_advertising_report_from_packet - fill_ext_advertising_report_from_packet - fill_period_report_from_packet - gap_get_advertisingReport - gap_observe_proc_init - gap_set_scan_parameters - gap_start_scan - gap_stop_scan - gap_set_random_device_address - gap_random_address_set_mode - gap_random_address_set - gap_random_address_get_mode - gap_auto_connection_start - gap_auto_connect - gap_auto_connection_stop - gap_auto_connection_stop_all - gap_connect - gap_disconnect - gap_get_connection_type - gap_advertisements_set_data - gap_advertisements_set_params - gap_advertisements_enable - gap_scan_response_set_data - ble_gap_set_whitelist - ble_gap_remove_whitelist - btstack_memory_dtbt_app_timer_free - app_funregister - app_OS_Timer - app_set_timer - app_timer_delete - app_add_timer - reverse_bd_addr - gap_random_address_set_update_period - gap_update_connection_parameters - gap_get_connection_parameter_range - gap_set_connection_parameter_range - hci_add_event_handler - hci_register_acl_packet_handler - hci_power_control -========================= -api in platform_api.h: - platform_set_evt_callback - platform_set_irq_callback - platform_get_version - sysSetPublicDeviceAddr - platform_config - platform_set_rf_clk_souce - platform_set_rf_init_data -========================= -api in btstack_util.h: - little_endian_read_16 - little_endian_read_24 - little_endian_read_32 - little_endian_store_16 - little_endian_store_32 - big_endian_read_16 - big_endian_read_32 - big_endian_store_16 - big_endian_store_32 - reverse_bytes - reverse_24 - reverse_48 - reverse_56 - reverse_64 - reverse_128 - btstack_min - btstack_max - char_for_nibble - nibble_for_char - bd_addr_cmp - bd_addr_copy - printf_hexdump - uuid128_to_str - bd_addr_to_str - sscanf_bd_addr - uuid_add_bluetooth_prefix - uuid_has_bluetooth_prefix -========================= -api in btstack_run_loop.h: - btstack_run_loop_timer_dump - btstack_run_loop_init - btstack_run_loop_set_timer - btstack_run_loop_set_timer_handler - btstack_run_loop_set_timer_context - btstack_run_loop_get_timer_context - btstack_run_loop_add_timer - btstack_run_loop_remove_timer - btstack_run_loop_get_time_ms - btstack_run_loop_set_data_source_handler - btstack_run_loop_set_data_source_fd - btstack_run_loop_get_data_source_fd - btstack_run_loop_enable_data_source_callbacks - btstack_run_loop_disable_data_source_callbacks - btstack_run_loop_add_data_source - btstack_run_loop_remove_data_source - btstack_run_loop_execute -========================= -api in hci.h: - hci_init - hci_set_control - hci_set_sco_voice_setting - hci_get_sco_voice_setting - hci_close - hci_register_sco_packet_handler - hci_can_send_command_packet_now - hci_send_cmd - hci_send_cmd_pending - hci_get_sco_packet_length - hci_reserve_packet_buffer - hci_get_outgoing_packet_buffer - hci_release_packet_buffer - hci_connections_get_iterator - hci_connection_for_handle - hci_connection_for_bd_addr_and_type - hci_is_packet_buffer_reserved - hci_can_send_acl_le_packet_now - hci_can_send_acl_packet_now - hci_can_send_prepared_acl_packet_now - hci_send_acl_packet_buffer - hci_authentication_active_for_handle - hci_max_acl_data_packet_length - hci_usable_acl_packet_types - hci_non_flushable_packet_boundary_flag_supported - gap_ssp_supported_on_both_sides - hci_disconnect_security_block - hci_remote_esco_supported - hci_emit_state - hci_send_cmd_packet - hci_disconnect_all - hci_number_free_acl_slots_for_handle - hci_le_advertisements_set_params - hci_le_local_feature_support - hci_le_remote_feature_support - hci_disable_l2cap_timeout_check - HCI_ReadADVChannel_TXPower - gap_initiator_filiter_policy_set - AppTaskStart_msg_recv - HCI_TimerExpProcess - hci_add_first_event_handler - le_handle_advertisement_report - gap_initiator_filiter_policy_set - gap_set_initiator_filter_policy - gap_whitelist_is_onused - HCI_ReadRSSI - HCI_ReadRemoteInfo - HCI_ReadRemoteUsedFeatures - HCI_ReadADVChannel_TXPower - HCI_LEReadChannelMap - HCI_LETransmitTest - HCI_LEReceiveTest - HCI_LETestEnd - HCI_ClearWhiteLists - le_handle_direct_advertisement_report - mesh_advertisements_set_data - hci_remove_from_whitelist -========================= -api in btstack_memory.h: - btstack_memory_init - btstack_memory_hci_connection_get - btstack_memory_hci_connection_free - btstack_memory_l2cap_channel_get - btstack_memory_l2cap_channel_free - btstack_memory_gatt_client_get - btstack_memory_gatt_client_free - btstack_memory_whitelist_entry_get - btstack_memory_whitelist_entry_free - btstack_memory_sm_lookup_entry_get - btstack_memory_sm_lookup_entry_free - btstack_memory_dtbt_msg_get - btstack_memory_dtbt_msg_free -========================= -api in btstack_event.h: - btstack_push_user_msg -========================= -api in mesh_api.h: - mesh_setup - mesh_set_dev_name - npl_freertos_sem_init -========================= -api in os_mbuf.h: - _os_mbuf_trailingspace - os_msys_register - os_msys_get - os_msys_reset - os_mbuf_pool_init - os_mbuf_get - os_mbuf_get_pkthdr - os_mbuf_append - os_mbuf_free - os_mbuf_free_chain - os_mbuf_adj - os_mbuf_extend - os_mbuf_pullup -========================= -api in glue.h: - NET_BUF_SIMPLE - net_buf_simple_init - net_buf_put - net_buf_ref - net_buf_unref - net_buf_simple_pull_le16 - net_buf_simple_pull_be16 - net_buf_simple_pull_be32 - net_buf_simple_pull_u8 - net_buf_simple_add_le16 - net_buf_simple_add_be16 - net_buf_simple_add_u8 - net_buf_simple_add_be32 - net_buf_simple_push_be16 - net_buf_simple_push_u8 - net_buf_simple_pull - net_buf_simple_add - net_buf_simple_push - net_buf_reserve - bt_dh_key_gen - bt_pub_key_gen - bt_pub_key_get - bt_rand - bt_hex - bt_encrypt_be - bt_le_adv_start - k_work_init - k_delayed_work_init - k_delayed_work_cancel - k_delayed_work_submit - k_uptime_get - k_uptime_get_32 - k_sleep - k_work_submit - k_work_add_arg - k_delayed_work_add_arg - k_delayed_work_remaining_get - net_buf_simple_save - net_buf_simple_restore - sys_memcpy_swap - net_buf_slist_init - net_buf_slist_is_empty - net_buf_slist_peek_head - net_buf_slist_peek_next - net_buf_slist_get - net_buf_slist_put - net_buf_slist_remove -========================= -api in access.h: - bt_mesh_model_msg_init - bt_mesh_model_send - bt_mesh_model_publish - bt_mesh_model_elem -========================= -api in main.h: - bt_mesh_prov_enable - bt_mesh_prov_disable - bt_mesh_init - bt_mesh_reset - bt_mesh_provision - bt_mesh_is_provisioned -========================= -api in event_groups.h: -========================= -api in queue.h: - xQueueGenericSend - xQueueReceive - xQueueGenericSendFromISR - xQueueGiveFromISR - xQueueReceiveFromISR - xQueueCreateCountingSemaphore - xQueueSemaphoreTake - xQueueGenericCreate - xQueueGenericCreateStatic - xQueueCreateSet - xQueueAddToSet - xQueueSelectFromSet - vQueueWaitForMessageRestricted - xQueueGenericReset -========================= -api in semphr.h: -========================= -api in task.h: - xTaskCreate - xTaskCreateStatic - vTaskDelay - vTaskStartScheduler - vTaskSuspendAll - xTaskResumeAll - xTaskGetTickCount - xTaskGetTickCountFromISR - xTaskIncrementTick - vTaskPlaceOnEventList - vTaskPlaceOnEventListRestricted - xTaskRemoveFromEventList - vTaskSwitchContext - xTaskCheckForTimeOut - vTaskMissedYield - xTaskGetSchedulerState - xTaskPriorityInherit - xTaskPriorityDisinherit - vTaskPriorityDisinheritAfterTimeout - pvTaskIncrementMutexHeldCount - vTaskInternalSetTimeOutState -========================= -api in timers.h: - xTimerCreate - pvTimerGetTimerID - vTimerSetTimerID - xTimerGetExpiryTime - xTimerCreateTimerTask - xTimerGenericCommand -========================= -api in portable.h: - pxPortInitialiseStack - pvPortMalloc - vPortFree - xPortStartScheduler diff --git a/bundles/mesh/inc/aes.h b/bundles/mesh/inc/aes.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/mesh/inc/att_db.h b/bundles/mesh/inc/att_db.h deleted file mode 100644 index 479455e44..000000000 --- a/bundles/mesh/inc/att_db.h +++ /dev/null @@ -1,146 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef __ATT_H -#define __ATT_H - -#include -#include "bluetooth.h" -#include "bt_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// custom BTstack error codes -#define ATT_ERROR_HCI_DISCONNECT_RECEIVED 0x1f - -// custom BTstack ATT error coders -#define ATT_ERROR_DATA_MISMATCH 0x7e -#define ATT_ERROR_TIMEOUT 0x7F - -// ATT Client Read Callback for Dynamic Data -// - if buffer == NULL, don't copy data, just return size of value -// - if buffer != NULL, copy data and return number bytes copied -// @param con_handle of hci le connection -// @param attribute_handle to be read -// @param offset defines start of attribute value -// @param buffer -// @param buffer_size -typedef uint16_t (*att_read_callback_t)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size); - -// ATT Client Write Callback for Dynamic Data -// @param con_handle of hci le connection -// @param attribute_handle to be written -// @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE -// @param offset into the value - used for queued writes and long attributes -// @param buffer -// @param buffer_size -// @param signature used for signed write commmands -// @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer -typedef int (*att_write_callback_t)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, const uint8_t *buffer, uint16_t buffer_size); - -/* API_START */ -/* - * @brief setup ATT server - * @param read_callback, see att_db.h, can be NULL - * @param write_callback, see attl.h, can be NULL - * NOTE: this function function must be called before seting up a custom HCI handler (if any) - */ -void att_server_init(att_read_callback_t read_callback, att_write_callback_t write_callback); - -/* - * @brief register packet handler for ATT server events: - * - ATT_EVENT_MTU_EXCHANGE_COMPLETE - * - ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE - * @param handler - */ -void att_server_register_packet_handler(btstack_packet_handler_t handler); - -/* - * @brief tests if a notification or indication can be send right now - * @param con_handle - * @return 1, if packet can be sent - */ -int att_server_can_send_packet_now(hci_con_handle_t con_handle); - -/** - * @brief Request emission of ATT_EVENT_CAN_SEND_NOW as soon as possible - * @note ATT_EVENT_CAN_SEND_NOW might be emitted during call to this function - * so packet handler should be ready to handle it - * @param con_handle - */ -void att_server_request_can_send_now_event(hci_con_handle_t con_handle); - -/* - * @brief notify client about attribute value change - * @param con_handle - * @param attribute_handle - * @param value - * @param value_len - * @return 0 if ok, error otherwise - */ -int att_server_notify(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); - -/* - * @brief indicate value change to client. client is supposed to reply with an indication_response - * @param con_handle - * @param attribute_handle - * @param value - * @param value_len - * @return 0 if ok, error otherwise - */ -int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); - -/* - * @brief get current MTU size - * @return current MTU size - */ -uint16_t att_server_get_mtu(hci_con_handle_t con_handle); - -/* - * @brief emit a general event to att handler - * @param event - * @param length - * @return void - */ -void att_emit_general_event(uint8_t *event, uint16_t length); - -/* - * @brief setup ATT database - * @param con_handle[in] associated connection handle - * @param db[in] the ATT db - */ -void att_set_db(hci_con_handle_t con_handle, const uint8_t *db); - -/* - * @brief set callback for read of dynamic attributes - * @param callback - */ -void att_set_read_callback(att_read_callback_t callback); - -/* - * @brief set callback for write of dynamic attributes - * @param callback - */ -void att_set_write_callback(att_write_callback_t callback); - -// void att_exchange_mtu_request(uint16_t peripheral_handle); -// WARNING: ^^^ this API is not available in this release - - -#ifdef __cplusplus -} -#endif - -#endif // __ATT_H diff --git a/bundles/mesh/inc/att_dispatch.h b/bundles/mesh/inc/att_dispatch.h deleted file mode 100644 index 60f62817b..000000000 --- a/bundles/mesh/inc/att_dispatch.h +++ /dev/null @@ -1,72 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -/** - * Dispatcher for independent implementation of ATT client and server - */ - -#ifndef __ATT_DISPATCH_H -#define __ATT_DISPATCH_H - -#include "btstack_util.h" -#include "bt_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief reset att dispatchter - * @param packet_hander for ATT client packets - */ -void att_dispatch_register_client(btstack_packet_handler_t packet_handler); - -/** - * @brief reset att dispatchter - * @param packet_hander for ATT server packets - */ -void att_dispatch_register_server(btstack_packet_handler_t packet_handler); - -/** - * @brief can send packet for client - * @param con_handle - */ -int att_dispatch_client_can_send_now(hci_con_handle_t con_handle); - -/** - * @brief can send packet for server - * @param con_handle - */ -int att_dispatch_server_can_send_now(hci_con_handle_t con_handle); - -/** - * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible for client - * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function - * so packet handler should be ready to handle it - * @param con_handle - */ -void att_dispatch_client_request_can_send_now_event(hci_con_handle_t con_handle); - -/** - * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible for server - * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function - * so packet handler should be ready to handle it - * @param con_handle - */ -void att_dispatch_server_request_can_send_now_event(hci_con_handle_t con_handle); - -#ifdef __cplusplus -} -#endif - -#endif // __ATT_DISPATCH_H diff --git a/bundles/mesh/inc/att_server.h b/bundles/mesh/inc/att_server.h deleted file mode 100644 index 060edd2a5..000000000 --- a/bundles/mesh/inc/att_server.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2014 BlueKitchen GmbH - * - * 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 the copyright holders nor the names of - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * 4. Any redistribution, use, or modification is done solely for - * personal benefit and not for any commercial purpose or for - * monetary gain. - * - * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH 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 MATTHIAS - * RINGWALD 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. - * - * Please inquire about commercial licensing options at - * contact@bluekitchen-gmbh.com - * - */ -#ifndef __ATT_SERVER_H -#define __ATT_SERVER_H - -#include -#include "att_db.h" -#include "btstack_defines.h" -#include "gatt_external.h" -#if defined __cplusplus -extern "C" { -#endif - -/* API_END */ - -#if defined __cplusplus -} -#endif - -#endif // __ATT_SERVER_H diff --git a/bundles/mesh/inc/ble.h b/bundles/mesh/inc/ble.h deleted file mode 100644 index 1442c82d5..000000000 --- a/bundles/mesh/inc/ble.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef H_BLE_ -#define H_BLE_ - -#include -#include -#include "syscfg.h" -#include "os/os.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* The number of advertising instances */ -#define BLE_ADV_INSTANCES (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) + 1) - -/* BLE encryption block definitions */ -#define BLE_ENC_BLOCK_SIZE (16) - -struct ble_encryption_block -{ - uint8_t key[BLE_ENC_BLOCK_SIZE]; - uint8_t plain_text[BLE_ENC_BLOCK_SIZE]; - uint8_t cipher_text[BLE_ENC_BLOCK_SIZE]; -}; - -/* - * BLE MBUF structure: - * - * The BLE mbuf structure is as follows. Note that this structure applies to - * the packet header mbuf (not mbufs that are part of a "packet chain"): - * struct os_mbuf (16) - * struct os_mbuf_pkthdr (8) - * struct ble_mbuf_hdr (8) - * Data buffer (payload size, in bytes) - * - * The BLE mbuf header contains the following: - * flags: bitfield with the following values - * 0x01: Set if there was a match on the whitelist - * 0x02: Set if a connect request was transmitted upon receiving pdu - * 0x04: Set the first time we transmit the PDU (used to detect retry). - * channel: The logical BLE channel PHY channel # (0 - 39) - * crcok: flag denoting CRC check passed (1) or failed (0). - * rssi: RSSI, in dBm. - */ -struct ble_mbuf_hdr_rxinfo -{ - uint16_t flags; - uint8_t channel; - uint8_t handle; - int8_t rssi; - /* XXX: we could just use single phy_mode field */ - int8_t phy; - uint8_t phy_mode; -#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) - void *user_data; -#endif -}; - -/* Flag definitions for rxinfo */ -#define BLE_MBUF_HDR_F_EXT_ADV_SEC (0x1000) -#define BLE_MBUF_HDR_F_EXT_ADV (0x0800) -#define BLE_MBUF_HDR_F_RESOLVED (0x0400) -#define BLE_MBUF_HDR_F_AUX_PTR_WAIT (0x0200) -#define BLE_MBUF_HDR_F_AUX_INVALID (0x0100) -#define BLE_MBUF_HDR_F_CRC_OK (0x0080) -#define BLE_MBUF_HDR_F_DEVMATCH (0x0040) -#define BLE_MBUF_HDR_F_MIC_FAILURE (0x0020) -#define BLE_MBUF_HDR_F_SCAN_RSP_TXD (0x0010) -#define BLE_MBUF_HDR_F_SCAN_RSP_CHK (0x0008) -#define BLE_MBUF_HDR_F_RXSTATE_MASK (0x0007) - -/* Transmit info. NOTE: no flags defined */ -struct ble_mbuf_hdr_txinfo -{ - uint8_t flags; - uint8_t offset; - uint8_t pyld_len; - uint8_t hdr_byte; -}; - -struct ble_mbuf_hdr -{ - union { - struct ble_mbuf_hdr_rxinfo rxinfo; - struct ble_mbuf_hdr_txinfo txinfo; - }; - uint32_t beg_cputime; - uint32_t rem_usecs; -}; - -#define BLE_MBUF_HDR_EXT_ADV_SEC(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_EXT_ADV_SEC)) - -#define BLE_MBUF_HDR_EXT_ADV(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_EXT_ADV)) - -#define BLE_MBUF_HDR_DEVMATCH(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_DEVMATCH)) - -#define BLE_MBUF_HDR_SCAN_RSP_RCV(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_SCAN_RSP_CHK)) - -#define BLE_MBUF_HDR_AUX_INVALID(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_AUX_INVALID)) - -#define BLE_MBUF_HDR_WAIT_AUX(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_AUX_PTR_WAIT)) - -#define BLE_MBUF_HDR_CRC_OK(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_CRC_OK)) - -#define BLE_MBUF_HDR_MIC_FAILURE(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_MIC_FAILURE)) - -#define BLE_MBUF_HDR_RESOLVED(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_RESOLVED)) - -#define BLE_MBUF_HDR_RX_STATE(hdr) \ - ((uint8_t)((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_RXSTATE_MASK)) - -#define BLE_MBUF_HDR_PTR(om) \ - (struct ble_mbuf_hdr *)((uint8_t *)om + sizeof(struct os_mbuf) + \ - sizeof(struct os_mbuf_pkthdr)) - -/* BLE mbuf overhead per packet header mbuf */ -#define BLE_MBUF_PKTHDR_OVERHEAD \ - (sizeof(struct os_mbuf_pkthdr) + sizeof(struct ble_mbuf_hdr)) - -#define BLE_MBUF_MEMBLOCK_OVERHEAD \ - (sizeof(struct os_mbuf) + BLE_MBUF_PKTHDR_OVERHEAD) - -/* Length of host user header. Only contains the peer's connection handle. */ -#define BLE_MBUF_HS_HDR_LEN (2) - -#define BLE_DEV_ADDR_LEN (6) -extern uint8_t g_dev_addr[BLE_DEV_ADDR_LEN]; -extern uint8_t g_random_addr[BLE_DEV_ADDR_LEN]; - -/* BLE Error Codes (Core v4.2 Vol 2 part D) */ -enum ble_error_codes -{ - /* An "error" code of 0x0 means success */ - BLE_ERR_SUCCESS = 0x00, - BLE_ERR_UNKNOWN_HCI_CMD = 0x01, - BLE_ERR_UNK_CONN_ID = 0x02, - BLE_ERR_HW_FAIL = 0x03, - BLE_ERR_PAGE_TMO = 0x04, - BLE_ERR_AUTH_FAIL = 0x05, - BLE_ERR_PINKEY_MISSING = 0x06, - BLE_ERR_MEM_CAPACITY = 0x07, - BLE_ERR_CONN_SPVN_TMO = 0x08, - BLE_ERR_CONN_LIMIT = 0x09, - BLE_ERR_SYNCH_CONN_LIMIT = 0x0a, - BLE_ERR_ACL_CONN_EXISTS = 0x0b, - BLE_ERR_CMD_DISALLOWED = 0x0c, - BLE_ERR_CONN_REJ_RESOURCES = 0x0d, - BLE_ERR_CONN_REJ_SECURITY = 0x0e, - BLE_ERR_CONN_REJ_BD_ADDR = 0x0f, - BLE_ERR_CONN_ACCEPT_TMO = 0x10, - BLE_ERR_UNSUPPORTED = 0x11, - BLE_ERR_INV_HCI_CMD_PARMS = 0x12, - BLE_ERR_REM_USER_CONN_TERM = 0x13, - BLE_ERR_RD_CONN_TERM_RESRCS = 0x14, - BLE_ERR_RD_CONN_TERM_PWROFF = 0x15, - BLE_ERR_CONN_TERM_LOCAL = 0x16, - BLE_ERR_REPEATED_ATTEMPTS = 0x17, - BLE_ERR_NO_PAIRING = 0x18, - BLE_ERR_UNK_LMP = 0x19, - BLE_ERR_UNSUPP_REM_FEATURE = 0x1a, - BLE_ERR_SCO_OFFSET = 0x1b, - BLE_ERR_SCO_ITVL = 0x1c, - BLE_ERR_SCO_AIR_MODE = 0x1d, - BLE_ERR_INV_LMP_LL_PARM = 0x1e, - BLE_ERR_UNSPECIFIED = 0x1f, - BLE_ERR_UNSUPP_LMP_LL_PARM = 0x20, - BLE_ERR_NO_ROLE_CHANGE = 0x21, - BLE_ERR_LMP_LL_RSP_TMO = 0x22, - BLE_ERR_LMP_COLLISION = 0x23, - BLE_ERR_LMP_PDU = 0x24, - BLE_ERR_ENCRYPTION_MODE = 0x25, - BLE_ERR_LINK_KEY_CHANGE = 0x26, - BLE_ERR_UNSUPP_QOS = 0x27, - BLE_ERR_INSTANT_PASSED = 0x28, - BLE_ERR_UNIT_KEY_PAIRING = 0x29, - BLE_ERR_DIFF_TRANS_COLL = 0x2a, - /* BLE_ERR_RESERVED = 0x2b */ - BLE_ERR_QOS_PARM = 0x2c, - BLE_ERR_QOS_REJECTED = 0x2d, - BLE_ERR_CHAN_CLASS = 0x2e, - BLE_ERR_INSUFFICIENT_SEC = 0x2f, - BLE_ERR_PARM_OUT_OF_RANGE = 0x30, - /* BLE_ERR_RESERVED = 0x31 */ - BLE_ERR_PENDING_ROLE_SW = 0x32, - /* BLE_ERR_RESERVED = 0x33 */ - BLE_ERR_RESERVED_SLOT = 0x34, - BLE_ERR_ROLE_SW_FAIL = 0x35, - BLE_ERR_INQ_RSP_TOO_BIG = 0x36, - BLE_ERR_SEC_SIMPLE_PAIR = 0x37, - BLE_ERR_HOST_BUSY_PAIR = 0x38, - BLE_ERR_CONN_REJ_CHANNEL = 0x39, - BLE_ERR_CTLR_BUSY = 0x3a, - BLE_ERR_CONN_PARMS = 0x3b, - BLE_ERR_DIR_ADV_TMO = 0x3c, - BLE_ERR_CONN_TERM_MIC = 0x3d, - BLE_ERR_CONN_ESTABLISHMENT = 0x3e, - BLE_ERR_MAC_CONN_FAIL = 0x3f, - BLE_ERR_COARSE_CLK_ADJ = 0x40, - BLE_ERR_TYPE0_SUBMAP_NDEF = 0x41, - BLE_ERR_UNK_ADV_INDENT = 0x42, - BLE_RR_LIMIT_REACHED = 0x43, - BLE_ERR_MAX = 0xff -}; - -int ble_err_from_os(int os_err); - -/* HW error codes */ -#define BLE_HW_ERR_DO_NOT_USE (0) /* XXX: reserve this one for now */ -#define BLE_HW_ERR_HCI_SYNC_LOSS (1) - -/* Own Bluetooth Device address type */ -#define BLE_OWN_ADDR_PUBLIC (0x00) -#define BLE_OWN_ADDR_RANDOM (0x01) -#define BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT (0x02) -#define BLE_OWN_ADDR_RPA_RANDOM_DEFAULT (0x03) - -/* Bluetooth Device address type */ -#define BLE_ADDR_PUBLIC (0x00) -#define BLE_ADDR_RANDOM (0x01) -#define BLE_ADDR_PUBLIC_ID (0x02) -#define BLE_ADDR_RANDOM_ID (0x03) - -#define BLE_ADDR_ANY (&(ble_addr_t) { 0, {0, 0, 0, 0, 0, 0} }) - -#define BLE_ADDR_IS_RPA(addr) (((addr)->type == BLE_ADDR_RANDOM) && \ - ((addr)->val[5] & 0xc0) == 0x40) -#define BLE_ADDR_IS_NRPA(addr) (((addr)->type == BLE_ADDR_RANDOM) && \ - (((addr)->val[5] & 0xc0) == 0x00) -#define BLE_ADDR_IS_STATIC(addr) (((addr)->type == BLE_ADDR_RANDOM) && \ - (((addr)->val[5] & 0xc0) == 0xc0) - -typedef struct { - uint8_t type; - uint8_t val[6]; -} ble_addr_t; - - -static inline int ble_addr_cmp(const ble_addr_t *a, const ble_addr_t *b) -{ - int type_diff; - - type_diff = a->type - b->type; - if (type_diff != 0) { - return type_diff; - } - - return memcmp(a->val, b->val, sizeof(a->val)); -} - -#ifdef __cplusplus -} -#endif - -#endif /* H_BLE_ */ diff --git a/bundles/mesh/inc/ble_uuid.h b/bundles/mesh/inc/ble_uuid.h deleted file mode 100644 index d3576c595..000000000 --- a/bundles/mesh/inc/ble_uuid.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef H_BLE_UUID_ -#define H_BLE_UUID_ - -/** - * @brief Bluetooth UUID - * @defgroup bt_uuid Bluetooth UUID - * @ingroup bt_host - * @{ - */ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct os_mbuf; - -/** Type of UUID */ -enum { - /** 16-bit UUID (BT SIG assigned) */ - BLE_UUID_TYPE_16 = 16, - - /** 32-bit UUID (BT SIG assigned) */ - BLE_UUID_TYPE_32 = 32, - - /** 128-bit UUID */ - BLE_UUID_TYPE_128 = 128, -}; - -/** Generic UUID type, to be used only as a pointer */ -typedef struct { - /** Type of the UUID */ - uint8_t type; -} ble_uuid_t; - -/** 16-bit UUID */ -typedef struct { - ble_uuid_t u; - uint16_t value; -} ble_uuid16_t; - -/** 32-bit UUID */ -typedef struct { - ble_uuid_t u; - uint32_t value; -} ble_uuid32_t; - -/** 128-bit UUID */ -typedef struct { - ble_uuid_t u; - uint8_t value[16]; -} ble_uuid128_t; - -/** Universal UUID type, to be used for any-UUID static allocation */ -typedef union { - ble_uuid_t u; - ble_uuid16_t u16; - ble_uuid32_t u32; - ble_uuid128_t u128; -} ble_uuid_any_t; - -#define BLE_UUID16_INIT(uuid16) \ - { \ - .u.type = BLE_UUID_TYPE_16, \ - .value = (uuid16), \ - } - -#define BLE_UUID32_INIT(uuid32) \ - { \ - .u.type = BLE_UUID_TYPE_32, \ - .value = (uuid32), \ - } - -#define BLE_UUID128_INIT(uuid128...) \ - { \ - .u.type = BLE_UUID_TYPE_128, \ - .value = { uuid128 }, \ - } - -#define BLE_UUID16_DECLARE(uuid16) \ - ((ble_uuid_t *) (&(ble_uuid16_t) BLE_UUID16_INIT(uuid16))) - -#define BLE_UUID32_DECLARE(uuid32) \ - ((ble_uuid_t *) (&(ble_uuid32_t) BLE_UUID32_INIT(uuid32))) - -#define BLE_UUID128_DECLARE(uuid128...) \ - ((ble_uuid_t *) (&(ble_uuid128_t) BLE_UUID128_INIT(uuid128))) - -#define BLE_UUID16(u) \ - ((ble_uuid16_t *) (u)) - -#define BLE_UUID32(u) \ - ((ble_uuid32_t *) (u)) - -#define BLE_UUID128(u) \ - ((ble_uuid128_t *) (u)) - -/** Size of buffer needed to store UUID as a string. - * Includes trailing \0. - */ -#define BLE_UUID_STR_LEN (37) - -/** @brief Constructs a UUID object from a byte array. - * - * @param uuid On success, this gets populated with the constructed UUID. - * @param buf The source buffer to parse. - * @param len The size of the buffer, in bytes. - * - * @return 0 on success, BLE_HS_EINVAL if the source buffer does not contain - * a valid UUID. - */ -int ble_uuid_init_from_buf(ble_uuid_any_t *uuid, const void *buf, size_t len); - -/** @brief Compares two Bluetooth UUIDs. - * - * @param uuid1 The first UUID to compare. - * @param uuid2 The second UUID to compare. - * - * @return 0 if the two UUIDs are equal, nonzero if the UUIDs differ. - */ -int ble_uuid_cmp(const ble_uuid_t *uuid1, const ble_uuid_t *uuid2); - -/** @brief Copy Bluetooth UUID - * - * @param dst Destination UUID. - * @param src Source UUID. - */ -void ble_uuid_copy(ble_uuid_any_t *dst, const ble_uuid_t *src); - -/** @brief Converts the specified UUID to its string representation. - * - * Example string representations: - * o 16-bit: 0x1234 - * o 32-bit: 0x12345678 - * o 128-bit: 12345678-1234-1234-1234-123456789abc - * - * @param uuid The source UUID to convert. - * @param dst The destination buffer. - * - * @return A pointer to the supplied destination buffer. - */ -char *ble_uuid_to_str(const ble_uuid_t *uuid, char *dst); - -/** @brief Converts the specified 16-bit UUID to a uint16_t. - * - * @param uuid The source UUID to convert. - * - * @return The converted integer on success, NULL if the specified UUID is - * not 16 bits. - */ -uint16_t ble_uuid_u16(const ble_uuid_t *uuid); - -#ifdef __cplusplus -} -#endif - -/** - * @} - */ - -#endif /* _BLE_HOST_UUID_H */ diff --git a/bundles/mesh/inc/bluetooth.h b/bundles/mesh/inc/bluetooth.h deleted file mode 100644 index d1ec9d45a..000000000 --- a/bundles/mesh/inc/bluetooth.h +++ /dev/null @@ -1,763 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef __BLUETOOTH_H -#define __BLUETOOTH_H - -#include - -#define BD_ADDR_LEN 0x06 - -/** - * @brief hci connection handle type - */ -typedef uint16_t hci_con_handle_t; - -/** - * @brief Length of a bluetooth device address. - */ - -/** - * @brief Bluetooth address - */ -typedef uint8_t bd_addr_t[BD_ADDR_LEN]; - -/** - * Address types - * @note: BTstack uses a custom addr type to refer to classic ACL and SCO devices - */ - typedef enum { - BD_ADDR_TYPE_LE_PUBLIC = 0, - BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 -} bd_addr_type_t; - -/** - * @brief link key - */ -#define LINK_KEY_LEN 16 -#define LINK_KEY_STR_LEN (LINK_KEY_LEN*2) -typedef uint8_t link_key_t[LINK_KEY_LEN]; - -/** - * @brief link key type - */ -typedef enum { - COMBINATION_KEY = 0, // standard pairing - LOCAL_UNIT_KEY, // ? - REMOTE_UNIT_KEY, // ? -} link_key_type_t; - -/** - * HCI Transport - */ - -/** - * packet types - used in BTstack and over the H4 UART interface - */ -#define HCI_COMMAND_DATA_PACKET 0x01 -#define HCI_ACL_DATA_PACKET 0x02 -#define HCI_EVENT_PACKET 0x04 //changed to align with spec -#define HCI_COMPLETED_SDU_PACKET 0x0B // for LE credit channel : completed SDU event -#define L2CAP_EVENT_PACKET 0x0A - -// packet header sizes -#define HCI_CMD_HEADER_SIZE 3 -#define HCI_ACL_HEADER_SIZE 4 -#define HCI_SCO_HEADER_SIZE 3 -#define HCI_EVENT_HEADER_SIZE 2 - -/** - * HCI Layer - */ - -// -// Error Codes -// - -// from Bluetooth Core Specification -#define ERROR_CODE_SUCCESS 0x00 -#define ERROR_CODE_UNKNOWN_HCI_COMMAND 0x01 -#define ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 -#define ERROR_CODE_HARDWARE_FAILURE 0x03 -#define ERROR_CODE_PAGE_TIMEOUT 0x04 -#define ERROR_CODE_AUTHENTICATION_FAILURE 0x05 -#define ERROR_CODE_PIN_OR_KEY_MISSING 0x06 -#define ERROR_CODE_MEMORY_CAPACITY_EXCEEDED 0x07 -#define ERROR_CODE_CONNECTION_TIMEOUT 0x08 -#define ERROR_CODE_CONNECTION_LIMIT_EXCEEDED 0x09 -#define ERROR_CODE_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE_EXCEEDED 0x0A -#define ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS 0x0B -#define ERROR_CODE_COMMAND_DISALLOWED 0x0C -#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES 0x0D -#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_SECURITY_REASONS 0x0E -#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR 0x0F -#define ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10 -#define ERROR_CODE_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE 0x11 -#define ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS 0x12 -#define ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION 0x13 -#define ERROR_CODE_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES 0x14 -#define ERROR_CODE_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_POWER_OFF 0x15 -#define ERROR_CODE_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16 -#define ERROR_CODE_REPEATED_ATTEMPTS 0x17 -#define ERROR_CODE_PAIRING_NOT_ALLOWED 0x18 -#define ERROR_CODE_UNKNOWN_LMP_PDU 0x19 -#define ERROR_CODE_UNSUPPORTED_REMOTE_FEATURE_UNSUPPORTED_LMP_FEATURE 0x1A -#define ERROR_CODE_SCO_OFFSET_REJECTED 0x1B -#define ERROR_CODE_SCO_INTERVAL_REJECTED 0x1C -#define ERROR_CODE_SCO_AIR_MODE_REJECTED 0x1D -#define ERROR_CODE_INVALID_LMP_PARAMETERS_INVALID_LL_PARAMETERS 0x1E -#define ERROR_CODE_UNSPECIFIED_ERROR 0x1F -#define ERROR_CODE_UNSUPPORTED_LMP_PARAMETER_VALUE_UNSUPPORTED_LL_PARAMETER_VALUE 0x20 -#define ERROR_CODE_ROLE_CHANGE_NOT_ALLOWED 0x21 -#define ERROR_CODE_LMP_RESPONSE_TIMEOUT_LL_RESPONSE_TIMEOUT 0x22 -#define ERROR_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 -#define ERROR_CODE_LMP_PDU_NOT_ALLOWED 0x24 -#define ERROR_CODE_ENCRYPTION_MODE_NOT_ACCEPTABLE 0x25 -#define ERROR_CODE_LINK_KEY_CANNOT_BE_CHANGED 0x26 -#define ERROR_CODE_REQUESTED_QOS_NOT_SUPPORTED 0x27 -#define ERROR_CODE_INSTANT_PASSED 0x28 -#define ERROR_CODE_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29 -#define ERROR_CODE_DIFFERENT_TRANSACTION_COLLISION 0x2A -#define ERROR_CODE_RESERVED 0x2B -#define ERROR_CODE_QOS_UNACCEPTABLE_PARAMETER 0x2C -#define ERROR_CODE_QOS_REJECTED 0x2D -#define ERROR_CODE_CHANNEL_CLASSIFICATION_NOT_SUPPORTED 0x2E -#define ERROR_CODE_INSUFFICIENT_SECURITY 0x2F -#define ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 -// #define ERROR_CODE_RESERVED -#define ERROR_CODE_ROLE_SWITCH_PENDING 0x32 -// #define ERROR_CODE_RESERVED -#define ERROR_CODE_RESERVED_SLOT_VIOLATION 0x34 -#define ERROR_CODE_ROLE_SWITCH_FAILED 0x35 -#define ERROR_CODE_EXTENDED_INQUIRY_RESPONSE_TOO_LARGE 0x36 -#define ERROR_CODE_SECURE_SIMPLE_PAIRING_NOT_SUPPORTED_BY_HOST 0x37 -#define ERROR_CODE_HOST_BUSY_PAIRING 0x38 -#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_NO_SUITABLE_CHANNEL_FOUND 0x39 -#define ERROR_CODE_CONTROLLER_BUSY 0x3A -#define ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS 0x3B -#define ERROR_CODE_DIRECTED_ADVERTISING_TIMEOUT 0x3C -#define ERROR_CODE_CONNECTION_TERMINATED_DUE_TO_MIC_FAILURE 0x3D -#define ERROR_CODE_CONNECTION_FAILED_TO_BE_ESTABLISHED 0x3E -#define ERROR_CODE_MAC_CONNECTION_FAILED 0x3F -#define ERROR_CODE_COARSE_CLOCK_ADJUSTMENT_REJECTED_BUT_WILL_TRY_TO_ADJUST_USING_CLOCK_DRAGGING 0x40 -#define ERROR_CODE_UNKNOWN_ADVERTISING_IDENTIFIER 0x42 -#define ERROR_CODE_LIMIT_REACHED 0x43 -// HCI roles -#define HCI_ROLE_MASTER 0 -#define HCI_ROLE_SLAVE 1 - -// packet sizes (max payload) -#define HCI_ACL_DM1_SIZE 17 -#define HCI_ACL_DH1_SIZE 27 -#define HCI_ACL_2DH1_SIZE 54 -#define HCI_ACL_3DH1_SIZE 83 -#define HCI_ACL_DM3_SIZE 121 -#define HCI_ACL_DH3_SIZE 183 -#define HCI_ACL_DM5_SIZE 224 -#define HCI_ACL_DH5_SIZE 339 -#define HCI_ACL_2DH3_SIZE 367 -#define HCI_ACL_3DH3_SIZE 552 -#define HCI_ACL_2DH5_SIZE 679 -#define HCI_ACL_3DH5_SIZE 1021 - -#define HCI_EVENT_PAYLOAD_SIZE 255 -#define HCI_CMD_PAYLOAD_SIZE 255 - -#define LE_ADVERTISING_DATA_SIZE 31 - -/** - * Default INQ Mode - */ -#define HCI_INQUIRY_LAP 0x9E8B33L // 0x9E8B33: General/Unlimited Inquiry Access Code (GIAC) - -/** - * SSP IO Capabilities - */ -#define SSP_IO_CAPABILITY_DISPLAY_ONLY 0 -#define SSP_IO_CAPABILITY_DISPLAY_YES_NO 1 -#define SSP_IO_CAPABILITY_KEYBOARD_ONLY 2 -#define SSP_IO_CAPABILITY_NO_INPUT_NO_OUTPUT 3 -#define SSP_IO_CAPABILITY_UNKNOWN 0xff - - -/** - * SSP Authentication Requirements, see IO Capability Request Reply Commmand - */ - -// Numeric comparison with automatic accept allowed. -#define SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_NO_BONDING 0x00 - -// Use IO Capabilities to deter- mine authentication procedure -#define SSP_IO_AUTHREQ_MITM_PROTECTION_REQUIRED_NO_BONDING 0x01 - -// Numeric compar- ison with automatic accept allowed. -#define SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_DEDICATED_BONDING 0x02 - -// Use IO Capabilities to determine authentication procedure -#define SSP_IO_AUTHREQ_MITM_PROTECTION_REQUIRED_DEDICATED_BONDING 0x03 - -// Numeric Compari- son with automatic accept allowed. -#define SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_GENERAL_BONDING 0x04 - -// Use IO capabilities to determine authentication procedure. -#define SSP_IO_AUTHREQ_MITM_PROTECTION_REQUIRED_GENERAL_BONDING 0x05 - - -// OGFs -#define OGF_LINK_CONTROL 0x01 -#define OGF_LINK_POLICY 0x02 -#define OGF_CONTROLLER_BASEBAND 0x03 -#define OGF_INFORMATIONAL_PARAMETERS 0x04 -#define OGF_STATUS_PARAMETERS 0x05 -#define OGF_TESTING 0x06 -#define OGF_LE_CONTROLLER 0x08 -#define OGF_VENDOR 0x3f - - -// Events from host controller to host - -/** - * @format 1 - * @param status - */ -#define HCI_EVENT_INQUIRY_COMPLETE 0x01 -// no format yet, can contain multiple results - -/** - * @format 1B11132 - * @param num_responses - * @param bd_addr - * @param page_scan_repetition_mode - * @param reserved1 - * @param reserved2 - * @param class_of_device - * @param clock_offset - */ -#define HCI_EVENT_INQUIRY_RESULT 0x02 - -/** - * @format 12B11 - * @param status - * @param connection_handle - * @param bd_addr - * @param link_type - * @param encryption_enabled - */ -#define HCI_EVENT_CONNECTION_COMPLETE 0x03 -/** - * @format B31 - * @param bd_addr - * @param class_of_device - * @param link_type - */ -#define HCI_EVENT_CONNECTION_REQUEST 0x04 -/** - * @format 121 - * @param status - * @param connection_handle - * @param reason - */ -#define HCI_EVENT_DISCONNECTION_COMPLETE 0x05 -/** - * @format 12 - * @param status - * @param connection_handle - */ -#define HCI_EVENT_AUTHENTICATION_COMPLETE_EVENT 0x06 -/** - * @format 1BN - * @param status - * @param bd_addr - * @param remote_name - */ -#define HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07 -/** - * @format 121 - * @param status - * @param connection_handle - * @param encryption_enabled - */ -#define HCI_EVENT_ENCRYPTION_CHANGE 0x08 -/** - * @format 12 - * @param status - * @param connection_handle - */ -#define HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09 -/** - * @format 121 - * @param status - * @param connection_handle - * @param key_flag - */ -#define HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0A -#define HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE 0x0B -#define HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C -#define HCI_EVENT_QOS_SETUP_COMPLETE 0x0D - -/** - * @format 12R - * @param num_hci_command_packets - * @param command_opcode - * @param return_parameters - */ -#define HCI_EVENT_COMMAND_COMPLETE 0x0E -/** - * @format 112 - * @param status - * @param num_hci_command_packets - * @param command_opcode - */ -#define HCI_EVENT_COMMAND_STATUS 0x0F - -/** - * @format 121 - * @param hardware_code - */ -#define HCI_EVENT_HARDWARE_ERROR 0x10 - -#define HCI_EVENT_FLUSH_OCCURED 0x11 - -/** - * @format 1B1 - * @param status - * @param bd_addr - * @param role - */ -#define HCI_EVENT_ROLE_CHANGE 0x12 - -// TODO: number_of_handles 1, connection_handle[H*i], hc_num_of_completed_packets[2*i] -#define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13 - -/** - * @format 1H12 - * @param status - * @param handle - * @param mode - * @param interval - */ -#define HCI_EVENT_MODE_CHANGE_EVENT 0x14 - -// TODO: num_keys, bd_addr[B*i], link_key[16 octets * i] -#define HCI_EVENT_RETURN_LINK_KEYS 0x15 - -/** - * @format B - * @param bd_addr - */ -#define HCI_EVENT_PIN_CODE_REQUEST 0x16 - -/** - * @format B - * @param bd_addr - */ -#define HCI_EVENT_LINK_KEY_REQUEST 0x17 - -// TODO: bd_addr B, link_key 16octets, key_type 1 -#define HCI_EVENT_LINK_KEY_NOTIFICATION 0x18 - -/** - * @format 1 - * @param link_type - */ -#define HCI_EVENT_DATA_BUFFER_OVERFLOW 0x1A - -/** - * @format H1 - * @param handle - * @param lmp_max_slots - */ -#define HCI_EVENT_MAX_SLOTS_CHANGED 0x1B - -/** - * @format 1H2 - * @param status - * @param handle - * @param clock_offset - */ -#define HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE 0x1C - -/** - * @format 1H2 - * @param status - * @param handle - * @param packet_types - */ -#define HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED 0x1D - -/** - * @format 1B11321 - * @param num_responses - * @param bd_addr - * @param page_scan_repetition_mode - * @param reserved - * @param class_of_device - * @param clock_offset - * @param rssi - */ -#define HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22 - -/** - * @format 1HB111221 - * @param status - * @param handle - * @param bd_addr - * @param link_type - * @param transmission_interval - * @param retransmission_interval - * @param rx_packet_length - * @param tx_packet_length - * @param air_mode - */ -#define HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x2C - -// TODO: serialize extended_inquiry_response and provide parser -/** - * @format 1B11321 - * @param num_responses - * @param bd_addr - * @param page_scan_repetition_mode - * @param reserved - * @param class_of_device - * @param clock_offset - * @param rssi - */ -#define HCI_EVENT_EXTENDED_INQUIRY_RESPONSE 0x2F - - /** - * @format 1H - * @param status - * @param handle - */ -#define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30 - -#define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31 -#define HCI_EVENT_IO_CAPABILITY_RESPONSE 0x32 -#define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33 -#define HCI_EVENT_USER_PASSKEY_REQUEST 0x34 -#define HCI_EVENT_REMOTE_OOB_DATA_REQUEST 0x35 -#define HCI_EVENT_SIMPLE_PAIRING_COMPLETE 0x36 - -#define HCI_EVENT_LE_META 0x3E -/*add the event of BLE dengyiyun*/ -#define HCI_EVENT_AUTHENTICATED_PAYLOAD_TIMEOUT_EXPIRED 0x57 - -#define HCI_EVENT_VENDOR_SPECIFIC 0xFF - - -// add by dengyiyun for event originated in HCI to L2CAP - -#define HCI_EVENT_L2CAP_CONN_PARA_UPDATE_REQUEST 0xFB - -/** - * @format 11H11B2221 - * @param subevent_code - * @param status - * @param connection_handle - * @param role - * @param peer_address_type - * @param peer_address - * @param conn_interval - * @param conn_latency - * @param supervision_timeout - * @param master_clock_accuracy - */ -#define HCI_SUBEVENT_LE_CONNECTION_COMPLETE 0x01 -#define HCI_SUBEVENT_LE_ADVERTISING_REPORT 0x02 -#define HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 0x03 -#define HCI_SUBEVENT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04 -#define HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST 0x05 -/*+add new subevent of LE event dengyiyun 26-Aug-2016*/ -#define HCI_SUBEVENT_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_COMPLETE 0x06 -#define HCI_SUBEVENT_LE_DATA_LENGTH_CHANGE_EVENT 0x07 -/*-add new subevent of LE event dengyiyun 26-Aug-2016*/ -#define HCI_SUBEVENT_LE_DIRECT_ADVERTISING_REPORT 0x0B -#define HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE 0x0A - -#define HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE 0X0C -#define HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT 0X0D -#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED 0X0E -#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT 0X0F -#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_LOST 0X10 -#define HCI_SUBEVENT_LE_SCAN_TIMEOUT 0X11 -#define HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED 0X12 -#define HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED 0X13 -#define HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM 0X14 - - -// last used HCI_EVENT in 2.1 is 0x3d -// last used HCI_EVENT in 4.1 is 0x57 - -/** - * L2CAP Layer - */ - -#define L2CAP_HEADER_SIZE 4 - -#define L2CAP_SIG_ID_INVALID 0 - -// size of HCI ACL + L2CAP Header for regular data packets (8) -#define COMPLETE_L2CAP_HEADER (HCI_ACL_HEADER_SIZE + L2CAP_HEADER_SIZE) - -// minimum signaling MTU -#define L2CAP_MINIMAL_MTU 48 -#define L2CAP_DEFAULT_MTU 672 - -// Minimum/default MTU -#define L2CAP_LE_DEFAULT_MTU 23 - -// L2CAP Fixed Channel IDs - -#define L2CAP_CID_ATTRIBUTE_PROTOCOL 0x0004 -#define L2CAP_CID_SIGNALING_LE 0x0005 -#define L2CAP_CID_SECURITY_MANAGER_PROTOCOL 0x0006 - -// L2CAP Configuration Result Codes -#define L2CAP_CONF_RESULT_UNKNOWN_OPTIONS 0x0003 - -// L2CAP Reject Result Codes -#define L2CAP_REJ_CMD_UNKNOWN 0x0000 - -// Response Timeout eXpired -#define L2CAP_RTX_TIMEOUT_MS 10000 - -// Extended Response Timeout eXpired -#define L2CAP_ERTX_TIMEOUT_MS 120000 - -// Fixed PSM numbers -#define PSM_SDP 0x01 -#define PSM_RFCOMM 0x03 -#define PSM_BNEP 0x0F -#define PSM_HID_CONTROL 0x11 -#define PSM_HID_INTERRUPT 0x13 - - -/** - * ATT - */ - -// Minimum/default MTU -#define ATT_DEFAULT_MTU 23 - -// MARK: Attribute PDU Opcodes -#define ATT_ERROR_RESPONSE 0x01 - -#define ATT_EXCHANGE_MTU_REQUEST 0x02 -#define ATT_EXCHANGE_MTU_RESPONSE 0x03 - -#define ATT_FIND_INFORMATION_REQUEST 0x04 -#define ATT_FIND_INFORMATION_REPLY 0x05 -#define ATT_FIND_BY_TYPE_VALUE_REQUEST 0x06 -#define ATT_FIND_BY_TYPE_VALUE_RESPONSE 0x07 - -#define ATT_READ_BY_TYPE_REQUEST 0x08 -#define ATT_READ_BY_TYPE_RESPONSE 0x09 -#define ATT_READ_REQUEST 0x0a -#define ATT_READ_RESPONSE 0x0b -#define ATT_READ_BLOB_REQUEST 0x0c -#define ATT_READ_BLOB_RESPONSE 0x0d -#define ATT_READ_MULTIPLE_REQUEST 0x0e -#define ATT_READ_MULTIPLE_RESPONSE 0x0f -#define ATT_READ_BY_GROUP_TYPE_REQUEST 0x10 -#define ATT_READ_BY_GROUP_TYPE_RESPONSE 0x11 - -#define ATT_WRITE_REQUEST 0x12 -#define ATT_WRITE_RESPONSE 0x13 - -#define ATT_PREPARE_WRITE_REQUEST 0x16 -#define ATT_PREPARE_WRITE_RESPONSE 0x17 -#define ATT_EXECUTE_WRITE_REQUEST 0x18 -#define ATT_EXECUTE_WRITE_RESPONSE 0x19 - -#define ATT_HANDLE_VALUE_NOTIFICATION 0x1b -#define ATT_HANDLE_VALUE_INDICATION 0x1d -#define ATT_HANDLE_VALUE_CONFIRMATION 0x1e - - -#define ATT_WRITE_COMMAND 0x52 -#define ATT_SIGNED_WRITE_COMMAND 0xD2 - -// MARK: ATT Error Codes -#define ATT_ERROR_INVALID_HANDLE 0x01 -#define ATT_ERROR_READ_NOT_PERMITTED 0x02 -#define ATT_ERROR_WRITE_NOT_PERMITTED 0x03 -#define ATT_ERROR_INVALID_PDU 0x04 -#define ATT_ERROR_INSUFFICIENT_AUTHENTICATION 0x05 -#define ATT_ERROR_REQUEST_NOT_SUPPORTED 0x06 -#define ATT_ERROR_INVALID_OFFSET 0x07 -#define ATT_ERROR_INSUFFICIENT_AUTHORIZATION 0x08 -#define ATT_ERROR_PREPARE_QUEUE_FULL 0x09 -#define ATT_ERROR_ATTRIBUTE_NOT_FOUND 0x0a -#define ATT_ERROR_ATTRIBUTE_NOT_LONG 0x0b -#define ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE 0x0c -#define ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH 0x0d -#define ATT_ERROR_UNLIKELY_ERROR 0x0e -#define ATT_ERROR_INSUFFICIENT_ENCRYPTION 0x0f -#define ATT_ERROR_UNSUPPORTED_GROUP_TYPE 0x10 -#define ATT_ERROR_INSUFFICIENT_RESOURCES 0x11 - -// MARK: Attribute Property Flags -#define ATT_PROPERTY_BROADCAST 0x01 -#define ATT_PROPERTY_READ 0x02 -#define ATT_PROPERTY_WRITE_WITHOUT_RESPONSE 0x04 -#define ATT_PROPERTY_WRITE 0x08 -#define ATT_PROPERTY_NOTIFY 0x10 -#define ATT_PROPERTY_INDICATE 0x20 -#define ATT_PROPERTY_AUTHENTICATED_SIGNED_WRITE 0x40 -#define ATT_PROPERTY_EXTENDED_PROPERTIES 0x80 - -// MARK: Attribute Property Flag, BTstack extension -// value is asked from client -#define ATT_PROPERTY_DYNAMIC 0x100 -// 128 bit UUID used -#define ATT_PROPERTY_UUID128 0x200 -// Authentication required -#define ATT_PROPERTY_AUTHENTICATION_REQUIRED 0x400 -// Authorization from user required -#define ATT_PROPERTY_AUTHORIZATION_REQUIRED 0x800 -// Encryption key size stored in upper 4 bits, 0 == no encryption, encryption key size - 1 otherwise - -// ATT Transaction Timeout of 30 seconds for Command/Response or Incidationc/Confirmation -#define ATT_TRANSACTION_TIMEOUT_MS 30000 - -#define ATT_TRANSACTION_MODE_NONE 0x0 -#define ATT_TRANSACTION_MODE_ACTIVE 0x1 -#define ATT_TRANSACTION_MODE_EXECUTE 0x2 -#define ATT_TRANSACTION_MODE_CANCEL 0x3 - -// MARK: GATT UUIDs -#define GATT_PRIMARY_SERVICE_UUID 0x2800 -#define GATT_SECONDARY_SERVICE_UUID 0x2801 -#define GATT_INCLUDE_SERVICE_UUID 0x2802 -#define GATT_CHARACTERISTICS_UUID 0x2803 -#define GATT_CHARACTERISTIC_EXTENDED_PROPERTIES 0x2900 -#define GATT_CHARACTERISTIC_USER_DESCRIPTION 0x2901 -#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION 0x2902 -#define GATT_SERVER_CHARACTERISTICS_CONFIGURATION 0x2903 -#define GATT_CHARACTERISTIC_PRESENTATION_FORMAT 0x2904 -#define GATT_CHARACTERISTIC_AGGREGATE_FORMAT 0x2905 - -#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE 0 -#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION 1 -#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION 2 - -// GAP Service and Characteristics -#define GAP_SERVICE_UUID 0x1800 -#define GAP_DEVICE_NAME_UUID 0x2a00 -#define GAP_APPEARANCE_UUID 0x2a01 -#define GAP_PERIPHERAL_PRIVACY_FLAG 0x2a02 -#define GAP_RECONNECTION_ADDRESS_UUID 0x2a03 -#define GAP_PERIPHERAL_PREFERRED_CONNECTION_PARAMETERS_UUID 0x2a04 -#define GAP_SERVICE_CHANGED 0x2a05 - -/** - * SM - LE Security Manager - */ -// Bluetooth Spec definitions -typedef enum { - SM_CODE_PAIRING_REQUEST = 0X01, - SM_CODE_PAIRING_RESPONSE, - SM_CODE_PAIRING_CONFIRM, - SM_CODE_PAIRING_RANDOM, - SM_CODE_PAIRING_FAILED, - SM_CODE_ENCRYPTION_INFORMATION, - SM_CODE_MASTER_IDENTIFICATION, - SM_CODE_IDENTITY_INFORMATION, - SM_CODE_IDENTITY_ADDRESS_INFORMATION, - SM_CODE_SIGNING_INFORMATION, - SM_CODE_SECURITY_REQUEST -} SECURITY_MANAGER_COMMANDS; - -// IO Capability Values -typedef enum { - IO_CAPABILITY_UNINITIALIZED = -1, - IO_CAPABILITY_DISPLAY_ONLY = 0, - IO_CAPABILITY_DISPLAY_YES_NO, - IO_CAPABILITY_KEYBOARD_ONLY, - IO_CAPABILITY_NO_INPUT_NO_OUTPUT, - IO_CAPABILITY_KEYBOARD_DISPLAY, // not used by secure simple pairing -} io_capability_t; - -// Authentication requirement flags -#define SM_AUTHREQ_NO_BONDING 0x00 -#define SM_AUTHREQ_BONDING 0x01 -#define SM_AUTHREQ_MITM_PROTECTION 0x04 - -// Key distribution flags used by spec -#define SM_KEYDIST_ENC_KEY 0X01 -#define SM_KEYDIST_ID_KEY 0x02 -#define SM_KEYDIST_SIGN 0x04 - -// Key distribution flags used internally -#define SM_KEYDIST_FLAG_ENCRYPTION_INFORMATION 0x01 -#define SM_KEYDIST_FLAG_MASTER_IDENTIFICATION 0x02 -#define SM_KEYDIST_FLAG_IDENTITY_INFORMATION 0x04 -#define SM_KEYDIST_FLAG_IDENTITY_ADDRESS_INFORMATION 0x08 -#define SM_KEYDIST_FLAG_SIGNING_IDENTIFICATION 0x10 - -// STK Generation Methods -#define SM_STK_GENERATION_METHOD_JUST_WORKS 0x01 -#define SM_STK_GENERATION_METHOD_OOB 0x02 -#define SM_STK_GENERATION_METHOD_PASSKEY 0x04 - -// Pairing Failed Reasons -#define SM_REASON_RESERVED 0x00 -#define SM_REASON_PASSKEYT_ENTRY_FAILED 0x01 -#define SM_REASON_OOB_NOT_AVAILABLE 0x02 -#define SM_REASON_AUTHENTHICATION_REQUIREMENTS 0x03 -#define SM_REASON_CONFIRM_VALUE_FAILED 0x04 -#define SM_REASON_PAIRING_NOT_SUPPORTED 0x05 -#define SM_REASON_ENCRYPTION_KEY_SIZE 0x06 -#define SM_REASON_COMMAND_NOT_SUPPORTED 0x07 -#define SM_REASON_UNSPECIFIED_REASON 0x08 -#define SM_REASON_REPEATED_ATTEMPTS 0x09 -// also, invalid parameters -// and reserved - -// Company identifiers / manufacturers -#define COMPANY_ID_INGCHIPS 0x06AC - -/** Generic UUID type, to be used only as a pointer */ -typedef struct { - /** Type of the UUID */ - uint8_t type; -} ble_uuid_t; - -/** 16-bit UUID */ -typedef struct { - ble_uuid_t u; - uint16_t value; -} ble_uuid16_t; - -/** 32-bit UUID */ -typedef struct { - ble_uuid_t u; - uint32_t value; -} ble_uuid32_t; - -/** 128-bit UUID */ -typedef struct { - ble_uuid_t u; - uint8_t value[16]; -} ble_uuid128_t; - -/** Universal UUID type, to be used for any-UUID static allocation */ -typedef union { - ble_uuid_t u; - ble_uuid16_t u16; - ble_uuid32_t u32; - ble_uuid128_t u128; -} ble_uuid_any_t; - -#endif diff --git a/bundles/mesh/inc/bt_types.h b/bundles/mesh/inc/bt_types.h deleted file mode 100644 index 366b11e41..000000000 --- a/bundles/mesh/inc/bt_types.h +++ /dev/null @@ -1,82 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef __BT_TYPES_H -#define __BT_TYPES_H -#include -#include "bluetooth.h" -#include "btstack_linked_list.h" - -#define BIT(pos) (1UL<<(pos)) - -typedef enum { - GAP_RANDOM_ADDRESS_OFF = 0, - GAP_RANDOM_ADDRESS_NON_RESOLVABLE, - GAP_RANDOM_ADDRESS_RESOLVABLE, -} gap_random_address_type_t; - -/** - * @brief 128 bit key used with AES128 in Security Manager - */ -typedef uint8_t sm_key_t[16]; - - -// packet handler -typedef void (*btstack_packet_handler_t) (uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size); - -// packet callback supporting multiple registrations -typedef struct { - btstack_linked_item_t item; - btstack_packet_handler_t callback; -} btstack_packet_callback_registration_t; - -// packet handler -typedef void (*user_packet_handler_t) (uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size); - -//macro definition: - -/** - * state of Bluetooth controller - */ -typedef enum { - HCI_POWER_OFF = 0, - HCI_POWER_ON, - HCI_POWER_SLEEP -} HCI_POWER_MODE; - -/** - * State of BTstack - */ -typedef enum { - HCI_STATE_OFF = 0, - HCI_STATE_INITIALIZING, - HCI_STATE_WORKING, - HCI_STATE_HALTING, - HCI_STATE_SLEEPING, - HCI_STATE_FALLING_ASLEEP -} HCI_STATE; - -/** - * @format 1 - * @param state - */ -#define BTSTACK_EVENT_STATE 0x60 - -/** - * @format - */ -#define ATT_EVENT_CAN_SEND_NOW 0xB7 - -#define BTSTACK_EVENT_USER_MSG 0xFF - -#endif - diff --git a/bundles/mesh/inc/btstack_defines.h b/bundles/mesh/inc/btstack_defines.h deleted file mode 100644 index 1ff939afe..000000000 --- a/bundles/mesh/inc/btstack_defines.h +++ /dev/null @@ -1,1062 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef __BTSTACK_DEFINES_H -#define __BTSTACK_DEFINES_H - -#include - - -// DEFINES - -#define DAEMON_EVENT_PACKET 0x05 - -// L2CAP data -#define L2CAP_DATA_PACKET 0x06 - -// RFCOMM data -#define RFCOMM_DATA_PACKET 0x07 - -// Attribute protocol data -#define ATT_DATA_PACKET 0x08 - -// Security Manager protocol data -#define SM_DATA_PACKET 0x09 - -// SDP query result -// format: type (8), record_id (16), attribute_id (16), attribute_length (16), attribute_value (max 1k) -#define SDP_CLIENT_PACKET 0x0a - -// BNEP data -#define BNEP_DATA_PACKET 0x0b - -// Unicast Connectionless Data -#define UCD_DATA_PACKET 0x0c - -// debug log messages -#define LOG_MESSAGE_PACKET 0xfc - - -// ERRORS - -// last error code in 2.1 is 0x38 - we start with 0x50 for BTstack errors -#define BTSTACK_CONNECTION_TO_BTDAEMON_FAILED 0x50 -#define BTSTACK_ACTIVATION_FAILED_SYSTEM_BLUETOOTH 0x51 -#define BTSTACK_ACTIVATION_POWERON_FAILED 0x52 -#define BTSTACK_ACTIVATION_FAILED_UNKNOWN 0x53 -#define BTSTACK_NOT_ACTIVATED 0x54 -#define BTSTACK_BUSY 0x55 -#define BTSTACK_MEMORY_ALLOC_FAILED 0x56 -#define BTSTACK_ACL_BUFFERS_FULL 0x57 - - -#define BTSTACK_LE_CHANNEL_DISCONNECTED 0x58 -#define BTSTACK_LE_CHANNEL_NOT_EXIST 0x59 - -// l2cap errors - enumeration by the command that created them -#define L2CAP_COMMAND_REJECT_REASON_COMMAND_NOT_UNDERSTOOD 0x60 -#define L2CAP_COMMAND_REJECT_REASON_SIGNALING_MTU_EXCEEDED 0x61 -#define L2CAP_COMMAND_REJECT_REASON_INVALID_CID_IN_REQUEST 0x62 - -#define L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL 0x63 -#define L2CAP_CONNECTION_RESPONSE_RESULT_PENDING 0x64 -#define L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM 0x65 -#define L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY 0x66 -#define L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES 0x67 -#define L2CAP_CONNECTION_RESPONSE_RESULT_RTX_TIMEOUT 0x68 - -#define L2CAP_SERVICE_ALREADY_REGISTERED 0x69 -#define L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU 0x6A - -#define RFCOMM_MULTIPLEXER_STOPPED 0x70 -#define RFCOMM_CHANNEL_ALREADY_REGISTERED 0x71 -#define RFCOMM_NO_OUTGOING_CREDITS 0x72 -#define RFCOMM_AGGREGATE_FLOW_OFF 0x73 -#define RFCOMM_DATA_LEN_EXCEEDS_MTU 0x74 - -#define SDP_HANDLE_ALREADY_REGISTERED 0x80 -#define SDP_QUERY_INCOMPLETE 0x81 -#define SDP_SERVICE_NOT_FOUND 0x82 -#define SDP_HANDLE_INVALID 0x83 -#define SDP_QUERY_BUSY 0x84 - -#define ATT_HANDLE_VALUE_INDICATION_IN_PORGRESS 0x90 -#define ATT_HANDLE_VALUE_INDICATION_TIMEOUT 0x91 - -#define GATT_CLIENT_NOT_CONNECTED 0x93 -#define GATT_CLIENT_BUSY 0x94 -#define GATT_CLIENT_IN_WRONG_STATE 0x95 -#define GATT_CLIENT_DIFFERENT_CONTEXT_FOR_ADDRESS_ALREADY_EXISTS 0x96 -#define GATT_CLIENT_VALUE_TOO_LONG 0x97 -#define GATT_CLIENT_CHARACTERISTIC_NOTIFICATION_NOT_SUPPORTED 0x98 -#define GATT_CLIENT_CHARACTERISTIC_INDICATION_NOT_SUPPORTED 0x99 - -#define BNEP_SERVICE_ALREADY_REGISTERED 0xA0 -#define BNEP_CHANNEL_NOT_CONNECTED 0xA1 -#define BNEP_DATA_LEN_EXCEEDS_MTU 0xA2 - - -// DAEMON COMMANDS - -#define OGF_BTSTACK 0x3d - -// cmds for BTstack -// get state: @returns HCI_STATE -#define BTSTACK_GET_STATE 0x01 - -// set power mode: param HCI_POWER_MODE -#define BTSTACK_SET_POWER_MODE 0x02 - -// set capture mode: param on -#define BTSTACK_SET_ACL_CAPTURE_MODE 0x03 - -// get BTstack version -#define BTSTACK_GET_VERSION 0x04 - -// get system Bluetooth state -#define BTSTACK_GET_SYSTEM_BLUETOOTH_ENABLED 0x05 - -// set system Bluetooth state -#define BTSTACK_SET_SYSTEM_BLUETOOTH_ENABLED 0x06 - -// enable inquiry scan for this client -#define BTSTACK_SET_DISCOVERABLE 0x07 - -// set global Bluetooth state -#define BTSTACK_SET_BLUETOOTH_ENABLED 0x08 - -// create l2cap channel: param bd_addr(48), psm (16) -#define L2CAP_CREATE_CHANNEL 0x20 - -// disconnect l2cap disconnect, param channel(16), reason(8) -#define L2CAP_DISCONNECT 0x21 - -// register l2cap service: param psm(16), mtu (16) -#define L2CAP_REGISTER_SERVICE 0x22 - -// unregister l2cap disconnect, param psm(16) -#define L2CAP_UNREGISTER_SERVICE 0x23 - -// accept connection param bd_addr(48), dest cid (16) -#define L2CAP_ACCEPT_CONNECTION 0x24 - -// decline l2cap disconnect,param bd_addr(48), dest cid (16), reason(8) -#define L2CAP_DECLINE_CONNECTION 0x25 - -// create l2cap channel: param bd_addr(48), psm (16), mtu (16) -#define L2CAP_CREATE_CHANNEL_MTU 0x26 - -// register SDP Service Record: service record (size) -#define SDP_REGISTER_SERVICE_RECORD 0x30 - -// unregister SDP Service Record -#define SDP_UNREGISTER_SERVICE_RECORD 0x31 - -// Get remote RFCOMM services -#define SDP_CLIENT_QUERY_RFCOMM_SERVICES 0x32 - -// Get remote SDP services -#define SDP_CLIENT_QUERY_SERVICES 0x33 - -// RFCOMM "HCI" Commands -#define RFCOMM_CREATE_CHANNEL 0x40 -#define RFCOMM_DISCONNECT 0x41 -#define RFCOMM_REGISTER_SERVICE 0x42 -#define RFCOMM_UNREGISTER_SERVICE 0x43 -#define RFCOMM_ACCEPT_CONNECTION 0x44 -#define RFCOMM_DECLINE_CONNECTION 0x45 -#define RFCOMM_PERSISTENT_CHANNEL 0x46 -#define RFCOMM_CREATE_CHANNEL_WITH_CREDITS 0x47 -#define RFCOMM_REGISTER_SERVICE_WITH_CREDITS 0x48 -#define RFCOMM_GRANT_CREDITS 0x49 - -// GAP Classic 0x50 -#define GAP_DISCONNECT 0x50 - -// GAP LE 0x60 -#define GAP_LE_SCAN_START 0x60 -#define GAP_LE_SCAN_STOP 0x61 -#define GAP_LE_CONNECT 0x62 -#define GAP_LE_CONNECT_CANCEL 0x63 -#define GAP_LE_SET_SCAN_PARAMETERS 0x64 - -// GATT (Client) 0x70 -#define GATT_DISCOVER_ALL_PRIMARY_SERVICES 0x70 -#define GATT_DISCOVER_PRIMARY_SERVICES_BY_UUID16 0x71 -#define GATT_DISCOVER_PRIMARY_SERVICES_BY_UUID128 0x72 -#define GATT_FIND_INCLUDED_SERVICES_FOR_SERVICE 0x73 -#define GATT_DISCOVER_CHARACTERISTICS_FOR_SERVICE 0x74 -#define GATT_DISCOVER_CHARACTERISTICS_FOR_SERVICE_BY_UUID128 0x75 -#define GATT_DISCOVER_CHARACTERISTIC_DESCRIPTORS 0x76 -#define GATT_READ_VALUE_OF_CHARACTERISTIC 0x77 -#define GATT_READ_LONG_VALUE_OF_CHARACTERISTIC 0x78 -#define GATT_WRITE_VALUE_OF_CHARACTERISTIC_WITHOUT_RESPONSE 0x79 -#define GATT_WRITE_VALUE_OF_CHARACTERISTIC 0x7A -#define GATT_WRITE_LONG_VALUE_OF_CHARACTERISTIC 0x7B -#define GATT_RELIABLE_WRITE_LONG_VALUE_OF_CHARACTERISTIC 0x7C -#define GATT_READ_CHARACTERISTIC_DESCRIPTOR 0X7D -#define GATT_READ_LONG_CHARACTERISTIC_DESCRIPTOR 0X7E -#define GATT_WRITE_CHARACTERISTIC_DESCRIPTOR 0X7F -#define GATT_WRITE_LONG_CHARACTERISTIC_DESCRIPTOR 0X80 -#define GATT_WRITE_CLIENT_CHARACTERISTIC_CONFIGURATION 0X81 -#define GATT_GET_MTU 0x82 - -// hci con handles (12 bit): 0x0000..0x0fff -#define HCI_CON_HANDLE_INVALID 0xffff - -// EVENTS - - - -// data: event(8), len(8), nr hci connections -#define BTSTACK_EVENT_NR_CONNECTIONS_CHANGED 0x61 - -/** - * @format - */ -#define BTSTACK_EVENT_POWERON_FAILED 0x62 - -/** - * @format 1 - * @param discoverable - */ -#define BTSTACK_EVENT_DISCOVERABLE_ENABLED 0x66 - -// Daemon Events - -/** - * @format 112 - * @param major - * @param minor - @ @param revision - */ -#define DAEMON_EVENT_VERSION 0x63 - -// data: system bluetooth on/off (bool) -/** - * @format 1 - * param system_bluetooth_enabled - */ -#define DAEMON_EVENT_SYSTEM_BLUETOOTH_ENABLED 0x64 - -// data: event (8), len(8), status (8) == 0, address (48), name (1984 bits = 248 bytes) - -/* - * @format 1BT - * @param status == 0 to match read_remote_name_request - * @param address - * @param name - */ -#define DAEMON_EVENT_REMOTE_NAME_CACHED 0x65 - -// internal - data: event(8) -#define DAEMON_EVENT_CONNECTION_OPENED 0x67 - -// internal - data: event(8) -#define DAEMON_EVENT_CONNECTION_CLOSED 0x68 - -// data: event(8), len(8), local_cid(16), credits(8) -#define DAEMON_EVENT_L2CAP_CREDITS 0x74 - -/** - * @format 12 - * @param status - * @param psm - */ -#define DAEMON_EVENT_L2CAP_SERVICE_REGISTERED 0x75 - -/** - * @format 21 - * @param rfcomm_cid - * @param credits - */ -#define DAEMON_EVENT_RFCOMM_CREDITS 0x84 - -/** - * @format 11 - * @param status - * @param channel_id - */ -#define DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED 0x85 - -/** - * @format 11 - * @param status - * @param server_channel_id - */ -#define DAEMON_EVENT_RFCOMM_PERSISTENT_CHANNEL 0x86 - -/** - * @format 14 - * @param status - * @param service_record_handle - */ -#define DAEMON_EVENT_SDP_SERVICE_REGISTERED 0x90 - - - -// additional HCI events - -/** - * @brief Outgoing packet - */ -#define HCI_EVENT_TRANSPORT_PACKET_SENT 0x6E - -/** - * @format B - * @param handle - */ -#define HCI_EVENT_SCO_CAN_SEND_NOW 0x6F - - -// L2CAP EVENTS - -/** - * @format 1BH222222 - * @param status - * @param address - * @param handle - * @param psm - * @param local_cid - * @param remote_cid - * @param local_mtu - * @param remote_mtu - * @param flush_timeout - */ -#define L2CAP_EVENT_CHANNEL_OPENED 0x70 - -/* - * @format 2 - * @param local_cid - */ -#define L2CAP_EVENT_CHANNEL_CLOSED 0x71 - -/** - * @format BH222 - * @param address - * @param handle - * @param psm - * @param local_cid - * @param remote_cid - */ -#define L2CAP_EVENT_INCOMING_CONNECTION 0x72 - -// ?? -// data: event(8), len(8), handle(16) -#define L2CAP_EVENT_TIMEOUT_CHECK 0x73 - -/** - * @format H2222 - * @param handle - * @param interval_min - * @param interval_max - * @param latencey - * @param timeout_multiplier - */ -#define L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST 0x76 - -// data: event(8), len(8), handle(16), result (16) (0 == ok, 1 == fail) - /** - * @format H2 - * @param handle - * @result - */ -#define L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE 0x77 - -/** - * @format 2 - * @param local_cid - */ -#define L2CAP_EVENT_CAN_SEND_NOW 0x78 - -// RFCOMM EVENTS - -/** - * @format 1B2122 - * @param status - * @param bd_addr - * @param con_handle - * @param server_channel - * @param rfcomm_cid - * @param max_frame_size - */ -#define RFCOMM_EVENT_CHANNEL_OPENED 0x80 - -/** - * @format 2 - * @param rfcomm_cid - */ -#define RFCOMM_EVENT_CHANNEL_CLOSED 0x81 - -/** - * @format B12 - * @param bd_addr - * @param server_channel - * @param rfcomm_cid - */ -#define RFCOMM_EVENT_INCOMING_CONNECTION 0x82 - -/** - * @format 21 - * @param rfcomm_cid - * @param line_status - */ -#define RFCOMM_EVENT_REMOTE_LINE_STATUS 0x83 - -/** - * @format 21 - * @param rfcomm_cid - * @param modem_status - */ -#define RFCOMM_EVENT_REMOTE_MODEM_STATUS 0x87 - - /** - * TODO: format for variable data 2? - * param rfcomm_cid - * param rpn_data - */ -#define RFCOMM_EVENT_PORT_CONFIGURATION 0x88 - -/** - * @format 2 - * @param rfcomm_cid - */ -#define RFCOMM_EVENT_CAN_SEND_NOW 0x89 - - -/** - * @format 1 - * @param status - */ -#define SDP_EVENT_QUERY_COMPLETE 0x91 - -/** - * @format 1T - * @param rfcomm_channel - * @param name - */ -#define SDP_EVENT_QUERY_RFCOMM_SERVICE 0x92 - -/** - * @format 22221 - * @param record_id - * @param attribute_id - * @param attribute_length - * @param data_offset - * @param data - */ -#define SDP_EVENT_QUERY_ATTRIBUTE_BYTE 0x93 - -/** - * @format 22LV - * @param record_id - * @param attribute_id - * @param attribute_length - * @param attribute_value - */ -#define SDP_EVENT_QUERY_ATTRIBUTE_VALUE 0x94 - -/** - * @format 224 - * @param total_count - * @param record_index - * @param record_handle - * @note Not provided by daemon, only used for internal testing - */ -#define SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE 0x95 - -/** - * @format H1 - * @param handle - * @param status - */ -#define GATT_EVENT_QUERY_COMPLETE 0xA0 - -/** - * @format HX - * @param handle - * @param service - */ -#define GATT_EVENT_SERVICE_QUERY_RESULT 0xA1 - -/** - * @format HY - * @param handle - * @param characteristic - */ -#define GATT_EVENT_CHARACTERISTIC_QUERY_RESULT 0xA2 - -/** - * @format H2X - * @param handle - * @param include_handle - * @param service - */ -#define GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT 0xA3 - -/** - * @format HZ - * @param handle - * @param characteristic_descriptor - */ -#define GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT 0xA4 - -/** - * @format H2LV - * @param handle - * @param value_handle - * @param value_length - * @param value - */ -#define GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT 0xA5 - -/** - * @format H22LV - * @param handle - * @param value_handle - * @param value_offset - * @param value_length - * @param value - */ -#define GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT 0xA6 - -/** - * @format H2LV - * @param handle - * @param value_handle - * @param value_length - * @param value - */ -#define GATT_EVENT_NOTIFICATION 0xA7 - -/** - * @format H2LV - * @param handle - * @param value_handle - * @param value_length - * @param value - */ -#define GATT_EVENT_INDICATION 0xA8 - -/** - * @format H2LV - * @param descriptor_handle - * @param descriptor_length - * @param descriptor - */ -#define GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT 0xA9 - -/** - * @format H2LV - * @param handle - * @param descriptor_offset - * @param descriptor_length - * @param descriptor - */ -#define GATT_EVENT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT 0xAA - -/** - * @format H2 - * @param handle - * @param MTU - */ -#define GATT_EVENT_MTU 0xAB - -/** - * @format H2 - * @param handle - * @param MTU - */ -#define ATT_EVENT_MTU_EXCHANGE_COMPLETE 0xB5 - - /** - * @format 1H2 - * @param status - * @param conn_handle - * @param attribute_handle - */ -#define ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE 0xB6 - - -// TODO: daemon only event - -/** - * @format 12 - * @param status - * @param service_uuid - */ - #define BNEP_EVENT_SERVICE_REGISTERED 0xC0 - -/** - * @format 12222B - * @param status - * @param bnep_cid - * @param source_uuid - * @param destination_uuid - * @param mtu - * @param remote_address - */ - #define BNEP_EVENT_CHANNEL_OPENED 0xC1 - -/** - * @format 222B - * @param bnep_cid - * @param source_uuid - * @param destination_uuid - * @param remote_address - */ - #define BNEP_EVENT_CHANNEL_CLOSED 0xC2 - -/** - * @format 222B1 - * @param bnep_cid - * @param source_uuid - * @param destination_uuid - * @param remote_address - * @param channel_state - */ -#define BNEP_EVENT_CHANNEL_TIMEOUT 0xC3 - -/** - * @format 222B - * @param bnep_cid - * @param source_uuid - * @param destination_uuid - * @param remote_address - */ - #define BNEP_EVENT_CAN_SEND_NOW 0xC4 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_JUST_WORKS_REQUEST 0xD0 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_JUST_WORKS_CANCEL 0xD1 - - /** - * @format H1B4 - * @param handle - * @param addr_type - * @param address - * @param passkey - */ -#define SM_EVENT_PASSKEY_DISPLAY_NUMBER 0xD2 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_PASSKEY_DISPLAY_CANCEL 0xD3 - - /** - * @format H1B421 - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_PASSKEY_INPUT_NUMBER 0xD4 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_PASSKEY_INPUT_CANCEL 0xD5 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_IDENTITY_RESOLVING_STARTED 0xD6 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_IDENTITY_RESOLVING_FAILED 0xD7 - - /** - * @format H1B2 - * @param handle - * @param addr_type - * @param address - * @param le_device_db_index - */ -#define SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED 0xD8 - - /** - * @format H1B - * @param handle - * @param addr_type - * @param address - */ -#define SM_EVENT_AUTHORIZATION_REQUEST 0xD9 - - /** - * @format H1B1 - * @param handle - * @param addr_type - * @param address - * @param authorization_result - */ -#define SM_EVENT_AUTHORIZATION_RESULT 0xDA - - /** - * @format H1B1 - * @param handle - * @param new private resolvable/non-resolvable address - */ -#define SM_EVENT_PRIVATE_RANDOM_ADDR_UPDATE 0xDB - -// GAP - -/** - * @format H1 - * @param handle - * @param security_level - */ -#define GAP_EVENT_SECURITY_LEVEL 0xE0 - -/** - * @format 1B - * @param status - * @param address - */ -#define GAP_EVENT_DEDICATED_BONDING_COMPLETED 0xE1 - -/** - * @format 11B1JV - * @param advertising_event_type - * @param address_type - * @param address - * @param rssi - * @param data_length - * @param data - */ - -// Meta Events, see below for sub events -#define HCI_EVENT_HSP_META 0xE8 -#define HCI_EVENT_HFP_META 0xE9 -#define HCI_EVENT_ANCS_META 0xEA - -// Potential other meta groups - // #define HCI_EVENT_BNEP_META 0xxx -// #define HCI_EVENT_GAP_META 0xxx -// #define HCI_EVENT_GATT_META 0xxx -// #define HCI_EVENT_PAN_META 0xxx -// #define HCI_EVENT_SDP_META 0xxx -// #define HCI_EVENT_SM_META 0xxx - - -/** HSP Subevent */ - -/** - * @format 11 - * @param subevent_code - * @param status 0 == OK - */ -#define HSP_SUBEVENT_RFCOMM_CONNECTION_COMPLETE 0x01 - -/** - * @format 11 - * @param subevent_code - * @param status 0 == OK - */ -#define HSP_SUBEVENT_RFCOMM_DISCONNECTION_COMPLETE 0x02 - - -/** - * @format 11H - * @param subevent_code - * @param status 0 == OK - * @param handle - */ -#define HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE 0x03 - -/** - * @format 11 - * @param subevent_code - * @param status 0 == OK - */ -#define HSP_SUBEVENT_AUDIO_DISCONNECTION_COMPLETE 0x04 - -/** - * @format 1 - * @param subevent_code - */ -#define HSP_SUBEVENT_RING 0x05 - -/** - * @format 11 - * @param subevent_code - * @param gain Valid range: [0,15] - */ -#define HSP_SUBEVENT_MICROPHONE_GAIN_CHANGED 0x06 - -/** - * @format 11 - * @param subevent_code - * @param gain Valid range: [0,15] - */ -#define HSP_SUBEVENT_SPEAKER_GAIN_CHANGED 0x07 - -/** - * @format 1JV - * @param subevent_code - * @param value_length - * @param value - */ -#define HSP_SUBEVENT_HS_COMMAND 0x08 - -/** - * @format 1JV - * @param subevent_code - * @param value_length - * @param value - */ -#define HSP_SUBEVENT_AG_INDICATION 0x09 - - -/** HFP Subevent */ - -/** - * @format 11H - * @param subevent_code - * @param status 0 == OK - * @param con_handle - */ -#define HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_ESTABLISHED 0x01 - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_RELEASED 0x02 - -/** - * @format 11H - * @param subevent_code - * @param status 0 == OK - * @param handle - */ -#define HFP_SUBEVENT_AUDIO_CONNECTION_ESTABLISHED 0x03 - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_AUDIO_CONNECTION_RELEASED 0x04 - -/** - * @format 11 - * @param subevent_code - * @param status 0 == OK - */ -#define HFP_SUBEVENT_COMPLETE 0x05 - -/** - * @format 111T - * @param subevent_code - * @param indicator_index - * @param indicator_status - * @param indicator_name - */ -#define HFP_SUBEVENT_AG_INDICATOR_STATUS_CHANGED 0x06 - -/** - * @format 1111T - * @param subevent_code - * @param network_operator_mode - * @param network_operator_format - * @param network_operator_name - */ -#define HFP_SUBEVENT_NETWORK_OPERATOR_CHANGED 0x07 - -/** - * @format 11 - * @param subevent_code - * @param error - */ -#define HFP_SUBEVENT_EXTENDED_AUDIO_GATEWAY_ERROR 0x08 - -/** - * @format 11 - * @param subevent_code - * @param status - */ -#define HFP_SUBEVENT_CODECS_CONNECTION_COMPLETE 0x09 - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_START_RINGINIG 0x0A - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_STOP_RINGINIG 0x0B - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_CALL_TERMINATED 0x0C - -/** - * @format 1T - * @param subevent_code - * @param number - */ -#define HFP_SUBEVENT_PLACE_CALL_WITH_NUMBER 0x0D - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG 0x0E - -/** - * @format 1T - * @param subevent_code - * @param number - */ -#define HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG 0x0F - -/** - * @format 1T - * @param subevent_code - * @param dtmf code - */ -#define HFP_SUBEVENT_TRANSMIT_DTMF_CODES 0x10 - -/** - * @format 1 - * @param subevent_code - */ - #define HFP_SUBEVENT_CALL_ANSWERED 0x11 - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_CONFERENCE_CALL 0x12 - -/** - * @format 1 - * @param subevent_code - */ -#define HFP_SUBEVENT_RING 0x13 - -/** - * @format 111 - * @param subevent_code - * @param status - * @param gain - */ - #define HFP_SUBEVENT_SPEAKER_VOLUME 0x14 - -/** - * @format 111 - * @param subevent_code - * @param status - * @param gain - */ -#define HFP_SUBEVENT_MICROPHONE_VOLUME 0x15 - -/** - * @format 11T - * @param subevent_code - * @param type - * @param number - */ -#define HFP_SUBEVENT_CALL_WAITING_NOTIFICATION 0x16 - -/** - * @format 11T - * @param subevent_code - * @param type - * @param number - */ -#define HFP_SUBEVENT_CALLING_LINE_INDETIFICATION_NOTIFICATION 0x17 - -/** - * @format 111111T - * @param subevent_code - * @param clcc_idx - * @param clcc_dir - * @param clcc_status - * @param clcc_mpty - * @param bnip_type - * @param bnip_number - */ -#define HFP_SUBEVENT_ENHANCED_CALL_STATUS 0x18 - -/** - * @format 111T - * @param subevent_code - * @param status - * @param bnip_type - * @param bnip_number - */ - #define HFP_SUBEVENT_SUBSCRIBER_NUMBER_INFORMATION 0x19 - -/** - * @format 1T - * @param subevent_code - * @param value - */ -#define HFP_SUBEVENT_RESPONSE_AND_HOLD_STATUS 0x1A - -// ANCS Client - -/** - * @format 1H - * @param subevent_code - * @param handle - */ -#define ANCS_SUBEVENT_CLIENT_CONNECTED 0xF0 - -/** - * @format 1H2T - * @param subevent_code - * @param handle - * @param attribute_id - * @param text - */ -#define ANCS_SUBEVENT_CLIENT_NOTIFICATION 0xF1 - -/** - * @format 1H - * @param subevent_code - * @param handle - */ -#define ANCS_SUBEVENT_CLIENT_DISCONNECTED 0xF2 - -#endif diff --git a/bundles/mesh/inc/btstack_event.h b/bundles/mesh/inc/btstack_event.h deleted file mode 100644 index 515f75390..000000000 --- a/bundles/mesh/inc/btstack_event.h +++ /dev/null @@ -1,991 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef __BTSTACK_EVENT_H -#define __BTSTACK_EVENT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "bluetooth.h" -#include "compiler.h" -#include "btstack_util.h" -#include "gap.h" - -/* API_START */ - -#ifdef C2NIM -#define decode_event_offset(packet, T, offset) ((const T *)((const int32_t)(packet) + offset)) -#else -#define decode_event_offset(packet, T, offset) ((const T *)((int32_t)(packet) + offset)) -#endif - -/** - * @brief Get event type - * @param event - * @return type of event - */ -static __INLINE uint8_t hci_event_packet_get_type(const uint8_t * event){ - - return *event; -} - -/** - * User messge - */ -typedef struct btstack_user_msg -{ - uint32_t msg_id; - void *data; - uint16_t len; -} btstack_user_msg_t; - -/** - * @brief Get user message - * @param event - * @return type of event - */ -static __INLINE const btstack_user_msg_t *hci_event_packet_get_user_msg(const uint8_t * event){ - - return decode_event_offset(event, btstack_user_msg_t, 4); -} - -/** - * @brief post a msg to btstack task, and handle it in the context of btstack task - * @param msg_id (Max allowed ID: 0x80000000) - * @param data - * @param len - * @return 0 if success; else error occured - */ -uint32_t btstack_push_user_msg(uint32_t msg_id, const void *data, const uint16_t len); - -/*** - * @brief Get subevent code for le event - * @param event packet - * @return subevent_code - */ -static __INLINE uint8_t hci_event_le_meta_get_subevent_code(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} - -#pragma pack(push, 1) - -typedef struct -{ - uint8_t status; - uint16_t conn_handle; - uint8_t enabled; -} hci_encryption_change_event_t; - -/** - * @brief Get field status from event HCI_EVENT_ENCRYPTION_CHANGE - * @param event packet - * @return status - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_encryption_change_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} -/** - * @brief Get field connection_handle from event HCI_EVENT_ENCRYPTION_CHANGE - * @param event packet - * @return connection_handle - * @note: btstack_type 2 - */ -static __INLINE uint16_t hci_event_encryption_change_get_connection_handle(const uint8_t * event){ - return little_endian_read_16(event, 3); -} -/** - * @brief Get field encryption_enabled from event HCI_EVENT_ENCRYPTION_CHANGE - * @param event packet - * @return encryption_enabled - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_encryption_change_get_encryption_enabled(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 5); -} - - -/** - * @brief Get field num_hci_command_packets from event HCI_EVENT_COMMAND_COMPLETE - * @param event packet - * @return num_hci_command_packets - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_command_complete_get_num_hci_command_packets(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} -/** - * @brief Get field command_opcode from event HCI_EVENT_COMMAND_COMPLETE - * @param event packet - * @return command_opcode - * @note: btstack_type 2 - */ -static __INLINE uint16_t hci_event_command_complete_get_command_opcode(const uint8_t * event){ - return little_endian_read_16(event, 3); -} -/** - * @brief Get field return_parameters from event HCI_EVENT_COMMAND_COMPLETE - * @param event packet - * @return return_parameters - * @note: btstack_type R - */ -static __INLINE const uint8_t * hci_event_command_complete_get_return_parameters(const uint8_t * event){ - return decode_event_offset(event, uint8_t, 5); -} - -/** - * @brief Get field status from event HCI_EVENT_COMMAND_STATUS - * @param event packet - * @return status - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_command_status_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} -/** - * @brief Get field num_hci_command_packets from event HCI_EVENT_COMMAND_STATUS - * @param event packet - * @return num_hci_command_packets - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_command_status_get_num_hci_command_packets(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 3); -} -/** - * @brief Get field command_opcode from event HCI_EVENT_COMMAND_STATUS - * @param event packet - * @return command_opcode - * @note: btstack_type 2 - */ -static __INLINE uint16_t hci_event_command_status_get_command_opcode(const uint8_t * event){ - return little_endian_read_16(event, 4); -} - -/** - * @brief Get field hardware_code from event HCI_EVENT_HARDWARE_ERROR - * @param event packet - * @return hardware_code - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_hardware_error_get_hardware_code(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} - -/** - * @brief Get field status from event HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE - * @param event packet - * @return status - * @note: btstack_type 1 - */ -static __INLINE uint8_t hci_event_encryption_key_refresh_complete_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} -/** - * @brief Get field handle from event HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t hci_event_encryption_key_refresh_complete_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 3); -} - -/** - * @brief Get field state from event BTSTACK_EVENT_STATE - * @param event packet - * @return state - * @note: btstack_type 1 - */ -static __INLINE uint8_t btstack_event_state_get_state(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} - - -/** - * @brief Get field discoverable from event BTSTACK_EVENT_DISCOVERABLE_ENABLED - * @param event packet - * @return discoverable - * @note: btstack_type 1 - */ -static __INLINE uint8_t btstack_event_discoverable_enabled_get_discoverable(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} - -/** - * @brief Get field handle from event L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t l2cap_event_connection_parameter_update_request_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field interval_min from event L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST - * @param event packet - * @return interval_min - * @note: btstack_type 2 - */ -static __INLINE uint16_t l2cap_event_connection_parameter_update_request_get_interval_min(const uint8_t * event){ - return little_endian_read_16(event, 4); -} -/** - * @brief Get field interval_max from event L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST - * @param event packet - * @return interval_max - * @note: btstack_type 2 - */ -static __INLINE uint16_t l2cap_event_connection_parameter_update_request_get_interval_max(const uint8_t * event){ - return little_endian_read_16(event, 6); -} -/** - * @brief Get field latencey from event L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST - * @param event packet - * @return latencey - * @note: btstack_type 2 - */ -static __INLINE uint16_t l2cap_event_connection_parameter_update_request_get_latencey(const uint8_t * event){ - return little_endian_read_16(event, 8); -} -/** - * @brief Get field timeout_multiplier from event L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST - * @param event packet - * @return timeout_multiplier - * @note: btstack_type 2 - */ -static __INLINE uint16_t l2cap_event_connection_parameter_update_request_get_timeout_multiplier(const uint8_t * event){ - return little_endian_read_16(event, 10); -} - -/** - * @brief Get field handle from event L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t l2cap_event_connection_parameter_update_response_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} - -/** - * @brief Get field local_cid from event L2CAP_EVENT_CAN_SEND_NOW - * @param event packet - * @return local_cid - * @note: btstack_type 2 - */ -static __INLINE uint16_t l2cap_event_can_send_now_get_local_cid(const uint8_t * event){ - return little_endian_read_16(event, 2); -} - -/** - * @brief Get field handle from event ATT_EVENT_MTU_EXCHANGE_COMPLETE - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t att_event_mtu_exchange_complete_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} - -/** - * @brief Get field MTU from event ATT_EVENT_MTU_EXCHANGE_COMPLETE - * @param event packet - * @return MTU - * @note: btstack_type 2 - */ -static __INLINE uint16_t att_event_mtu_exchange_complete_get_MTU(const uint8_t * event){ - return little_endian_read_16(event, 4); -} - -/** - * @brief Get field status from event ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE - * @param event packet - * @return status - * @note: btstack_type 1 - */ -static __INLINE uint8_t att_event_handle_value_indication_complete_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} -/** - * @brief Get field conn_handle from event ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE - * @param event packet - * @return conn_handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t att_event_handle_value_indication_complete_get_conn_handle(const uint8_t * event){ - return little_endian_read_16(event, 3); -} -/** - * @brief Get field attribute_handle from event ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE - * @param event packet - * @return attribute_handle - * @note: btstack_type 2 - */ -static __INLINE uint16_t att_event_handle_value_indication_complete_get_attribute_handle(const uint8_t * event){ - return little_endian_read_16(event, 5); -} - -/** - * @brief Get field handle from event SM_EVENT_JUST_WORKS_REQUEST - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_just_works_request_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_JUST_WORKS_REQUEST - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_just_works_request_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_JUST_WORKS_REQUEST - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_just_works_request_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_JUST_WORKS_CANCEL - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_just_works_cancel_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_JUST_WORKS_CANCEL - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_just_works_cancel_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_JUST_WORKS_CANCEL - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_just_works_cancel_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_PASSKEY_DISPLAY_NUMBER - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_passkey_display_number_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_PASSKEY_DISPLAY_NUMBER - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_passkey_display_number_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_PASSKEY_DISPLAY_NUMBER - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_passkey_display_number_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} -/** - * @brief Get field passkey from event SM_EVENT_PASSKEY_DISPLAY_NUMBER - * @param event packet - * @return passkey - * @note: btstack_type 4 - */ -static __INLINE uint32_t sm_event_passkey_display_number_get_passkey(const uint8_t * event){ - return little_endian_read_32(event, 11); -} - -/** - * @brief Get field handle from event SM_EVENT_PASSKEY_DISPLAY_CANCEL - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_passkey_display_cancel_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_PASSKEY_DISPLAY_CANCEL - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_passkey_display_cancel_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_PASSKEY_DISPLAY_CANCEL - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_passkey_display_cancel_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_PASSKEY_INPUT_NUMBER - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_passkey_input_number_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_PASSKEY_INPUT_NUMBER - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_passkey_input_number_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_PASSKEY_INPUT_NUMBER - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_passkey_input_number_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_PASSKEY_INPUT_CANCEL - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_passkey_input_cancel_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_PASSKEY_INPUT_CANCEL - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_passkey_input_cancel_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_PASSKEY_INPUT_CANCEL - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_passkey_input_cancel_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_IDENTITY_RESOLVING_STARTED - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_identity_resolving_started_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_IDENTITY_RESOLVING_STARTED - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_identity_resolving_started_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_IDENTITY_RESOLVING_STARTED - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_identity_resolving_started_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_IDENTITY_RESOLVING_FAILED - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_identity_resolving_failed_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_IDENTITY_RESOLVING_FAILED - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_identity_resolving_failed_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_IDENTITY_RESOLVING_FAILED - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_identity_resolving_failed_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_identity_resolving_succeeded_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_identity_resolving_succeeded_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_identity_resolving_succeeded_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} -/** - * @brief Get field le_device_db_index from event SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED - * @param event packet - * @return le_device_db_index - * @note: btstack_type 2 - */ -static __INLINE uint16_t sm_event_identity_resolving_succeeded_get_le_device_db_index(const uint8_t * event){ - return little_endian_read_16(event, 11); -} - -/** - * @brief Get field handle from event SM_EVENT_AUTHORIZATION_REQUEST - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_authorization_request_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_AUTHORIZATION_REQUEST - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_authorization_request_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_AUTHORIZATION_REQUEST - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_authorization_request_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} - -/** - * @brief Get field handle from event SM_EVENT_AUTHORIZATION_RESULT - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t sm_event_authorization_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field addr_type from event SM_EVENT_AUTHORIZATION_RESULT - * @param event packet - * @return addr_type - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_authorization_result_get_addr_type(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} -/** - * @brief Get field address from event SM_EVENT_AUTHORIZATION_RESULT - * @param event packet - * @param Pointer to storage for address - * @note: btstack_type B - */ -static __INLINE void sm_event_authorization_result_get_address(const uint8_t * event, uint8_t * address){ - reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); -} -/** - * @brief Get field authorization_result from event SM_EVENT_AUTHORIZATION_RESULT - * @param event packet - * @return authorization_result - * @note: btstack_type 1 - */ -static __INLINE uint8_t sm_event_authorization_result_get_authorization_result(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 11); -} - -/** - * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gap_event_security_level_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field security_level from event GAP_EVENT_SECURITY_LEVEL - * @param event packet - * @return security_level - * @note: btstack_type 1 - */ -static __INLINE uint8_t gap_event_security_level_get_security_level(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} - -/** - * @brief Get field status from event GAP_EVENT_DEDICATED_BONDING_COMPLETED - * @param event packet - * @return status - * @note: btstack_type 1 - */ -static __INLINE uint8_t gap_event_dedicated_bonding_completed_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 2); -} - -typedef struct event_disconn_complete -{ - uint8_t status; - uint16_t conn_handle; - uint8_t reason; -} event_disconn_complete_t; - -typedef struct -{ - uint8_t status; // for DEC, 0 means OK, 1 means ERROR - uint8_t type; // 0: encrypt 1: decrypt - uint8_t mic_size; - uint16_t msg_len; - uint16_t aad_len; - uint32_t tag; // same value as in command - uint8_t *out_msg; -} event_vendor_ccm_complete_t; - -typedef struct le_meta_event_create_conn_complete -{ - //Status of received command - uint8_t status; - //Connection handle - uint16_t handle; - //Device role - 0=Master/ 1=Slave - uint8_t role; - //Peer address type - 0=public/1=random - bd_addr_type_t peer_addr_type; - //Peer address - bd_addr_t peer_addr; - //Connection interval - uint16_t interval; - //Connection latency - uint16_t latency; - //Link supervision timeout - uint16_t sup_timeout; - //Master clock accuracy - uint8_t clk_accuracy; -} le_meta_event_create_conn_complete_t; - -// LE Connection Update Complete Event -typedef struct le_meta_event_conn_update_complete -{ - uint8_t status; - uint16_t handle; - uint16_t interval; - uint16_t latency; - uint16_t sup_timeout; -} le_meta_event_conn_update_complete_t; - -// LE Read Remote Features Complete Event -typedef struct le_meta_event_read_remote_feature_complete -{ - uint8_t status; - uint16_t handle; - uint8_t features[8]; -} le_meta_event_read_remote_feature_complete_t; - -// LE Long Term Key Request Event -typedef struct le_meta_event_long_term_key_request -{ - uint16_t handle; - uint8_t random_number[8]; - uint8_t encryption_div[2]; -} le_meta_event_long_term_key_request_t; - -// LE Remote Connection Parameter Request Event -typedef struct le_meta_event_remote_conn_param_request -{ - uint16_t handle; - uint16_t interval_min; - uint16_t interval_max; - uint16_t latency; - uint16_t timeout; -} le_meta_event_remote_conn_param_request_t; - -// LE Data Length Change Event -typedef struct le_meta_event_data_length_changed -{ - uint16_t handle; - uint16_t max_tx_octets; - uint16_t mx_tx_time; - uint16_t max_rx_octets; - uint16_t mx_rx_time; -} le_meta_event_data_length_changed_t; - -typedef struct le_directed_adv_report -{ - uint16_t evt_type; - bd_addr_type_t addr_type; - bd_addr_t address; - bd_addr_type_t direct_addr_type; - bd_addr_t direct_addr; - int8_t rssi; -} le_directed_adv_report_t; - -// LE Directed Advertising Report Event -typedef struct le_meta_directed_adv_report -{ - uint8_t num_of_reports; - le_directed_adv_report_t reports[1]; -} le_meta_directed_adv_report_t; - -// LE PHY Update Complete Event -typedef struct le_meta_phy_update_complete -{ - uint8_t status; - uint16_t handle; - phy_type_t tx_phy; - phy_type_t rx_phy; -} le_meta_phy_update_complete_t; - -// evt_type -#define HCI_EXT_ADV_PROP_CONNECTABLE (1 << 0) -#define HCI_EXT_ADV_PROP_SCANNABLE (1 << 1) -#define HCI_EXT_ADV_PROP_DIRECTED (1 << 2) -#define HCI_EXT_ADV_PROP_SCAN_RSP (1 << 3) -#define HCI_EXT_ADV_PROP_USE_LEGACY (1 << 4) -#define HCI_EXT_ADV_DATA_CML (0 << 5) -#define HCI_EXT_ADV_DATA_HAS_MORE (1 << 5) -#define HCI_EXT_ADV_DATA_TRUNCED (2 << 5) -#define HCI_EXT_ADV_DATA_MASK (3 << 5) - -typedef struct le_ext_adv_report -{ - uint16_t evt_type; - bd_addr_type_t addr_type; - bd_addr_t address; - uint8_t p_phy; // primary phy - uint8_t s_phy; // secondary phy - uint8_t sid; - int8_t tx_power; - int8_t rssi; - uint16_t prd_adv_interval; - bd_addr_type_t direct_addr_type; - bd_addr_t direct_addr; - uint8_t data_len; - uint8_t data[0]; -} le_ext_adv_report_t; - -// LE Extended Advertising Report Event -typedef struct le_meta_event_ext_adv_report -{ - uint8_t num_of_reports; // this is always 1 - le_ext_adv_report_t reports[1]; -} le_meta_event_ext_adv_report_t; - -// LE Periodic Advertising Sync Established Event -typedef struct le_meta_event_periodic_adv_sync_established -{ - uint8_t status; - uint16_t handle; - uint8_t sid; - bd_addr_type_t addr_type; - bd_addr_t address; - phy_type_t phy; - uint16_t interval; - uint8_t clk_accuracy; -} le_meta_event_periodic_adv_sync_established_t; - -#define HCI_PRD_ADV_DATA_STATUS_CML (0) -#define HCI_PRD_ADV_DATA_STATUS_HAS_MORE (1) -#define HCI_PRD_ADV_DATA_STATUS_TRUNCED (2) - -// LE Periodic Advertising Report Event -typedef struct le_meta_event_periodic_adv_report -{ - uint16_t handle; - int8_t tx_power; - int8_t rssi; - uint8_t unused; - uint8_t data_status; - uint8_t data_length; - uint8_t data[0]; -} le_meta_event_periodic_adv_report_t; - -// LE Periodic Advertising Sync Lost Event -typedef struct le_meta_event_periodic_adv_sync_lost -{ - uint16_t handle; -} le_meta_event_periodic_adv_sync_lost_t; - -// LE Scan Timeout Event -// {} - -// LE Advertising Set Terminated Event -typedef struct le_meta_adv_set_terminated -{ - uint8_t status; - uint8_t adv_handle; - uint16_t conn_handle; - uint8_t num_events; // Num_Completed_Extended_Advertising_Events -} le_meta_adv_set_terminated_t; - -// LE Scan Request Received Event -typedef struct le_meta_scan_req_received -{ - uint8_t adv_handle; - bd_addr_type_t scanner_addr_type; - bd_addr_t scanner_addr; -} le_meta_scan_req_received_t; - -typedef enum ble_ch_sel_algo -{ - BLE_ALGO_1, - BLE_ALGO_2, - BLE_ALGO_NUMBER -} ble_ch_sel_algo_t; - -// LE Channel Selection Algorithm Event -typedef struct le_meta_ch_sel_algo -{ - uint16_t conn_handle; - ble_ch_sel_algo_t algo; -} le_meta_ch_sel_algo; - -typedef struct le_iq_sample -{ - int8_t i; - int8_t q; -} le_iq_sample_t; - -typedef struct le_meta_connless_iq_report -{ - uint16_t sync_handle; - uint8_t channel_index; - int16_t rssi; - uint8_t rssi_ant_id; - uint8_t cte_type; - uint8_t slot_durations; - uint8_t packet_status; - uint16_t event_counter; - uint8_t sample_count; - le_iq_sample_t samples[0]; -} le_meta_connless_iq_report_t; - -typedef struct le_meta_conn_iq_report -{ - uint16_t conn_handle; - phy_type_t rx_phy; - uint8_t channel_index; - int16_t rssi; - uint8_t rssi_ant_id; - uint8_t cte_type; - uint8_t slot_durations; - uint8_t packet_status; - uint16_t event_counter; - uint8_t sample_count; - le_iq_sample_t samples[0]; -} le_meta_conn_iq_report_t; - -typedef struct le_meta_cte_req_failed -{ - uint8_t status; - uint16_t conn_handle; -} le_meta_cte_req_failed_t; - -typedef struct le_meta_prd_adv_sync_transfer_recv -{ - uint8_t status; - uint16_t conn_handle; - uint16_t service_data; - uint16_t sync_handle; - uint8_t adv_sid; - bd_addr_type_t addr_type; - bd_addr_t addr; - phy_type_t phy; - uint16_t prdAdvInterval; - uint8_t clkAcc; -} le_meta_prd_adv_sync_transfer_recv_t; - -#pragma pack (pop) - -// packet is from host callbacks -#define decode_hci_le_meta_event(packet, T) decode_event_offset(packet, T, 3) - -#define decode_hci_event_disconn_complete(packet) decode_event_offset(packet, event_disconn_complete_t, 2) -#define decode_hci_event_vendor_ccm_complete(packet) decode_event_offset(packet, event_vendor_ccm_complete_t, 5) - -#define decode_hci_event(packet, T) decode_event_offset(packet, T, 2) - -/* API_END */ - -#ifdef __cplusplus -} -#endif - -#endif // __BTSTACK_EVENT_H diff --git a/bundles/mesh/inc/btstack_linked_list.h b/bundles/mesh/inc/btstack_linked_list.h deleted file mode 100644 index cc8e6c278..000000000 --- a/bundles/mesh/inc/btstack_linked_list.h +++ /dev/null @@ -1,36 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef __BTSTACK_LINKED_LIST_H -#define __BTSTACK_LINKED_LIST_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct btstack_linked_item { - struct btstack_linked_item *next; // <-- next element in list, or NULL -} btstack_linked_item_t; - -typedef btstack_linked_item_t * btstack_linked_list_t; - -typedef struct { - int advance_on_next; - btstack_linked_item_t * prev; // points to the item before the current one - btstack_linked_item_t * curr; // points to the current item (to detect item removal) -} btstack_linked_list_iterator_t; - -#ifdef __cplusplus -} -#endif - -#endif // __BTSTACK_LINKED_LIST_H diff --git a/bundles/mesh/inc/btstack_util.h b/bundles/mesh/inc/btstack_util.h deleted file mode 100644 index ccd78430e..000000000 --- a/bundles/mesh/inc/btstack_util.h +++ /dev/null @@ -1,160 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef __BTSTACK_UTIL_H -#define __BTSTACK_UTIL_H - -#include - -#include "bluetooth.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef C2NIM -#define read_little_endian_t(T, buffer, position) (*(const T *)((const uint32_t)(buffer) + (position))) -#define little_endian_store_t(T, buffer, position, v) (*(T *)((const uint32_t)(buffer) + (position)) = (v)) -#else -#define read_little_endian_t(T, buffer, position) (*(const T *)((uint32_t)(buffer) + (position))) -#define little_endian_store_t(T, buffer, position, v) (*(T *)((uint32_t)(buffer) + (position)) = (v)) -#endif - -//basic utility: -#define little_endian_read_16(buffer, position) read_little_endian_t(uint16_t, buffer, position) -#define little_endian_read_24(buffer, position) (little_endian_read_32(buffer, position) & 0xffffffu) -#define little_endian_read_32(buffer, position) read_little_endian_t(uint32_t, buffer, position) - -#define little_endian_store_16(buffer, position, value) little_endian_store_t(uint16_t, buffer, position, value) -#define little_endian_store_32(buffer, position, value) little_endian_store_t(uint32_t, buffer, position, value) - -/** - * @brief Read 16/24/32 bit big endian value from buffer - * @param buffer - * @param position in buffer - * @return value - */ -uint32_t big_endian_read_16( const uint8_t * buffer, int pos); -uint32_t big_endian_read_32( const uint8_t * buffer, int pos); - -/** - * @brief Write 16/32 bit big endian value into buffer - * @param buffer - * @param position in buffer - * @param value - */ -void big_endian_store_16(uint8_t *buffer, uint16_t pos, uint16_t value); -void big_endian_store_32(uint8_t *buffer, uint16_t pos, uint32_t value); - -/** - * @brief Copy from source to destination and reverse byte order - * @param src - * @param dest - * @param len - */ -void reverse_bytes (const uint8_t *src, uint8_t * dest, int len); - -/** - * @brief Wrapper around reverse_bytes for common buffer sizes - * @param src - * @param dest - */ -void reverse_24 (const uint8_t *src, uint8_t * dest); -void reverse_48 (const uint8_t *src, uint8_t * dest); -void reverse_56 (const uint8_t *src, uint8_t * dest); -void reverse_64 (const uint8_t *src, uint8_t * dest); -void reverse_128(const uint8_t *src, uint8_t * dest); - -void reverse_bd_addr(const uint8_t *src, uint8_t * dest); - -// will be moved to daemon/btstack_device_name_db.h - -/** - * @brief The device name type - */ -#define DEVICE_NAME_LEN 248 -typedef uint8_t device_name_t[DEVICE_NAME_LEN+1]; - -/** - * @brief ASCII character for 4-bit nibble - * @return character - */ -char char_for_nibble(int nibble); - -/** - * @brif 4-bit nibble from ASCII character - * @return value - */ -int nibble_for_char(char c); - -/** - * @brief Compare two Bluetooth addresses - * @param a - * @param b - * @return true if equal - */ -int bd_addr_cmp(bd_addr_t a, bd_addr_t b); - -/** - * @brief Copy Bluetooth address - * @param dest - * @param src - */ -void bd_addr_copy(bd_addr_t dest, const bd_addr_t src); - -/** - * @brief Use printf to write hexdump as single line of data - */ -void printf_hexdump(const void *data, int size); - -/** - * @brief Create human readable representation for UUID128 - * @note uses fixed global buffer - * @return pointer to UUID128 string - */ -char * uuid128_to_str(const uint8_t * uuid); - -/** - * @brief Create human readable represenationt of Bluetooth address - * @note uses fixed global buffer - * @return pointer to Bluetooth address string - */ -char * bd_addr_to_str(const bd_addr_t addr); - -/** - * @brief Parse Bluetooth address - * @param address_string - * @param buffer for parsed address - * @return 1 if string was parsed successfully - */ -int sscanf_bd_addr(const char * addr_string, bd_addr_t addr); - -/** - * @brief Constructs UUID128 from 16 or 32 bit UUID using Bluetooth base UUID - * @param uuid128 output buffer - * @param short_uuid - */ -void uuid_add_bluetooth_prefix(uint8_t * uuid128, uint32_t short_uuid); - -/** - * @brief Checks if UUID128 has Bluetooth base UUID prefix - * @param uui128 to test - * @return 1 if it can be expressed as UUID32 - */ -int uuid_has_bluetooth_prefix(uint8_t * uuid128); - -#ifdef __cplusplus -} -#endif - -#endif // __BTSTACK_UTIL_H diff --git a/bundles/mesh/inc/cfg_cli.h b/bundles/mesh/inc/cfg_cli.h deleted file mode 100644 index b6fe17b71..000000000 --- a/bundles/mesh/inc/cfg_cli.h +++ /dev/null @@ -1,198 +0,0 @@ -/** @file - * @brief Bluetooth Mesh Configuration Client Model APIs. - */ - -/* - * Copyright (c) 2017 Intel Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef __BT_MESH_CFG_CLI_H -#define __BT_MESH_CFG_CLI_H - -/** - * @brief Bluetooth Mesh - * @defgroup bt_mesh_cfg_cli Bluetooth Mesh Configuration Client Model - * @ingroup bt_mesh - * @{ - */ - -/** Mesh Configuration Client Model Context */ -struct bt_mesh_cfg_cli { - struct bt_mesh_model *model; - - struct k_sem op_sync; - u32_t op_pending; - void *op_param; -}; - -typedef struct node_basic_info -{ - uint16_t netkey_ID; - uint16_t app_id; - uint8_t netkey[16]; - uint8_t devkey[16]; - uint8_t beaconkey[16]; - uint8_t appkey[16]; - uint16_t unitcast_addr; -}node_basic_info; - -extern const struct bt_mesh_model_op bt_mesh_cfg_cli_op[]; - -#define BT_MESH_MODEL_CFG_CLI(cli_data) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_CFG_CLI, \ - bt_mesh_cfg_cli_op, NULL, cli_data) - -int bt_mesh_cfg_comp_data_get(u16_t net_idx, u16_t addr, u8_t page, - u8_t *status, struct os_mbuf *comp); - -int bt_mesh_cfg_beacon_get(u16_t net_idx, u16_t addr, u8_t *status); - -int bt_mesh_cfg_beacon_set(u16_t net_idx, u16_t addr, u8_t val, u8_t *status); - -int bt_mesh_cfg_ttl_get(u16_t net_idx, u16_t addr, u8_t *ttl); - -int bt_mesh_cfg_ttl_set(u16_t net_idx, u16_t addr, u8_t val, u8_t *ttl); - -int bt_mesh_cfg_friend_get(u16_t net_idx, u16_t addr, u8_t *status); - -int bt_mesh_cfg_friend_set(u16_t net_idx, u16_t addr, u8_t val, u8_t *status); - -int bt_mesh_cfg_gatt_proxy_get(u16_t net_idx, u16_t addr, u8_t *status); - -int bt_mesh_cfg_gatt_proxy_set(u16_t net_idx, u16_t addr, u8_t val, - u8_t *status); - -int bt_mesh_cfg_relay_get(u16_t net_idx, u16_t addr, u8_t *status, - u8_t *transmit); - -int bt_mesh_cfg_relay_set(u16_t net_idx, u16_t addr, u8_t new_relay, - u8_t new_transmit, u8_t *status, u8_t *transmit); - -int bt_mesh_cfg_net_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx, - const u8_t net_key[16], u8_t *status); - -int bt_mesh_cfg_app_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx, - u16_t key_app_idx, const u8_t app_key[16], - u8_t *status); - -int bt_mesh_cfg_mod_app_bind(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t mod_app_idx, u16_t mod_id, u8_t *status); - -int bt_mesh_cfg_mod_app_bind_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t mod_app_idx, u16_t mod_id, u16_t cid, - u8_t *status); - -struct bt_mesh_cfg_mod_pub { - u16_t addr; - u16_t app_idx; - bool cred_flag; - u8_t ttl; - u8_t period; - u8_t transmit; -}; - -int bt_mesh_cfg_mod_pub_get(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t mod_id, struct bt_mesh_cfg_mod_pub *pub, - u8_t *status); - -int bt_mesh_cfg_mod_pub_get_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t mod_id, u16_t cid, - struct bt_mesh_cfg_mod_pub *pub, u8_t *status); - -int bt_mesh_cfg_mod_pub_set(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t mod_id, struct bt_mesh_cfg_mod_pub *pub, - u8_t *status); - -int bt_mesh_cfg_mod_pub_set_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t mod_id, u16_t cid, - struct bt_mesh_cfg_mod_pub *pub, u8_t *status); - -int bt_mesh_cfg_mod_sub_add(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t sub_addr, u16_t mod_id, u8_t *status); - -int bt_mesh_cfg_mod_sub_add_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t sub_addr, u16_t mod_id, u16_t cid, - u8_t *status); - -int bt_mesh_cfg_mod_sub_del(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t sub_addr, u16_t mod_id, u8_t *status); - -int bt_mesh_cfg_mod_sub_del_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t sub_addr, u16_t mod_id, u16_t cid, - u8_t *status); - -int bt_mesh_cfg_mod_sub_overwrite(u16_t net_idx, u16_t addr, u16_t elem_addr, - u16_t sub_addr, u16_t mod_id, u8_t *status); - -int bt_mesh_cfg_mod_sub_overwrite_vnd(u16_t net_idx, u16_t addr, - u16_t elem_addr, u16_t sub_addr, - u16_t mod_id, u16_t cid, u8_t *status); - -int bt_mesh_cfg_mod_sub_va_add(u16_t net_idx, u16_t addr, u16_t elem_addr, - const u8_t label[16], u16_t mod_id, - u16_t *virt_addr, u8_t *status); - -int bt_mesh_cfg_mod_sub_va_add_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - const u8_t label[16], u16_t mod_id, - u16_t cid, u16_t *virt_addr, u8_t *status); - -int bt_mesh_cfg_mod_sub_va_del(u16_t net_idx, u16_t addr, u16_t elem_addr, - const u8_t label[16], u16_t mod_id, - u16_t *virt_addr, u8_t *status); - -int bt_mesh_cfg_mod_sub_va_del_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, - const u8_t label[16], u16_t mod_id, - u16_t cid, u16_t *virt_addr, u8_t *status); - -int bt_mesh_cfg_mod_sub_va_overwrite(u16_t net_idx, u16_t addr, - u16_t elem_addr, const u8_t label[16], - u16_t mod_id, u16_t *virt_addr, - u8_t *status); - -int bt_mesh_cfg_mod_sub_va_overwrite_vnd(u16_t net_idx, u16_t addr, - u16_t elem_addr, const u8_t label[16], - u16_t mod_id, u16_t cid, - u16_t *virt_addr, u8_t *status); - -struct bt_mesh_cfg_hb_sub { - u16_t src; - u16_t dst; - u8_t period; - u8_t count; - u8_t min; - u8_t max; -}; - -int bt_mesh_cfg_hb_sub_set(u16_t net_idx, u16_t addr, - struct bt_mesh_cfg_hb_sub *sub, u8_t *status); - -int bt_mesh_cfg_hb_sub_get(u16_t net_idx, u16_t addr, - struct bt_mesh_cfg_hb_sub *sub, u8_t *status); - -struct bt_mesh_cfg_hb_pub { - u16_t dst; - u8_t count; - u8_t period; - u8_t ttl; - u16_t feat; - u16_t net_idx; -}; - -int bt_mesh_cfg_hb_pub_set(u16_t net_idx, u16_t addr, - const struct bt_mesh_cfg_hb_pub *pub, u8_t *status); - -int bt_mesh_cfg_hb_pub_get(u16_t net_idx, u16_t addr, - struct bt_mesh_cfg_hb_pub *pub, u8_t *status); - -s32_t bt_mesh_cfg_cli_timeout_get(void); -void bt_mesh_cfg_cli_timeout_set(s32_t timeout); - -int find_dev_key(uint8_t devkey[16]); -int insert_node_info(uint8_t devkey[16],node_basic_info node); - -/** - * @} - */ - -#endif /* __BT_MESH_CFG_CLI_H */ diff --git a/bundles/mesh/inc/cfg_srv.h b/bundles/mesh/inc/cfg_srv.h deleted file mode 100644 index d1e9928ed..000000000 --- a/bundles/mesh/inc/cfg_srv.h +++ /dev/null @@ -1,70 +0,0 @@ -/** @file - * @brief Bluetooth Mesh Configuration Server Model APIs. - */ - -/* - * Copyright (c) 2017 Intel Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef __BT_MESH_CFG_SRV_H -#define __BT_MESH_CFG_SRV_H - -/** - * @brief Bluetooth Mesh - * @defgroup bt_mesh_cfg_srv Bluetooth Mesh Configuration Server Model - * @ingroup bt_mesh - * @{ - */ - -/** Mesh Configuration Server Model Context */ -struct bt_mesh_cfg_srv { - struct bt_mesh_model *model; - - u8_t net_transmit; /* Network Transmit state */ - u8_t relay; /* Relay Mode state */ - u8_t relay_retransmit; /* Relay Retransmit state */ - u8_t beacon; /* Secure Network Beacon state */ - u8_t gatt_proxy; /* GATT Proxy state */ - u8_t frnd; /* Friend state */ - u8_t default_ttl; /* Default TTL */ - - /* Heartbeat Publication */ - struct bt_mesh_hb_pub { - struct k_delayed_work timer; - - u16_t dst; - u16_t count; - u8_t period; - u8_t ttl; - u16_t feat; - u16_t net_idx; - } hb_pub; - - /* Heartbeat Subscription */ - struct bt_mesh_hb_sub { - s64_t expiry; - - u16_t src; - u16_t dst; - u16_t count; - u8_t min_hops; - u8_t max_hops; - - /* Optional subscription tracking function */ - void (*func)(u8_t hops, u16_t feat); - } hb_sub; -}; - -extern const struct bt_mesh_model_op bt_mesh_cfg_srv_op[]; - -#define BT_MESH_MODEL_CFG_SRV(srv_data) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_CFG_SRV, \ - bt_mesh_cfg_srv_op, NULL, srv_data) - - -/** - * @} - */ - -#endif /* __BT_MESH_CFG_SRV_H */ diff --git a/bundles/mesh/inc/cmac_mode.h b/bundles/mesh/inc/cmac_mode.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/mesh/inc/compiler.h b/bundles/mesh/inc/compiler.h deleted file mode 100644 index e17f58fae..000000000 --- a/bundles/mesh/inc/compiler.h +++ /dev/null @@ -1,26 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef _COMPILER_H_ -#define _COMPILER_H_ - -#include - -#ifdef __CC_ARM - #define __INLINE __inline -#else - #define __INLINE inline -#endif - -#define __ASM __asm - -#endif // _COMPILER_H_ diff --git a/bundles/mesh/inc/constants.h b/bundles/mesh/inc/constants.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/mesh/inc/ecc_dh.h b/bundles/mesh/inc/ecc_dh.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/mesh/inc/gap.h b/bundles/mesh/inc/gap.h deleted file mode 100644 index 08d053c01..000000000 --- a/bundles/mesh/inc/gap.h +++ /dev/null @@ -1,668 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef __GAP_EXTERNAL_H -#define __GAP_EXTERNAL_H - -#include -#include "bluetooth.h" -#include "bt_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct le_connection_parameter_range{ - uint16_t le_conn_interval_min; - uint16_t le_conn_interval_max; - uint16_t le_conn_latency_min; - uint16_t le_conn_latency_max; - uint16_t le_supervision_timeout_min; - uint16_t le_supervision_timeout_max; -} le_connection_parameter_range_t; - -//LE Scan type -typedef enum scan_type -{ - //Passive scan - SCAN_PASSIVE = 0x00, - //Active scan - SCAN_ACTIVE = 0x01, -} scan_type_t; - -void gap_set_random_device_address(const uint8_t *address); - -/** - * Disconnect connection with handle - * - * @param handle - */ -uint8_t gap_disconnect(hci_con_handle_t handle); - -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); - -typedef enum phy_type -{ - PHY_1M = 0x01, - PHY_2M = 0x02, - PHY_CODED = 0x03, -} phy_type_t; - -/*bit configure for */ -typedef enum phy_bittype -{ - PHY_1M_BIT = BIT(0), - PHY_2M_BIT = BIT(1), - PHY_CODED_BIT = BIT(2), -} phy_bittype_t; - -typedef uint8_t phy_bittypes_t; - -typedef enum -{ - ADV_CONNECTABLE, - ADV_SCANNABLE, - ADV_DIRECT, - ADV_HIGH_DUTY_DIR_ADV, - ADV_LEGACY, - ADV_ANONYMOUS, - ADV_INC_TX_POWER -} adv_event_property_t; - -#ifndef C2NIM -#define CONNECTABLE_ADV_BIT BIT(ADV_CONNECTABLE) -#define SCANNABLE_ADV_BIT BIT(ADV_SCANNABLE) -#define DIRECT_ADV_BIT BIT(ADV_DIRECT) -#define HIGH_DUTY_CIR_DIR_ADV_BIT BIT(ADV_HIGH_DUTY_DIR_ADV) -#define LEGACY_PDU_BIT BIT(ADV_LEGACY) -#define ANONY_ADV_BIT BIT(ADV_ANONYMOUS) -#define INC_TX_ADV_BIT BIT(ADV_INC_TX_POWER) -#endif - -typedef uint8_t adv_event_properties_t; - -#define PERIODIC_ADV_BIT_INC_TX BIT(6) -typedef uint8_t periodic_adv_properties_t; - -uint8_t gap_read_phy(const uint16_t con_handle); - -uint8_t gap_set_def_phy(const uint8_t all_phys, const phy_bittypes_t tx_phys, const phy_bittypes_t rx_phys); - -typedef enum phy_option -{ - HOST_NO_PREFERRED_CODING, - HOST_PREFER_S2_CODING, - HOST_PREFER_S8_CODING -} phy_option_t; - -uint8_t gap_set_phy(const uint16_t con_handle, const uint8_t all_phys, const phy_bittypes_t tx_phys, - const phy_bittypes_t rx_phys, const phy_option_t phy_opt); - -uint8_t gap_set_adv_set_random_addr(const uint8_t adv_handle, const uint8_t *random_addr); - -typedef struct scan_phy_config -{ - // Which phy to scan (valid phys: 1M & Coded) - phy_type_t phy; - //Scan type - 0=passive / 1=active - scan_type_t type; - //Scan interval, units is 625us - uint16_t interval; - //Scan window size, units is 625us - uint16_t window; -} scan_phy_config_t; - -//Scan filter policy -typedef enum scan_filter_policy -{ - // Accept all advertising packets except directed advertising packets not - // addressed to this device (default). - SCAN_ACCEPT_ALL_EXCEPT_NOT_DIRECTED, - // Accept only advertising packets from devices where the advertiser¡¯s - // address is in the White List. Directed advertising packets which are not - // addressed to this device shall be ignored - SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, - // Accept all advertising packets except directed advertising packets - // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, - // Accept all advertising packets except: - // 1. advertising packets where the advertiser's identity address is not in - // the White List; and - // 2. directed advertising packets where the initiator's identity address - // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH -} scan_filter_policy_t; - -uint8_t gap_set_ext_scan_para(const bd_addr_type_t addr_type, const scan_filter_policy_t filter, const uint8_t config_num, - const scan_phy_config_t *configs); -uint8_t gap_set_ext_scan_response_data(const uint8_t adv_handle, const uint16_t length, const uint8_t *data); -uint8_t gap_set_ext_scan_enable(const uint8_t enable, const uint8_t filter, const uint16_t duration, const uint16_t period); - - -typedef struct ext_adv_set_en -{ - uint8_t handle; - // Advertising duration, unit 10ms. 0 for continuous advertising - uint16_t duration; - // Maximum number of extended advertising events the Controller shall attempt to send prior to terminating the extended advertising - // 0: no maximum number - uint8_t max_events; -} ext_adv_set_en_t; - -uint8_t gap_set_ext_adv_enable(const uint8_t enable, const uint8_t set_number, const ext_adv_set_en_t *adv_sets); - -// channel map bit -#define PRIMARY_ADV_CH_37 BIT(0) -#define PRIMARY_ADV_CH_38 BIT(1) -#define PRIMARY_ADV_CH_39 BIT(2) -#define PRIMARY_ADV_ALL_CHANNELS (PRIMARY_ADV_CH_37 | PRIMARY_ADV_CH_38 | PRIMARY_ADV_CH_39) - -typedef uint8_t adv_channel_bits_t; - -//Advertising filter policy -typedef enum adv_filter_policy -{ - //Allow both scan and connection requests from anyone - ADV_FILTER_ALLOW_ALL = 0x00, - //Allow both scan req from White List devices only and connection req from anyone - ADV_FILTER_ALLOW_SCAN_WLST_CON_ALL, - //Allow both scan req from anyone and connection req from White List devices only - ADV_FILTER_ALLOW_SCAN_ALL_CON_WLST, - //Allow scan and connection requests from White List devices only - ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST -} adv_filter_policy_t; - -uint8_t gap_set_ext_adv_para(const uint8_t adv_handle, - const adv_event_properties_t properties, - const uint32_t interval_min, - const uint32_t interval_max, - const adv_channel_bits_t primary_adv_channel_map, - const bd_addr_type_t own_addr_type, - const bd_addr_type_t peer_addr_type, - const uint8_t *peer_addr, - const adv_filter_policy_t adv_filter_policy, - const int8_t tx_power, - const phy_type_t primary_adv_phy, - const uint8_t secondary_adv_max_skip, - const phy_type_t secondary_adv_phy, - const uint8_t sid, - const uint8_t scan_req_notification_enable); - -typedef enum adv_data_frag_pref -{ - ADV_DATA_CTRL_MAY_FRAG = 0, - ADV_DATA_CTRL_NOT_FRAG = 1 -} adv_data_frag_pref_t_t; - -uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const uint8_t *data); - -uint8_t gap_set_periodic_adv_data(const uint8_t adv_handle, uint16_t length, const uint8_t *data); -uint8_t gap_set_periodic_adv_enable(const uint8_t enable, const uint8_t adv_handle); -uint8_t gap_set_periodic_adv_para(const uint8_t adv_handle, - const uint16_t interval_min, - const uint16_t interval_max, - const periodic_adv_properties_t properties); - -uint8_t gap_clr_adv_set(void); -uint8_t gap_rmv_adv_set(const uint8_t adv_handle); - -typedef enum periodic_adv_filter_policy -{ - PERIODIC_ADVERTISER_FROM_PARAM = 0, - PERIODIC_ADVERTISER_FROM_LIST = 1 -} periodic_adv_filter_policy_t; - -uint8_t gap_periodic_adv_create_sync(const periodic_adv_filter_policy_t filter_policy, - const uint8_t adv_sid, - const bd_addr_type_t addr_type, - const uint8_t *addr, - const uint16_t skip, - const uint16_t sync_timeout, - const uint8_t sync_cte_type - ); -uint8_t gap_periodic_adv_create_sync_cancel(void); -uint8_t gap_periodic_adv_term_sync(const uint16_t sync_handle); -uint8_t gap_add_dev_to_periodic_list(const uint8_t addr_type, const uint8_t *addr, const uint8_t sid); -uint8_t gap_rmv_dev_from_periodic_list(const uint8_t addr_type, const uint8_t *addr, const uint8_t sid); -uint8_t gap_clr_periodic_adv_list(void); -uint8_t gap_read_periodic_adv_list_size(void); - -typedef enum initiating_filter_policy -{ - INITIATING_ADVERTISER_FROM_PARAM = 0, - INITIATING_ADVERTISER_FROM_LIST = 1 -} initiating_filter_policy_t; - -typedef struct { - //Scan interval, units is 625us - uint16_t scan_int; - //Scan window size, units is 625us - uint16_t scan_win; - // connection interval limiations. unit is 1.25ms - uint16_t interval_min; - uint16_t interval_max; - // Slave latency for the connection in number of connection events - uint16_t latency; - // Supervision timeout for the LE Link, unit is 10ms - uint16_t supervision_timeout; - // Informative parameter recommending the min/max length of connection event needed for this LE connection - uint16_t min_ce_len; - uint16_t max_ce_len; -} conn_para_t; - -typedef struct initiating_phy_config -{ - phy_type_t phy; - conn_para_t conn_param; -} initiating_phy_config_t; - - -uint8_t gap_ext_create_connection(const initiating_filter_policy_t filter_policy, - const bd_addr_type_t own_addr_type, - const bd_addr_type_t peer_addr_type, - const uint8_t *peer_addr, - const uint8_t initiating_phy_num, - const initiating_phy_config_t *phy_configs); - -/** - * @brief Cancel connection process initiated by gap_ext_create_connection - */ -uint8_t gap_create_connection_cancel(void); - -typedef enum -{ - CTE_AOA, - CTE_AOD_1US, - CTE_AOD_2US -} cte_type_t; - -/** - * @brief Set the type, length, and antenna switching pattern for the transmission - * of Constant Tone Extensions in any periodic advertising on the advertising set - * identified by the Advertising_Handle parameter. - * - * @param adv_handle Used to identify an advertising set. Range: 0x00 to 0xEF - * @param cte_len Constant Tone Extension length in 8 ¦Ìs units. Range: 0x02 to 0x14 - * @param cte_type CTE Type - * @param cte_count The number of Constant Tone Extensions to transmit in each periodic - * advertising interval. - * Range: 0x01 to 0x10 - * @param switching_pattern_len The number of Antenna IDs in the pattern. Range: 0x02 to 0x4B. - * @param antenna_ids List of Antenna IDs in the pattern - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_set_connectionless_cte_tx_param(const uint8_t adv_handle, -// const uint8_t cte_len, -// const cte_type_t cte_type, -// const uint8_t cte_count, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Request that the Controller enables or disables the use of Constant Tone - * Extensions in any periodic advertising on the advertising set identified by - * Advertising_Handle. - * - * @param adv_handle Identifier for the advertising set in which Constant Tone Extension is - * being enabled or disabled - * @param cte_enable Disable (0x00), Enable (0x01) - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_set_connectionless_cte_tx_enable(const uint8_t adv_handle, -// const uint8_t cte_enable); -// WARNING: ^^^ this API is not available in this release - - -typedef enum -{ - CTE_SLOT_DURATION_1US, - CTE_SLOT_DURATION_2US -} cte_slot_duration_type_t; - -/** - * @brief Request that the Controller enables or disables capturing IQ samples from the - * Constant Tone Extension of periodic advertising packets in the periodic - * advertising train identified by the Sync_Handle parameter. - * - * @param sync_handle identifying the periodic advertising train. - * @param sampling_enable Disable (0x00), Enable (0x01) - * @param slot_durations combination of bits representing cte_slot_duration_type_t - * @param max_sampled_ctes The maximum number of Constant Tone Extensions to sample and - * report in each periodic advertising interval. - * Range: 0x01 to 0x10. 0x00: sample and report all CTEs. - * @param switching_pattern_len The number of Antenna IDs in the pattern. Range: 0x02 to 0x4B. - * @param antenna_ids List of Antenna IDs in the pattern - * - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_set_connectionless_iq_sampling_enable(const uint16_t sync_handle, -// const uint8_t sampling_enable, -// const uint8_t slot_durations, -// const uint8_t max_sampled_ctes, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Enable or disable sampling received Constant Tone Extension fields on the - * connection identified by the Connection_Handle parameter and to set the - * antenna switching pattern and switching and sampling slot durations to be - * used. - * - * @param conn_handle Connection handle - * @param sampling_enable Disable (0x00), Enable (0x01) - * @param slot_durations combination of bits representing cte_slot_duration_type_t - * @param switching_pattern_len The number of Antenna IDs in the pattern. Range: 0x02 to 0x4B. - * @param antenna_ids List of Antenna IDs in the pattern - * @return 0: Message is sent out; Other: Message is not sent out - * - */ -// uint8_t gap_set_connection_cte_rx_param(const hci_con_handle_t conn_handle, -// const uint8_t sampling_enable, -// const uint8_t slot_durations, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Set the antenna switching pattern and permitted Constant Tone Extension - * types used for transmitting Constant Tone Extensions requested by the peer - * device on the connection identified by the Connection_Handle parameter. - * - * @param conn_handle Connection handle - * @param cte_types Combination of bits representing cte_type_t - * @param switching_pattern_len The number of Antenna IDs in the pattern. Range: 0x02 to 0x4B. - * @param antenna_ids List of Antenna IDs in the pattern - * @return 0: Message is sent out; Other: Message is not sent out - * - */ -// uint8_t gap_set_connection_cte_tx_param(const hci_con_handle_t conn_handle, -// const uint8_t cte_types, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - - - -/** - * @brief Set the antenna switching pattern and permitted Constant Tone Extension - * types used for transmitting Constant Tone Extensions requested by the peer - * device on the connection identified by the Connection_Handle parameter. - * - * @param conn_handle Connection handle - * @param enable Disable (0x00), Enable (0x01) - * @param requested_interval 0x0000: Initiate the Constant Tone Extension Request procedure once, at the - * earliest practical opportunity - * 0x0001 to 0xFFFF: - * Requested interval for initiating the Constant Tone Extension Request - * procedure in number of connection events. - * @param requested_cte_length Minimum length of the Constant Tone Extension being requested in 8 - * ¦Ìs units. Range: 0x02 to 0x14. - * @param requested_cte_type Requested CTE type - * @return 0: Message is sent out; Other: Message is not sent out - * - */ -// uint8_t gap_set_connection_cte_request_enable(const hci_con_handle_t conn_handle, -// const uint8_t enable, -// const uint16_t requested_cte_interval, -// const uint8_t requested_cte_length, -// const cte_type_t requested_cte_type); -// WARNING: ^^^ this API is not available in this release - - - -/** - * @brief Request the Controller to respond to LL_CTE_REQ PDUs with LL_CTE_RSP - * PDUs on the specified connection. - * - * @param conn_handle Connection handle - * @param enable Disable (0x00), Enable (0x01) - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_set_connection_cte_response_enable(const hci_con_handle_t conn_handle, -// const uint8_t enable); -// WARNING: ^^^ this API is not available in this release - -/** - * @brief Read the switching rates, the sampling rates, the number of antennae, and the - * maximum length of a transmitted Constant Tone Extension supported by the - * Controller. - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_read_antenna_info(void); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Enable or disable reports for the periodic advertising train identified by the - * Sync_Handle parameter. - * - * @param sync_handle identifying the periodic advertising train. - * @param enable Disable (0x00), Enable (0x01) - * - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_set_periodic_adv_rx_enable(const uint16_t sync_handle, -// const uint8_t enable); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Instruct the Controller to send synchronization information about the periodic - * advertising train identified by the Sync_Handle parameter to a connected - * device. - * - * @param conn_handle Connection handle - * @param service_data A value provided by the app for use by the app of the peer device. - * It is not used by the host or controller. - * @param sync_handle identifying the periodic advertising train. - * - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_periodic_adv_sync_transfer(const hci_con_handle_t conn_handle, -// const uint16_t service_data, -// const uint16_t sync_handle); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Instruct the Controller to send synchronization information about the periodic - * advertising in an advertising set to a connected device. - * - * @param conn_handle Connection handle - * @param service_data A value provided by the app for use by the app of the peer device. - * It is not used by the host or controller. - * @param adv_handle identifying the advertising set. - * - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_periodic_adv_set_info_transfer(const hci_con_handle_t conn_handle, -// const uint16_t service_data, -// const uint8_t adv_handle); -// WARNING: ^^^ this API is not available in this release - - - -typedef enum -{ - PERIODIC_TRANS_MODE_NULL, - PERIODIC_TRANS_MODE_SEND_EVT_DISABLE_REPORT, - PERIODIC_TRANS_MODE_SEND_EVT_ENABLE_REPORT -} periodic_adv_sync_transfer_mode_t; - -// synchronize exclusion flags -#define SYNC_EXCL_AOA 1 -#define SYNC_EXCL_AOD_1US 2 -#define SYNC_EXCL_AOD_2US 4 -#define SYNC_EXCL_WITHOUT_CTE 8 - -/** - * @brief Specify how the Controller will process periodic advertising - * synchronization information received from the device identified by the - * Connection_Handle parameter (the "transfer mode") - * - * @param conn_handle Connection handle - * @param mode The action to be taken when periodic advertising - * synchronization information is received. - * @param skip Number of consecutive periodic advertising - * packets that the receiver may skip after successfully receiving a periodic - * advertising packet. - * Range: 0x0000 to 0x01F3 - * @param sync_timeout maximum permitted time between successful receives. If this time is exceeded, synchronization is lost. - * Range: 0x000A to 0x4000. Time = N*10 ms - * @param cte_excl_types whether to only synchronize to periodic advertising with certain types of Constant Tone Extension. - * Combination of SYNC_EXCL_XXX - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_periodic_adv_sync_transfer_param(const hci_con_handle_t conn_handle, -// const periodic_adv_sync_transfer_mode_t mode, -// const uint16_t skip, -// const uint16_t sync_timeout, -// const uint8_t cte_excl_types); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Specify the initial value for the mode, skip, timeout, and - * Constant Tone Extension type (set by the - * HCI_LE_Set_Periodic_Advertising_Sync_Transfer_Parameters command; - * see Section 7.8.91) to be used for all subsequent connections over the LE - * transport. - * - * @param mode The action to be taken when periodic advertising - * synchronization information is received. - * @param skip Number of consecutive periodic advertising - * packets that the receiver may skip after successfully receiving a periodic - * advertising packet. - * Range: 0x0000 to 0x01F3 - * @param sync_timeout maximum permitted time between successful receives. If this time is exceeded, synchronization is lost. - * Range: 0x000A to 0x4000. Time = N*10 ms - * @param cte_excl_types whether to only synchronize to periodic advertising with certain types of Constant Tone Extension. - * Combination of SYNC_EXCL_XXX - * @return 0: Message is sent out; Other: Message is not sent out - */ -// uint8_t gap_default_periodic_adv_sync_transfer_param( -// const periodic_adv_sync_transfer_mode_t mode, -// const uint16_t skip, -// const uint16_t sync_timeout, -// const uint8_t cte_excl_types); -// WARNING: ^^^ this API is not available in this release - - -uint8_t gap_set_host_channel_classification(const uint32_t channel_low, const uint8_t channel_high); - - -/** - * @brief Sets update period for random address - * @param period_ms in ms - */ -// void gap_random_address_set_update_period(int period_ms); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Updates the connection parameters for a given LE connection - * @param handle - * @param conn_interval_min (unit: 1.25ms) - * @param conn_interval_max (unit: 1.25ms) - * @param conn_latency - * @param supervision_timeout (unit: 10ms) - * @returns 0 if ok - */ -int gap_update_connection_parameters(hci_con_handle_t con_handle, uint16_t conn_interval_min, - uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout, - uint16_t min_ce_len, uint16_t max_ce_len); - -/** - * @brief Set accepted connection parameter range - * @param range - */ -void gap_get_connection_parameter_range(le_connection_parameter_range_t * range); - -/** - * @brief Get accepted connection parameter range - * @param range - */ -void gap_set_connection_parameter_range(le_connection_parameter_range_t * range); - -/** - * @brief Encrypt the Plaintext_Data in the command using the Key given in the command and - * returns the Encrypted_Data to the Host. The AES-128 bit block cypher is - * defined in NIST Publication FIPS-197. - * @param key Key, 16 Octets. - * 0x1234.... is represented by {0x12, 0x34, ...} - * @param plaintext Plaintext_Data, 16 Octets - * 0x1234.... is represented by {0x12, 0x34, ...} - * @return 0: Message is sent out; Other: Message is not sent out - */ -uint8_t gap_aes_encrypt(const uint8_t *key, const uint8_t *plaintext); - -#define HCI_VENDOR_CCM 0xFC01 - -uint8_t gap_start_ccm( - uint8_t type, // 0: encrypt 1: decrypt - uint8_t mic_size, - uint16_t msg_len, - uint16_t aad_len, - uint32_t tag, // same value will be reported in event - uint8_t *key, - uint8_t *nonce, - uint8_t *msg, - uint8_t *aad, - uint8_t *out_msg); - -//HCI func interface - -/** - * @brief Add event packet handler. - */ -void hci_add_event_handler(btstack_packet_callback_registration_t * callback_handler); - -/** - * @brief Registers a packet handler for ACL data. Used by L2CAP - */ -void hci_register_acl_packet_handler(btstack_packet_handler_t handler); - -/** - * @brief Requests the change of BTstack power mode. - */ -int hci_power_control(HCI_POWER_MODE mode); - - -/*********************************/ -typedef enum { - // No security - // No encryption required - // No authentication - LEVEL_1 = 1, - - // Unauthenticated pairing with encryption - LEVEL_2, - - // Authenticated pairing with encryption - LEVEL_3, - - // Authenticated LE Secure Connections pairing with encryption - LEVEL_4, -} gap_security_level_t; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bundles/mesh/inc/gap_external.h b/bundles/mesh/inc/gap_external.h deleted file mode 100644 index 6565a3311..000000000 --- a/bundles/mesh/inc/gap_external.h +++ /dev/null @@ -1,951 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- -// Design Information -// ---------------------------------------------------------------------------- -// -// File : gap_external.h -// -// Author : YiyunDeng -// -// Organisation : INGCHIPS -// -// Date : 2019-03-01 -// -// Revision : v0.1 -// -// Project : ING91800 -// -// Description : -// -// ---------------------------------------------------------------------------- -// Revision History -// ---------------------------------------------------------------------------- -// -// Date Author Revision Change Description -// ========== =============== ========= ======================================= -// 2019/03/01 Dengyiyun v0.1 Creat -// -// ---------------------------------------------------------------------------- - -#ifndef __GAP_EXTERNAL_H -#define __GAP_EXTERNAL_H - -#include -#include "bt_types.h" -#include "btstack_config.h" -#if defined __cplusplus -extern "C" { -#endif - -typedef struct { - uint8_t type; - uint8_t val[6]; -} ble_addr_t2; - -#define BLE_GAP_EVENT_CONNECT 0 -#define BLE_GAP_EVENT_DISCONNECT 1 -/* Reserved 2 */ -#define BLE_GAP_EVENT_CONN_UPDATE 3 -#define BLE_GAP_EVENT_CONN_UPDATE_REQ 4 -#define BLE_GAP_EVENT_L2CAP_UPDATE_REQ 5 -#define BLE_GAP_EVENT_TERM_FAILURE 6 -#define BLE_GAP_EVENT_DISC 7 -#define BLE_GAP_EVENT_DISC_COMPLETE 8 -#define BLE_GAP_EVENT_ADV_COMPLETE 9 -#define BLE_GAP_EVENT_ENC_CHANGE 10 -#define BLE_GAP_EVENT_PASSKEY_ACTION 11 -#define BLE_GAP_EVENT_NOTIFY_RX 12 -#define BLE_GAP_EVENT_NOTIFY_TX 13 -#define BLE_GAP_EVENT_SUBSCRIBE 14 -#define BLE_GAP_EVENT_MTU 15 -#define BLE_GAP_EVENT_IDENTITY_RESOLVED 16 -#define BLE_GAP_EVENT_REPEAT_PAIRING 17 -#define BLE_GAP_EVENT_PHY_UPDATE_COMPLETE 18 -#define BLE_GAP_EVENT_EXT_DISC 19 - - -/*bit configure for */ -typedef enum PHY_BIT_TYPE -{ - PHY_CODED_BIT = BIT(2), - PHY_1M_BIT = BIT(0), - PHY_2M_BIT = BIT(1), -}phy_bittype_t; - -typedef enum PHY_TYPE -{ - PHY_1M = 0x01, - PHY_2M = 0x02, - PHY_CODED = 0x03, -}phy_type_t; - -typedef enum scan_type -{ - PASSIVE_SCAN = 0x00, - ACTIVE_SCAN = 0x01, -} scan_type_t; - -typedef enum Advertising_Event_Properties -{ - CONNECTABLE_ADV_BIT = BIT(0), - SCANNABLE_ADV_BIT = BIT(1), - DIRECT_ADV_BIT = BIT(2), - HIGH_DUTY_CIR_DIR_ADV_BIT = BIT(3), - LEGACY_PDU_BIT = BIT(4), - ANONY_ADV_BIT = BIT(5), - INC_TX_ADV_BIT = BIT(6) -}Advertising_Event_Properties_t; - -typedef enum Periodic_Advertising_Properties -{ - INC_TX_ADV_PERIOD_BIT = BIT(6), -}Periodic_Advertising_Properties_t; - -typedef struct ble_gap_event mesh_gap_event; -#if BLE50_ENABLED -/* Ext Adv Set enable parameters, not in HCI order */ - -struct ble_gap_ext_adv_params { - unsigned int connectable:1; - unsigned int scannable:1; - unsigned int directed:1; - unsigned int high_duty_directed:1; - unsigned int legacy_pdu:1; - unsigned int anonymous:1; - unsigned int include_tx_power:1; - unsigned int scan_req_notif:1; - - uint32_t itvl_min; - uint32_t itvl_max; - uint8_t channel_map; - uint8_t own_addr_type; - ble_addr_t2 peer; - uint8_t filter_policy; - uint8_t primary_phy; - uint8_t secondary_phy; - int8_t tx_power; - uint8_t sid; -}; - -struct ble_gap_ext_disc_params { - uint16_t itvl; - uint16_t window; - uint8_t passive:1; -}; - -struct ble_gap_ext_disc_desc { - /*** Common fields. */ - uint8_t props; - uint8_t data_status; - uint8_t legacy_event_type; - ble_addr_t2 addr; - int8_t rssi; - uint8_t tx_power; - uint8_t sid; - uint8_t prim_phy; - uint8_t sec_phy; - uint8_t length_data; - uint8_t *data; - /*** - * LE direct advertising report fields; direct_addr is BLE_ADDR_ANY if - * direct address fields are not present. - */ - bd_addr_t direct_addr; -}; -#endif - - -struct ble_gap_disc_params { - uint16_t itvl; - uint16_t window; - uint8_t filter_policy; - uint8_t limited:1; - uint8_t passive:1; - uint8_t filter_duplicates:1; -}; - -struct ble_gap_sec_state { - /** If connection is encrypted */ - unsigned encrypted:1; - - /** If connection is authenticated */ - unsigned authenticated:1; - - /** If connection is bonded (security information is stored) */ - unsigned bonded:1; - - /** Size of a key used for encryption */ - unsigned key_size:5; -}; - -struct ble_gap_disc_desc { - /*** Common fields. */ - uint8_t event_type; - uint8_t length_data; - bd_addr_t addr; - int8_t rssi; - uint8_t *data; - - /*** - * LE direct advertising report fields; direct_addr is BLE_ADDR_ANY if - * direct address fields are not present. - */ - bd_addr_t direct_addr; -}; - -/** @brief Connection descriptor */ -struct ble_gap_conn_desc { - /** Connection security state */ - struct ble_gap_sec_state sec_state; - - /** Local identity address */ - bd_addr_t our_id_addr; - - /** Peer identity address */ - bd_addr_t peer_id_addr; - - /** Local over-the-air address */ - bd_addr_t our_ota_addr; - - /** Peer over-the-air address */ - bd_addr_t peer_ota_addr; - - /** Connection handle */ - uint16_t conn_handle; - - /** Connection interval */ - uint16_t conn_itvl; - - /** Connection latency */ - uint16_t conn_latency; - - /** Connection supervision timeout */ - uint16_t supervision_timeout; - - /** Connection Role - * Possible values BLE_GAP_ROLE_SLAVE or BLE_GAP_ROLE_MASTER - */ - uint8_t role; - - /** Master clock accuracy */ - uint8_t master_clock_accuracy; -}; - -struct ble_gap_event -{ - /** - * Indicates the type of GAP event that occurred. This is one of the - * BLE_GAP_EVENT codes. - */ - uint8_t type; - - /** - * A discriminated union containing additional details concerning the GAP - * event. The 'type' field indicates which member of the union is valid. - */ - union { - /** - * Represents a connection attempt. Valid for the following event - * types: - * o BLE_GAP_EVENT_CONNECT - */ - struct { - /** - * The status of the connection attempt; - * o 0: the connection was successfully established. - * o BLE host error code: the connection attempt failed for - * the specified reason. - */ - int status; - - /** The handle of the relevant connection. */ - uint16_t conn_handle; - } connect; - - /** - * Represents a terminated connection. Valid for the following event - * types: - * o BLE_GAP_EVENT_DISCONNECT - */ - struct { - /** - * A BLE host return code indicating the reason for the - * disconnect. - */ - int reason; - - /** Information about the connection prior to termination. */ - struct ble_gap_conn_desc conn; - } disconnect; - - /** - * Represents an advertising report received during a discovery - * procedure. Valid for the following event types: - * o BLE_GAP_EVENT_DISC - */ - struct ble_gap_disc_desc disc; - -#if (BLE50_ENABLED) - /** - * Represents an extended advertising report received during a discovery - * procedure. Valid for the following event types: - * o BLE_GAP_EVENT_EXT_DISC - */ - struct ble_gap_ext_disc_desc ext_disc; -#endif - - /** - * Represents a completed discovery procedure. Valid for the following - * event types: - * o BLE_GAP_EVENT_DISC_COMPLETE - */ - struct { - /** - * The reason the discovery procedure stopped. Typical reason - * codes are: - * o 0: Duration expired. - * o BLE_HS_EPREEMPTED: Host aborted procedure to configure a - * peer's identity. - */ - int reason; - } disc_complete; - - /** - * Represents a completed advertise procedure. Valid for the following - * event types: - * o BLE_GAP_EVENT_ADV_COMPLETE - */ - struct { - /** - * The reason the advertise procedure stopped. Typical reason - * codes are: - * o 0: Terminated due to connection. - * o BLE_HS_ETIMEOUT: Duration expired. - * o BLE_HS_EPREEMPTED: Host aborted procedure to configure a - * peer's identity. - */ - int reason; - -#if 0 //(BLE50_ENABLED) - /** Advertising instance */ - uint8_t instance; - /** The handle of the relevant connection - valid if reason=0 */ - uint16_t conn_handle; - /** - * Number of completed extended advertising events - * - * This field is only valid if non-zero max_events was passed to - * ble_gap_ext_adv_start() and advertising completed due to duration - * timeout or max events transmitted. - * */ - uint8_t num_ext_adv_events; -#endif - } adv_complete; - - /** - * Represents a failed attempt to terminate an established connection. - * Valid for the following event types: - * o BLE_GAP_EVENT_TERM_FAILURE - */ - struct { - /** - * A BLE host return code indicating the reason for the failure. - */ - int status; - - /** The handle of the relevant connection. */ - uint16_t conn_handle; - } term_failure; - /** - * Represents a state change in a peer's subscription status. In this - * comment, the term "update" is used to refer to either a notification - * or an indication. This event is triggered by any of the following - * occurrences: - * o Peer enables or disables updates via a CCCD write. - * o Connection is about to be terminated and the peer is - * subscribed to updates. - * o Peer is now subscribed to updates after its state was restored - * from persistence. This happens when bonding is restored. - * - * Valid for the following event types: - * o BLE_GAP_EVENT_SUBSCRIBE - */ - struct { - /** The handle of the relevant connection. */ - uint16_t conn_handle; - - /** The value handle of the relevant characteristic. */ - uint16_t attr_handle; - - /** One of the BLE_GAP_SUBSCRIBE_REASON codes. */ - uint8_t reason; - - /** Whether the peer was previously subscribed to notifications. */ - uint8_t prev_notify:1; - - /** Whether the peer is currently subscribed to notifications. */ - uint8_t cur_notify:1; - - /** Whether the peer was previously subscribed to indications. */ - uint8_t prev_indicate:1; - - /** Whether the peer is currently subscribed to indications. */ - uint8_t cur_indicate:1; - } subscribe; - - }; -}; -struct ble_gap_adv_params { - /** Advertising mode. Can be one of following constants: - * - BLE_GAP_CONN_MODE_NON (non-connectable; 3.C.9.3.2). - * - BLE_GAP_CONN_MODE_DIR (directed-connectable; 3.C.9.3.3). - * - BLE_GAP_CONN_MODE_UND (undirected-connectable; 3.C.9.3.4). - */ - uint8_t conn_mode; - /** Discoverable mode. Can be one of following constants: - * - BLE_GAP_DISC_MODE_NON (non-discoverable; 3.C.9.2.2). - * - BLE_GAP_DISC_MODE_LTD (limited-discoverable; 3.C.9.2.3). - * - BLE_GAP_DISC_MODE_GEN (general-discoverable; 3.C.9.2.4). - */ - uint8_t disc_mode; - - /** Minimum advertising interval, if 0 stack use sane defaults */ - uint16_t itvl_min; - /** Maximum advertising interval, if 0 stack use sane defaults */ - uint16_t itvl_max; - /** Advertising channel map , if 0 stack use sane defaults */ - uint8_t channel_map; - - /** Advertising Filter policy */ - uint8_t filter_policy; - - /** If do High Duty cycle for Directed Advertising */ - uint8_t high_duty_cycle:1; -}; - -typedef int ble_gap_event_fn(struct ble_gap_event *event, void *arg); -struct ble_gap_mesh_state { - ble_gap_event_fn *cb; - void *cb_arg; -}; - -extern struct ble_gap_mesh_state ble_gap_mesh; - -typedef struct le_connection_parameter_range{ - uint16_t le_conn_interval_min; - uint16_t le_conn_interval_max; - uint16_t le_conn_latency_min; - uint16_t le_conn_latency_max; - uint16_t le_supervision_timeout_min; - uint16_t le_supervision_timeout_max; -} le_connection_parameter_range_t; - -/***add by haoyanbiao 2016.11.23****/ -typedef enum{ - - //DEVDISC_MODE_NONDISCOVERABLE, - //No discoverable setting. - GENERAL_DISCOV_PROC=0X01, - //General Discoverable devices. - LIMITED_DISCOV_PROC, - //Limited Discoverable devices. - GENERAL_CONNECTION_PROC, - //DEVDISC_MODE_ALL -}gap_pro_state_t; - -typedef struct pro_ongoing{ -gap_pro_state_t discover_type; -}pro_ongoing_t; - -// void gap_dispose_set_scan_para_complete(uint8_t status); -typedef void (*f_gap_dispose_set_scan_para_complete)(uint8_t status); -#define gap_dispose_set_scan_para_complete ((f_gap_dispose_set_scan_para_complete)(0x000129f9)) - -// void gap_dispose_set_adv_para_complete(uint8_t status); -typedef void (*f_gap_dispose_set_adv_para_complete)(uint8_t status); -#define gap_dispose_set_adv_para_complete ((f_gap_dispose_set_adv_para_complete)(0x00012979)) - -// uint8_t gap_discovery_proc_init(gap_pro_state_t discover_type,uint8_t app_id); -typedef uint8_t (*f_gap_discovery_proc_init)(gap_pro_state_t discover_type,uint8_t app_id); -#define gap_discovery_proc_init ((f_gap_discovery_proc_init)(0x0001292d)) - -// uint8_t gap_general_connection_proc_init(uint8_t app_id); -typedef uint8_t (*f_gap_general_connection_proc_init)(uint8_t app_id); -#define gap_general_connection_proc_init ((f_gap_general_connection_proc_init)(0x00012a35)) - -// uint8_t gap_auto_connection_proc_init(uint8_t app_id,bd_addr_type_t address_type, bd_addr_t address); -typedef uint8_t (*f_gap_auto_connection_proc_init)(uint8_t app_id,bd_addr_type_t address_type, bd_addr_t address); -#define gap_auto_connection_proc_init ((f_gap_auto_connection_proc_init)(0x000125f5)) - -// void fill_advertising_report_from_packet(advertising_report_t * report, const uint8_t *packet); -typedef void (*f_fill_advertising_report_from_packet)(advertising_report_t * report, const uint8_t *packet); -#define fill_advertising_report_from_packet ((f_fill_advertising_report_from_packet)(0x000115f5)) - -// void fill_ext_advertising_report_from_packet(ext_advertising_report_t * report, const uint8_t *packet); -typedef void (*f_fill_ext_advertising_report_from_packet)(ext_advertising_report_t * report, const uint8_t *packet); -#define fill_ext_advertising_report_from_packet ((f_fill_ext_advertising_report_from_packet)(0x00011631)) - -// void fill_period_report_from_packet(prd_advertising_report_t * report, const uint8_t *packet); -typedef void (*f_fill_period_report_from_packet)(prd_advertising_report_t * report, const uint8_t *packet); -#define fill_period_report_from_packet ((f_fill_period_report_from_packet)(0x0001169d)) - -// void gap_get_advertisingReport(advertising_report_t * report, const uint8_t *packet); -typedef void (*f_gap_get_advertisingReport)(advertising_report_t * report, const uint8_t *packet); -#define gap_get_advertisingReport ((f_gap_get_advertisingReport)(0x00012a61)) - -// uint8_t gap_observe_proc_init(uint8_t app_id); -typedef uint8_t (*f_gap_observe_proc_init)(uint8_t app_id); -#define gap_observe_proc_init ((f_gap_observe_proc_init)(0x00012c69)) - - -/** - * @brief Set parameters for LE Scan - */ -// void gap_set_scan_parameters(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window); -typedef void (*f_gap_set_scan_parameters)(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window); -#define gap_set_scan_parameters ((f_gap_set_scan_parameters)(0x00013069)) - - -/** - * @brief Start LE Scan - */ -// void gap_start_scan(void); -typedef void (*f_gap_start_scan)(void); -#define gap_start_scan ((f_gap_start_scan)(0x00013125)) - - -/** - * @brief Stop LE Scan - */ -// void gap_stop_scan(void); -typedef void (*f_gap_stop_scan)(void); -#define gap_stop_scan ((f_gap_stop_scan)(0x000131c1)) - -// Classic | LE - -// void gap_set_random_device_address(bd_addr_t address); -typedef void (*f_gap_set_random_device_address)(bd_addr_t address); -#define gap_set_random_device_address ((f_gap_set_random_device_address)(0x0001305d)) - - - -/** - * @brief Enable privacy by using random addresses - * @param random_address_type to use (incl. OFF) - */ -// void gap_random_address_set_mode(gap_random_address_type_t random_address_type); -typedef void (*f_gap_random_address_set_mode)(gap_random_address_type_t random_address_type); -#define gap_random_address_set_mode ((f_gap_random_address_set_mode)(0x00012da9)) - - -/** - * @brief Sets a fixed random address for advertising - * @param addr - * @note Sets random address mode to type off - */ -// void gap_random_address_set(bd_addr_t addr); -typedef void (*f_gap_random_address_set)(bd_addr_t addr); -#define gap_random_address_set ((f_gap_random_address_set)(0x00012d81)) - -/** - * @brief Get privacy mode - */ -// gap_random_address_type_t gap_random_address_get_mode(void); -typedef gap_random_address_type_t (*f_gap_random_address_get_mode)(void); -#define gap_random_address_get_mode ((f_gap_random_address_get_mode)(0x00012d75)) - - - -/** - * @brief Auto Connection Establishment - Start Connecting to device - * @param address_typ - * @param address - * @returns 0 if ok - */ -// int gap_auto_connection_start(bd_addr_type_t address_typ, bd_addr_t address); -typedef int (*f_gap_auto_connection_start)(bd_addr_type_t address_typ, bd_addr_t address); -#define gap_auto_connection_start ((f_gap_auto_connection_start)(0x00012621)) - -// uint8_t gap_auto_connect(void); -typedef uint8_t (*f_gap_auto_connect)(void); -#define gap_auto_connect ((f_gap_auto_connect)(0x000125ad)) - - -/** - * @brief Auto Connection Establishment - Stop Connecting to device - * @param address_typ - * @param address - * @returns 0 if ok - */ -// int gap_auto_connection_stop(bd_addr_type_t address_typ, bd_addr_t address); -typedef int (*f_gap_auto_connection_stop)(bd_addr_type_t address_typ, bd_addr_t address); -#define gap_auto_connection_stop ((f_gap_auto_connection_stop)(0x00012671)) - - -/** - * @brief Auto Connection Establishment - Stop everything - * @note Convenience function to stop all active auto connection attempts - */ -// void gap_auto_connection_stop_all(void); -typedef void (*f_gap_auto_connection_stop_all)(void); -#define gap_auto_connection_stop_all ((f_gap_auto_connection_stop_all)(0x00012681)) - - - -/** - * @brief Connect to remote LE device - */ -// uint8_t gap_connect(bd_addr_t addr, bd_addr_type_t addr_type); -typedef uint8_t (*f_gap_connect)(bd_addr_t addr, bd_addr_type_t addr_type); -#define gap_connect ((f_gap_connect)(0x0001272d)) - - - -/** - * @brief Disconnect connection with handle - * @param handle - */ -// uint8_t gap_disconnect(hci_con_handle_t handle); -typedef uint8_t (*f_gap_disconnect)(hci_con_handle_t handle); -#define gap_disconnect ((f_gap_disconnect)(0x000128a5)) - - -/** - * @brief Get connection type - * @param con_handle - * @result connection_type - */ -// gap_connection_type_t gap_get_connection_type(hci_con_handle_t connection_handle); -typedef gap_connection_type_t (*f_gap_get_connection_type)(hci_con_handle_t connection_handle); -#define gap_get_connection_type ((f_gap_get_connection_type)(0x00012ae9)) - - - -/** - * @brief Set Advertisement Data - * @param advertising_data_length - * @param advertising_data (max 31 octets) - * @note data is not copied, pointer has to stay valid - */ -// void gap_advertisements_set_data(uint8_t advertising_data_length, uint8_t * advertising_data); -typedef void (*f_gap_advertisements_set_data)(uint8_t advertising_data_length, uint8_t * advertising_data); -#define gap_advertisements_set_data ((f_gap_advertisements_set_data)(0x00012555)) - - -/** - * @brief Set Advertisement Paramters - * @param adv_int_min - * @param adv_int_max - * @param adv_type - * @param direct_address_type - * @param direct_address - * @param channel_map - * @param filter_policy - * @note own_address_type is used from gap_random_address_set_mode - */ -// void gap_advertisements_set_params(uint16_t adv_int_min, uint16_t adv_int_max, uint8_t adv_type, -// uint8_t direct_address_typ, bd_addr_t direct_address, uint8_t channel_map, uint8_t filter_policy); -typedef void (*f_gap_advertisements_set_params)(uint16_t adv_int_min, uint16_t adv_int_max, uint8_t adv_type, - uint8_t direct_address_typ, bd_addr_t direct_address, uint8_t channel_map, uint8_t filter_policy); -#define gap_advertisements_set_params ((f_gap_advertisements_set_params)(0x00012571)) - - -/** - * @brief Enable/Disable Advertisements - * @param enabled - */ -// void gap_advertisements_enable(int enabled); -typedef void (*f_gap_advertisements_enable)(int enabled); -#define gap_advertisements_enable ((f_gap_advertisements_enable)(0x000124f9)) - - -/** - * @brief Set Scan Response Data - * - * @note For scan response data, scannable undirected advertising (ADV_SCAN_IND) need to be used - * - * @param advertising_data_length - * @param advertising_data (max 31 octets) - * @note data is not copied, pointer has to stay valid - */ -// void gap_scan_response_set_data(uint8_t scan_response_data_length, uint8_t * scan_response_data); -typedef void (*f_gap_scan_response_set_data)(uint8_t scan_response_data_length, uint8_t * scan_response_data); -#define gap_scan_response_set_data ((f_gap_scan_response_set_data)(0x00012f95)) - -// void ble_gap_set_whitelist(bd_addr_t address,bd_addr_type_t addtype); -typedef void (*f_ble_gap_set_whitelist)(bd_addr_t address,bd_addr_type_t addtype); -#define ble_gap_set_whitelist ((f_ble_gap_set_whitelist)(0x00008939)) - -// void ble_gap_remove_whitelist(bd_addr_t address,bd_addr_type_t addtype); -typedef void (*f_ble_gap_remove_whitelist)(bd_addr_t address,bd_addr_type_t addtype); -#define ble_gap_remove_whitelist ((f_ble_gap_remove_whitelist)(0x00008925)) - - -// app_timer_source_t* btstack_memory_dtbt_app_timer_get(void); -typedef app_timer_source_t* (*f_btstack_memory_dtbt_app_timer_get)(void); -// WARNING: this API is not available in this release -#define btstack_memory_dtbt_app_timer_get ((f_btstack_memory_dtbt_app_timer_get)(btstack_memory_dtbt_app_timer_get)) - -// void btstack_memory_dtbt_app_timer_free(app_timer_source_t *dtbt_app_timer); -typedef void (*f_btstack_memory_dtbt_app_timer_free)(app_timer_source_t *dtbt_app_timer); -#define btstack_memory_dtbt_app_timer_free ((f_btstack_memory_dtbt_app_timer_free)(0x0000e67d)) - -// uint8_t app_funregister(APP_TimerExpFun funaddr); -typedef uint8_t (*f_app_funregister)(APP_TimerExpFun funaddr); -#define app_funregister ((f_app_funregister)(0x00006995)) - - -//for customer timer API. -// void app_OS_Timer(TimerHandle_t xTimer); -typedef void (*f_app_OS_Timer)(TimerHandle_t xTimer); -#define app_OS_Timer ((f_app_OS_Timer)(0x000068b5)) - -// void app_set_timer(app_timer_source_t *a,uint32_t timerid, uint32_t timeout_in_ms,uint8_t opt); -typedef void (*f_app_set_timer)(app_timer_source_t *a,uint32_t timerid, uint32_t timeout_in_ms,uint8_t opt); -#define app_set_timer ((f_app_set_timer)(0x00007281)) - -// void app_timer_delete(app_timer_source_t *a); -typedef void (*f_app_timer_delete)(app_timer_source_t *a); -#define app_timer_delete ((f_app_timer_delete)(0x000072dd)) - -// void app_add_timer(app_timer_source_t *ts); -typedef void (*f_app_add_timer)(app_timer_source_t *ts); -#define app_add_timer ((f_app_add_timer)(0x00006979)) - -// void reverse_bd_addr(const bd_addr_t src, bd_addr_t dest); -typedef void (*f_reverse_bd_addr)(const bd_addr_t src, bd_addr_t dest); -#define reverse_bd_addr ((f_reverse_bd_addr)(0x0003387b)) - -#if (BLE50_ENABLED) -// uint8_t gap_LE_read_phy(uint16_t connecton_handler); -typedef uint8_t (*f_gap_LE_read_phy)(uint16_t connecton_handler); -// WARNING: this API is not available in this release -#define gap_LE_read_phy ((f_gap_LE_read_phy)(gap_LE_read_phy)) - -// uint8_t gap_LE_set_def_phy(uint8_t ALL_PHYS,uint8_t TX_PHYS ,uint8_t RX_PHYS); -typedef uint8_t (*f_gap_LE_set_def_phy)(uint8_t ALL_PHYS,uint8_t TX_PHYS ,uint8_t RX_PHYS); -// WARNING: this API is not available in this release -#define gap_LE_set_def_phy ((f_gap_LE_set_def_phy)(gap_LE_set_def_phy)) - -// uint8_t gap_LE_set_phy(uint16_t con_handle,uint8_t all_phys,uint8_t tx_phys,uint8_t rx_phys,uint8_t phy_opt); -typedef uint8_t (*f_gap_LE_set_phy)(uint16_t con_handle,uint8_t all_phys,uint8_t tx_phys,uint8_t rx_phys,uint8_t phy_opt); -// WARNING: this API is not available in this release -#define gap_LE_set_phy ((f_gap_LE_set_phy)(gap_LE_set_phy)) - -// uint8_t gap_LE_Advertising_Set_Random_Address(uint8_t con_handle,bd_addr_t random_addr); -typedef uint8_t (*f_gap_LE_Advertising_Set_Random_Address)(uint8_t con_handle,bd_addr_t random_addr); -// WARNING: this API is not available in this release -#define gap_LE_Advertising_Set_Random_Address ((f_gap_LE_Advertising_Set_Random_Address)(gap_LE_Advertising_Set_Random_Address)) - -// uint8_t gap_LE_set_ext_scan_para(bd_addr_type_t,uint8_t filter,phy_bittype_t phys,scan_type_t scan_type, uint16_t scan_interval, uint16_t scan_window,...); -typedef uint8_t (*f_gap_LE_set_ext_scan_para)(bd_addr_type_t,uint8_t filter,phy_bittype_t phys,scan_type_t scan_type, uint16_t scan_interval, uint16_t scan_window,...); -// WARNING: this API is not available in this release -#define gap_LE_set_ext_scan_para ((f_gap_LE_set_ext_scan_para)(gap_LE_set_ext_scan_para)) - -// uint8_t gap_LE_ext_scan_response_set_data(uint8_t ad_handle,uint16_t scan_response_data_length, uint8_t * scan_response_data); -typedef uint8_t (*f_gap_LE_ext_scan_response_set_data)(uint8_t ad_handle,uint16_t scan_response_data_length, uint8_t * scan_response_data); -// WARNING: this API is not available in this release -#define gap_LE_ext_scan_response_set_data ((f_gap_LE_ext_scan_response_set_data)(gap_LE_ext_scan_response_set_data)) - -// uint8_t gap_LE_set_ext_scan_enable(uint8_t enable,uint8_t filter,uint16_t duration, uint16_t period ); -typedef uint8_t (*f_gap_LE_set_ext_scan_enable)(uint8_t enable,uint8_t filter,uint16_t duration, uint16_t period ); -// WARNING: this API is not available in this release -#define gap_LE_set_ext_scan_enable ((f_gap_LE_set_ext_scan_enable)(gap_LE_set_ext_scan_enable)) - -// uint8_t gap_LE_set_ext_adv_enable(uint8_t enable,uint8_t numberofset,...); -typedef uint8_t (*f_gap_LE_set_ext_adv_enable)(uint8_t enable,uint8_t numberofset,...); -// WARNING: this API is not available in this release -#define gap_LE_set_ext_adv_enable ((f_gap_LE_set_ext_adv_enable)(gap_LE_set_ext_adv_enable)) - -// uint8_t gap_LE_set_ext_adv_para(uint8_t,Advertising_Event_Properties_t Advertising_Event_Properties,uint32_t Primary_Advertising_Interval_Min,uint32_t Primary_Advertising_Interval_Max,uint8_t Primary_Advertising_Channel_Map, -// bd_addr_type_t Own_Address_Type,bd_addr_type_t Peer_Address_Type, bd_addr_t Peer_Address,uint8_t Advertising_Filter_Policy, int8_t Advertising_Tx_Power,phy_type_t Primary_Advertising_PHY, -// uint8_t Secondary_Advertising_Max_Skip, phy_type_t Secondary_Advertising_PHY,uint8_t Advertising_SID,uint8_t Scan_Request_Notification_Enable); -typedef uint8_t (*f_gap_LE_set_ext_adv_para)(uint8_t,Advertising_Event_Properties_t Advertising_Event_Properties,uint32_t Primary_Advertising_Interval_Min,uint32_t Primary_Advertising_Interval_Max,uint8_t Primary_Advertising_Channel_Map, - bd_addr_type_t Own_Address_Type,bd_addr_type_t Peer_Address_Type, bd_addr_t Peer_Address,uint8_t Advertising_Filter_Policy, int8_t Advertising_Tx_Power,phy_type_t Primary_Advertising_PHY, - uint8_t Secondary_Advertising_Max_Skip, phy_type_t Secondary_Advertising_PHY,uint8_t Advertising_SID,uint8_t Scan_Request_Notification_Enable); -// WARNING: this API is not available in this release -#define gap_LE_set_ext_adv_para ((f_gap_LE_set_ext_adv_para)(gap_LE_set_ext_adv_para)) - -// uint8_t gap_LE_set_ext_adv_data(uint8_t Advertising_Handle,uint16_t Data_Length,uint8_t* data); -typedef uint8_t (*f_gap_LE_set_ext_adv_data)(uint8_t Advertising_Handle,uint16_t Data_Length,uint8_t* data); -// WARNING: this API is not available in this release -#define gap_LE_set_ext_adv_data ((f_gap_LE_set_ext_adv_data)(gap_LE_set_ext_adv_data)) - -// uint8_t gap_LE_set_period_adv_data(uint8_t Advertising_Handle,uint16_t data_len,uint8_t* data); -typedef uint8_t (*f_gap_LE_set_period_adv_data)(uint8_t Advertising_Handle,uint16_t data_len,uint8_t* data); -// WARNING: this API is not available in this release -#define gap_LE_set_period_adv_data ((f_gap_LE_set_period_adv_data)(gap_LE_set_period_adv_data)) - -// uint8_t gap_LE_set_period_adv_enable(uint8_t enable,uint8_t adv_handle); //return handler -typedef uint8_t (*f_gap_LE_set_period_adv_enable)(uint8_t enable,uint8_t adv_handle); //return handler -// WARNING: this API is not available in this release -#define gap_LE_set_period_adv_enable ((f_gap_LE_set_period_adv_enable)(gap_LE_set_period_adv_enable)) - -// uint8_t gap_LE_set_period_adv_para(uint8_t adv_handle,uint8_t Periodic_Advertising_Interval_Min,uint8_t Periodic_Advertising_Interval_Max,Periodic_Advertising_Properties_t Periodic_Advertising_Properties); -typedef uint8_t (*f_gap_LE_set_period_adv_para)(uint8_t adv_handle,uint8_t Periodic_Advertising_Interval_Min,uint8_t Periodic_Advertising_Interval_Max,Periodic_Advertising_Properties_t Periodic_Advertising_Properties); -// WARNING: this API is not available in this release -#define gap_LE_set_period_adv_para ((f_gap_LE_set_period_adv_para)(gap_LE_set_period_adv_para)) - -// uint8_t gap_LE_clr_advset(void); -typedef uint8_t (*f_gap_LE_clr_advset)(void); -// WARNING: this API is not available in this release -#define gap_LE_clr_advset ((f_gap_LE_clr_advset)(gap_LE_clr_advset)) - -// uint8_t gap_LE_remove_advset(uint8_t adv_handle); -typedef uint8_t (*f_gap_LE_remove_advset)(uint8_t adv_handle); -// WARNING: this API is not available in this release -#define gap_LE_remove_advset ((f_gap_LE_remove_advset)(gap_LE_remove_advset)) - -// uint8_t gap_LE_read_max_adv_data_len(void); -typedef uint8_t (*f_gap_LE_read_max_adv_data_len)(void); -// WARNING: this API is not available in this release -#define gap_LE_read_max_adv_data_len ((f_gap_LE_read_max_adv_data_len)(gap_LE_read_max_adv_data_len)) - -// uint8_t gap_LE_period_adv_create_sync(uint8_t Filter_Policy,uint8_t Advertising_SID,uint8_t Advertiser_Address_Type,bd_addr_t Advertiser_Address,uint16_t Skip,uint16_t Sync_Timeout,uint8_t reseved); -typedef uint8_t (*f_gap_LE_period_adv_create_sync)(uint8_t Filter_Policy,uint8_t Advertising_SID,uint8_t Advertiser_Address_Type,bd_addr_t Advertiser_Address,uint16_t Skip,uint16_t Sync_Timeout,uint8_t reseved); -// WARNING: this API is not available in this release -#define gap_LE_period_adv_create_sync ((f_gap_LE_period_adv_create_sync)(gap_LE_period_adv_create_sync)) - -// uint8_t gap_LE_period_adv_create_sync_cancel(void); -typedef uint8_t (*f_gap_LE_period_adv_create_sync_cancel)(void); -// WARNING: this API is not available in this release -#define gap_LE_period_adv_create_sync_cancel ((f_gap_LE_period_adv_create_sync_cancel)(gap_LE_period_adv_create_sync_cancel)) - -// uint8_t gap_LE_period_adv_term_sync(uint16_t sync_handle); -typedef uint8_t (*f_gap_LE_period_adv_term_sync)(uint16_t sync_handle); -// WARNING: this API is not available in this release -#define gap_LE_period_adv_term_sync ((f_gap_LE_period_adv_term_sync)(gap_LE_period_adv_term_sync)) - -// uint8_t gap_LE_ADD_DEV_TO_PERIOD_list(uint8_t address_type,bd_addr_t address,uint8_t SID); -typedef uint8_t (*f_gap_LE_ADD_DEV_TO_PERIOD_list)(uint8_t address_type,bd_addr_t address,uint8_t SID); -// WARNING: this API is not available in this release -#define gap_LE_ADD_DEV_TO_PERIOD_list ((f_gap_LE_ADD_DEV_TO_PERIOD_list)(gap_LE_ADD_DEV_TO_PERIOD_list)) - -// uint8_t gap_LE_clr_period_adv_list(void); -typedef uint8_t (*f_gap_LE_clr_period_adv_list)(void); -// WARNING: this API is not available in this release -#define gap_LE_clr_period_adv_list ((f_gap_LE_clr_period_adv_list)(gap_LE_clr_period_adv_list)) - -// uint8_t gap_LE_read_period_adv_list_size(void); -typedef uint8_t (*f_gap_LE_read_period_adv_list_size)(void); -// WARNING: this API is not available in this release -#define gap_LE_read_period_adv_list_size ((f_gap_LE_read_period_adv_list_size)(gap_LE_read_period_adv_list_size)) - -// uint8_t gap_LE_ext_create_connection(uint8_t Initiator_Filter_Policy,bd_addr_type_t Own_Address_Type,bd_addr_type_t Peer_Address_Type,bd_addr_t Peer_Address,phy_bittype_t Initiating_PHYs, -// /*uint16_t scan_int,uint16_t scan_win,uint16_t conn_int_min,uint16_t conn_int_max,uint16_t conn_latency, uint16_t supp_tmo, uint16_t min_ce_len, uint16_t max_ce_len,*/...); -typedef uint8_t (*f_gap_LE_ext_create_connection)(uint8_t Initiator_Filter_Policy,bd_addr_type_t Own_Address_Type,bd_addr_type_t Peer_Address_Type,bd_addr_t Peer_Address,phy_bittype_t Initiating_PHYs, - /*uint16_t scan_int,uint16_t scan_win,uint16_t conn_int_min,uint16_t conn_int_max,uint16_t conn_latency, uint16_t supp_tmo, uint16_t min_ce_len, uint16_t max_ce_len,*/...); -// WARNING: this API is not available in this release -#define gap_LE_ext_create_connection ((f_gap_LE_ext_create_connection)(gap_LE_ext_create_connection)) - -// uint8_t gap_LE_set_host_channel_classification(uint32_t channel_low, uint8_t channel_high); -typedef uint8_t (*f_gap_LE_set_host_channel_classification)(uint32_t channel_low, uint8_t channel_high); -// WARNING: this API is not available in this release -#define gap_LE_set_host_channel_classification ((f_gap_LE_set_host_channel_classification)(gap_LE_set_host_channel_classification)) - - -#endif - - -/** - * @brief Sets update period for random address - * @param period_ms in ms - */ -// void gap_random_address_set_update_period(int period_ms); -typedef void (*f_gap_random_address_set_update_period)(int period_ms); -#define gap_random_address_set_update_period ((f_gap_random_address_set_update_period)(0x00012dd1)) - - - -/** - * @brief Request an update of the connection parameter for a given LE connection - * @param handle - * @param conn_interval_min (unit: 1.25ms) - * @param conn_interval_max (unit: 1.25ms) - * @param conn_latency - * @param supervision_timeout (unit: 10ms) - * @returns 0 if ok - */ -// int gap_request_connection_parameter_update(hci_con_handle_t con_handle, uint16_t conn_interval_min, -// uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout); -typedef int (*f_gap_request_connection_parameter_update)(hci_con_handle_t con_handle, uint16_t conn_interval_min, - uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout); -// WARNING: this API is not available in this release -#define gap_request_connection_parameter_update ((f_gap_request_connection_parameter_update)(gap_request_connection_parameter_update)) - - -/** - * @brief Updates the connection parameters for a given LE connection - * @param handle - * @param conn_interval_min (unit: 1.25ms) - * @param conn_interval_max (unit: 1.25ms) - * @param conn_latency - * @param supervision_timeout (unit: 10ms) - * @returns 0 if ok - */ -// int gap_update_connection_parameters(hci_con_handle_t con_handle, uint16_t conn_interval_min, -// uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout); -typedef int (*f_gap_update_connection_parameters)(hci_con_handle_t con_handle, uint16_t conn_interval_min, - uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout); -#define gap_update_connection_parameters ((f_gap_update_connection_parameters)(0x000131dd)) - - -/** - * @brief Set accepted connection parameter range - * @param range - */ -// void gap_get_connection_parameter_range(le_connection_parameter_range_t * range); -typedef void (*f_gap_get_connection_parameter_range)(le_connection_parameter_range_t * range); -#define gap_get_connection_parameter_range ((f_gap_get_connection_parameter_range)(0x00012acd)) - - -/** - * @brief Get accepted connection parameter range - * @param range - */ -// void gap_set_connection_parameter_range(le_connection_parameter_range_t * range); -typedef void (*f_gap_set_connection_parameter_range)(le_connection_parameter_range_t * range); -#define gap_set_connection_parameter_range ((f_gap_set_connection_parameter_range)(0x00013025)) - - - -//HCI func interface - -/** - * @brief Add event packet handler. - */ -// void hci_add_event_handler(btstack_packet_callback_registration_t * callback_handler); -typedef void (*f_hci_add_event_handler)(btstack_packet_callback_registration_t * callback_handler); -#define hci_add_event_handler ((f_hci_add_event_handler)(0x00017b5d)) - - -/** - * @brief Registers a packet handler for ACL data. Used by L2CAP - */ -// void hci_register_acl_packet_handler(btstack_packet_handler_t handler); -typedef void (*f_hci_register_acl_packet_handler)(btstack_packet_handler_t handler); -#define hci_register_acl_packet_handler ((f_hci_register_acl_packet_handler)(0x00018c75)) - - -/** - * @brief Requests the change of BTstack power mode. - */ -// int hci_power_control(HCI_POWER_MODE mode); -typedef int (*f_hci_power_control)(HCI_POWER_MODE mode); -#define hci_power_control ((f_hci_power_control)(0x00018acd)) - - -#if defined __cplusplus -} -#endif - -#endif diff --git a/bundles/mesh/inc/gatt_client.h b/bundles/mesh/inc/gatt_client.h deleted file mode 100644 index 36336a7e6..000000000 --- a/bundles/mesh/inc/gatt_client.h +++ /dev/null @@ -1,440 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef _GATT_CLIENT_H -#define _GATT_CLIENT_H - -#include -#include "bluetooth.h" -#include "bt_types.h" -#include "btstack_util.h" -#include "btstack_event.h" -#include "btstack_linked_list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - uint16_t start_group_handle; - uint16_t end_group_handle; - uint16_t uuid16; - uint8_t uuid128[16]; -} gatt_client_service_t; - -typedef struct { - uint16_t start_handle; - uint16_t value_handle; - uint16_t end_handle; - uint16_t properties; - uint16_t uuid16; - uint8_t uuid128[16]; -} gatt_client_characteristic_t; - -typedef struct { - uint16_t handle; - uint16_t uuid16; - uint8_t uuid128[16]; -} gatt_client_characteristic_descriptor_t; - -/** - * @brief Discovers all primary services. For each found service, an le_service_event_t with type set to GATT_EVENT_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t, with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -uint8_t gatt_client_discover_primary_services(user_packet_handler_t callback, hci_con_handle_t con_handle); - -/** - * @brief Discovers a specific primary service given its UUID. This service may exist multiple times. For each found service, an le_service_event_t with type set to GATT_EVENT_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t, with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -uint8_t gatt_client_discover_primary_services_by_uuid16(user_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t uuid16); -uint8_t gatt_client_discover_primary_services_by_uuid128(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint8_t * uuid128); -uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); - -/** - * @brief Finds included services within the specified service. For each found included service, an le_service_event_t with type set to GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. Information about included service type (primary/secondary) can be retrieved either by sending an ATT find information request for the returned start group handle (returning the handle and the UUID for primary or secondary service) or by comparing the service to the list of all primary services. - */ -uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); - - -/** - * @brief The following four functions are used to discover all characteristics within the specified service or handle range, and return those that match the given UUID. For each found characteristic, an le_characteristic_event_t with type set to GATT_EVENT_CHARACTERISTIC_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid16(btstack_packet_handler_t callback, - const hci_con_handle_t con_handle, const uint16_t start_handle, const uint16_t end_handle, const uint16_t uuid16); -uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid128(btstack_packet_handler_t callback, - const hci_con_handle_t con_handle, const uint16_t start_handle, const uint16_t end_handle, - const uint8_t * uuid128); -uint8_t gatt_client_discover_characteristics_for_service_by_uuid16 (btstack_packet_handler_t callback, - const hci_con_handle_t con_handle, gatt_client_service_t *service, - const uint16_t uuid16); -uint8_t gatt_client_discover_characteristics_for_service_by_uuid128(btstack_packet_handler_t callback, - const hci_con_handle_t con_handle, gatt_client_service_t *service, const uint8_t * uuid128); - -/** - * @brief Discovers attribute handle and UUID of a characteristic descriptor within the specified characteristic. For each found descriptor, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -uint8_t gatt_client_discover_characteristic_descriptors(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); - -/** - * @brief Reads the characteristic value using the characteristic's value handle. If the characteristic value is found, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -uint8_t gatt_client_read_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); - -/** - * @brief Reads the characteric value of all characteristics with the uuid. For each found, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -uint8_t gatt_client_read_value_of_characteristics_by_uuid16(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint16_t uuid16); -uint8_t gatt_client_read_value_of_characteristics_by_uuid128(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint8_t * uuid128); - -/** - * @brief Reads the long characteristic value using the characteristic's value handle. The value will be returned in several blobs. For each blob, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT and updated value offset will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, mark the end of read. - */ -uint8_t gatt_client_read_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); -uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset); - -/* - * @brief Read multiple characteristic values - * @param number handles - * @param list_of_handles list of handles - */ -uint8_t gatt_client_read_multiple_characteristic_values(btstack_packet_handler_t callback, hci_con_handle_t con_handle, int num_value_handles, uint16_t * value_handles); - -/** - * @brief Writes the characteristic value using the characteristic's value handle without an acknowledgment that the write was successfully performed. - */ -uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); - -/** - * @brief Writes the authenticated characteristic value using the characteristic's value handle without an acknowledgment that the write was successfully performed. - */ -uint8_t gatt_client_signed_write_without_response(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t handle, uint16_t message_len, uint8_t * message); - -/** - * @brief Writes the characteristic value using the characteristic's value handle. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of write. The write is successfully performed, if the event's status field is set to 0. - */ -uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_long_value_of_characteristic_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset, uint16_t length, uint8_t * data); - -/** - * @brief Writes of the long characteristic value using the characteristic's value handle. It uses server response to validate that the write was correctly received. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE marks the end of write. The write is successfully performed, if the event's status field is set to 0. - */ -uint8_t gatt_client_reliable_write_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); - -/** - * @brief Reads the characteristic descriptor using its handle. If the characteristic descriptor is found, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -uint8_t gatt_client_read_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); -uint8_t gatt_client_read_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); - -/** - * @brief Reads the long characteristic descriptor using its handle. It will be returned in several blobs. For each blob, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -uint8_t gatt_client_read_long_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); -uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); -uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset); - -/** - * @brief Writes the characteristic descriptor using its handle. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of write. The write is successfully performed, if the event's status field is set to 0. - */ -uint8_t gatt_client_write_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_long_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset, uint16_t length, uint8_t * data); - -/** - * @brief Writes the client characteristic configuration of the specified characteristic. It is used to subscribe for notifications or indications of the characteristic value. For notifications or indications specify: GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION resp. GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION as configuration value. - */ -uint8_t gatt_client_write_client_characteristic_configuration(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic, uint16_t configuration); - - -/** - * @brief -> gatt complete event - */ -uint8_t gatt_client_prepare_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint16_t length, uint8_t * data); - -/** - * @brief -> gatt complete event - */ -uint8_t gatt_client_execute_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle); - -/** - * @brief -> gatt complete event - */ -uint8_t gatt_client_cancel_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle); -void gatt_client_deserialize_service(const uint8_t *packet, int offset, gatt_client_service_t *service); -void gatt_client_deserialize_characteristic(const uint8_t * packet, int offset, gatt_client_characteristic_t * characteristic); -void gatt_client_deserialize_characteristic_descriptor(const uint8_t * packet, int offset, gatt_client_characteristic_descriptor_t * descriptor); - -int ble_gatts_find_svc(const ble_uuid_t *uuid, uint16_t *out_handle); -int ble_gatts_find_chr(uint16_t srv_handle, const ble_uuid_t *uuid,uint16_t *out_att_chr); - -typedef struct gatt_client_notification { - btstack_linked_item_t item; - btstack_packet_handler_t callback; - uint16_t attribute_handle; -} gatt_client_notification_t; - -/** - * @brief MTU is available after the first query has completed. If status is equal to 0, it returns the real value, otherwise the default value of 23. - */ -uint8_t gatt_client_get_mtu(hci_con_handle_t con_handle, uint16_t * mtu); - -/** - * @brief Returns if the GATT client is ready to receive a query. It is used with daemon. - */ -int gatt_client_is_ready(hci_con_handle_t con_handle); - -/** - * @brief Register for notifications and indications of a characteristic enabled by gatt_client_write_client_characteristic_configuration - * @param notification struct used to store registration - * @param packet_handler - * @param con_handle - * @param characteristic - */ -void gatt_client_listen_for_characteristic_value_updates(gatt_client_notification_t * notification, btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic); - -/** - * @brief Register for general events - * @param handler - */ -void gatt_client_register_handler(btstack_packet_handler_t handler); - -// only used for testing -void gatt_client_pts_suppress_mtu_exchange(void); - -#pragma pack(push, 1) - -typedef struct -{ - uint16_t handle; - uint8_t value[0]; // length is given in `value_size` -} gatt_event_value_packet_t; - -typedef struct -{ - uint16_t handle; - uint16_t offset; - uint8_t value[0]; // length is given in `value_size` -} gatt_event_long_value_packet_t; - -#pragma pack(pop) - -/** - * @brief Get field handle from event GATT_EVENT_QUERY_COMPLETE - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_query_complete_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field status from event GATT_EVENT_QUERY_COMPLETE - * @param event packet - * @return status - * @note: btstack_type 1 - */ -static __INLINE uint8_t gatt_event_query_complete_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); -} - -/** - * @brief Get field handle from event GATT_EVENT_SERVICE_QUERY_RESULT - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_service_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field service from event GATT_EVENT_SERVICE_QUERY_RESULT - * @param event packet - * @param Pointer to storage for service - * @note: btstack_type X - */ -static __INLINE void gatt_event_service_query_result_get_service(const uint8_t * event, gatt_client_service_t * service){ - gatt_client_deserialize_service(event, 4, service); -} - -/** - * @brief Get field handle from event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_characteristic_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field characteristic from event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT - * @param event packet - * @param Pointer to storage for characteristic - * @note: btstack_type Y - */ -static __INLINE void gatt_event_characteristic_query_result_get_characteristic(const uint8_t * event, gatt_client_characteristic_t * characteristic){ - gatt_client_deserialize_characteristic(event, 4, characteristic); -} - -/** - * @brief Get field handle from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_included_service_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field include_handle from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT - * @param event packet - * @return include_handle - * @note: btstack_type 2 - */ -static __INLINE uint16_t gatt_event_included_service_query_result_get_include_handle(const uint8_t * event){ - return little_endian_read_16(event, 4); -} -/** - * @brief Get field service from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT - * @param event packet - * @param Pointer to storage for service - * @note: btstack_type X - */ -static __INLINE void gatt_event_included_service_query_result_get_service(const uint8_t * event, gatt_client_service_t * service){ - gatt_client_deserialize_service(event, 6, service); -} - -/** - * @brief Get field handle from event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_all_characteristic_descriptors_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field characteristic_descriptor from event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT - * @param event packet - * @param Pointer to storage for characteristic_descriptor - * @note: btstack_type Z - */ -static __INLINE void gatt_event_all_characteristic_descriptors_query_result_get_characteristic_descriptor(const uint8_t * event, gatt_client_characteristic_descriptor_t * characteristic_descriptor){ - gatt_client_deserialize_characteristic_descriptor(event, 4, characteristic_descriptor); -} - -/** - * @brief Get value from event GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT - * @param[in] event packet - * @param[in] event_size - * @param[out] value_size - * @return gatt_event_value_packet_t * - */ -static __INLINE const gatt_event_long_value_packet_t * gatt_event_long_characteristic_value_query_result_parse(const uint8_t *event_packet, uint16_t event_size, uint16_t *value_size) -{ - *value_size = event_size - 1 - (uint16_t)sizeof(gatt_event_long_value_packet_t); - return decode_event_offset(event_packet, gatt_event_long_value_packet_t, 1); -} - -/** - * @brief Get value from event GATT_EVENT_NOTIFICATION - * @param[in] event packet - * @param[in] event_size - * @param[out] value_size - * @return gatt_event_value_packet_t * - */ -static __INLINE const gatt_event_value_packet_t * gatt_event_notification_parse(const uint8_t *event_packet, uint16_t event_size, uint16_t *value_size) -{ - *value_size = event_size - 1 - (uint16_t)sizeof(gatt_event_value_packet_t); - return decode_event_offset(event_packet, gatt_event_value_packet_t, 1); -} - -/** - * @brief Get value from event GATT_EVENT_INDICATION - * @param[in] event packet - * @param[in] event_size - * @param[out] value_size - * @return gatt_event_notification_t * - */ -static __INLINE const gatt_event_value_packet_t * gatt_event_indication_parse(const uint8_t *event_packet, uint16_t event_size, uint16_t *value_size) -{ - *value_size = event_size - 1 - (uint16_t)sizeof(gatt_event_value_packet_t); - return decode_event_offset(event_packet, gatt_event_value_packet_t, 1); -} - -/** - * @brief Get value from event GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT - * @param[in] event packet - * @param[in] event_size - * @param[out] value_size - * @return gatt_event_notification_t * - */ -static __INLINE const gatt_event_value_packet_t * gatt_event_characteristic_value_query_result_parse(const uint8_t *event_packet, uint16_t event_size, uint16_t *value_size) -{ - *value_size = event_size - 1 - (uint16_t)sizeof(gatt_event_value_packet_t); - return decode_event_offset(event_packet, gatt_event_value_packet_t, 1); -} - -/** - * @brief Get value from event GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT - * @param[in] event packet - * @param[in] event_size - * @param[out] value_size - * @return gatt_event_notification_t * - */ -static __INLINE const gatt_event_value_packet_t * gatt_event_characteristic_descriptor_query_result_parse(const uint8_t *event_packet, uint16_t event_size, uint16_t *value_size) -{ - *value_size = event_size - 1 - (uint16_t)sizeof(gatt_event_value_packet_t); - return decode_event_offset(event_packet, gatt_event_value_packet_t, 1); -} - -/** - * @brief Get value from event GATT_EVENT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT - * @param[in] event packet - * @param[in] event_size - * @param[out] value_size - * @return gatt_event_value_packet_t * - */ -static __INLINE const gatt_event_long_value_packet_t * gatt_event_long_characteristic_descriptor_query_result_parse(const uint8_t *event_packet, uint16_t event_size, uint16_t *value_size) -{ - *value_size = event_size - 1 - (uint16_t)sizeof(gatt_event_long_value_packet_t); - return decode_event_offset(event_packet, gatt_event_long_value_packet_t, 1); -} - -/** - * @brief Get field handle from event GATT_EVENT_MTU - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_mtu_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field MTU from event GATT_EVENT_MTU - * @param event packet - * @return MTU - * @note: btstack_type 2 - */ -static __INLINE uint16_t gatt_event_mtu_get_mtu(const uint8_t * event){ - return little_endian_read_16(event, 4); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bundles/mesh/inc/gatt_external.h b/bundles/mesh/inc/gatt_external.h deleted file mode 100644 index dbb88382a..000000000 --- a/bundles/mesh/inc/gatt_external.h +++ /dev/null @@ -1,403 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- -// Design Information -// ---------------------------------------------------------------------------- -// -// File : gatt_external.h -// -// Author : YiyunDeng -// -// Organisation : INGCHIPS -// -// Date : 2019-03-01 -// -// Revision : v0.1 -// -// Project : ING91800 -// -// Description : -// -// ---------------------------------------------------------------------------- -// Revision History -// ---------------------------------------------------------------------------- -// -// Date Author Revision Change Description -// ========== =============== ========= ======================================= -// 2019/03/01 Dengyiyun v0.1 Creat -// -// ---------------------------------------------------------------------------- - -#ifndef __GATT_EXTERNAL_H -#define __GATT_EXTERNAL_H - -#include -#include "bt_types.h" -#include "ble_uuid.h" -/* API_START */ - -typedef struct { - uint16_t handle; - uint16_t uuid16; - uint8_t uuid128[16]; -} gatt_client_characteristic_descriptor_t; - -// ATT Client Read Callback for Dynamic Data -// - if buffer == NULL, don't copy data, just return size of value -// - if buffer != NULL, copy data and return number bytes copied -// @param con_handle of hci le connection -// @param attribute_handle to be read -// @param offset defines start of attribute value -// @param buffer -// @param buffer_size -typedef uint16_t (*att_read_callback_t)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size); - -// ATT Client Write Callback for Dynamic Data -// @param con_handle of hci le connection -// @param attribute_handle to be written -// @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE -// @param offset into the value - used for queued writes and long attributes -// @param buffer -// @param buffer_size -// @param signature used for signed write commmands -// @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer -typedef int (*att_write_callback_t)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size); - -/* API_START */ -/* - * @brief setup ATT server - * @param db attribute database created by compile-gatt.ph - * @param read_callback, see att_db.h, can be NULL - * @param write_callback, see attl.h, can be NULL - */ -// void att_server_init(uint8_t const * db, att_read_callback_t read_callback, att_write_callback_t write_callback); -typedef void (*f_att_server_init)(uint8_t const * db, att_read_callback_t read_callback, att_write_callback_t write_callback); -#define att_server_init ((f_att_server_init)(0x00007ef1)) - - -/* - * @brief register packet handler for ATT server events: - * - ATT_EVENT_MTU_EXCHANGE_COMPLETE - * - ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE - * @param handler - */ -// void att_server_register_packet_handler(btstack_packet_handler_t handler); -typedef void (*f_att_server_register_packet_handler)(btstack_packet_handler_t handler); -#define att_server_register_packet_handler ((f_att_server_register_packet_handler)(0x00008031)) - - -/* - * @brief tests if a notification or indication can be send right now - * @param con_handle - * @return 1, if packet can be sent - */ -// int att_server_can_send_packet_now(hci_con_handle_t con_handle); -typedef int (*f_att_server_can_send_packet_now)(hci_con_handle_t con_handle); -#define att_server_can_send_packet_now ((f_att_server_can_send_packet_now)(0x00007e11)) - - -/** - * @brief Request emission of ATT_EVENT_CAN_SEND_NOW as soon as possible - * @note ATT_EVENT_CAN_SEND_NOW might be emitted during call to this function - * so packet handler should be ready to handle it - * @param con_handle - */ -// void att_server_request_can_send_now_event(hci_con_handle_t con_handle); -typedef void (*f_att_server_request_can_send_now_event)(hci_con_handle_t con_handle); -#define att_server_request_can_send_now_event ((f_att_server_request_can_send_now_event)(0x0000803d)) - - -/* - * @brief notify client about attribute value change - * @param con_handle - * @param attribute_handle - * @param value - * @param value_len - * @return 0 if ok, error otherwise - */ -// int att_server_notify(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); -typedef int (*f_att_server_notify)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); -#define att_server_notify ((f_att_server_notify)(0x00007f41)) - - -/* - * @brief indicate value change to client. client is supposed to reply with an indication_response - * @param con_handle - * @param attribute_handle - * @param value - * @param value_len - * @return 0 if ok, error otherwise - */ -// int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); -typedef int (*f_att_server_indicate)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); -#define att_server_indicate ((f_att_server_indicate)(0x00007e79)) - - -/* - * @brief emit a general event to att handler - * @param event - * @param length - * @return void - */ -// void att_emit_general_event(uint8_t *event, uint16_t length); -typedef void (*f_att_emit_general_event)(uint8_t *event, uint16_t length); -#define att_emit_general_event ((f_att_emit_general_event)(0x000075b5)) - - -/** - * @brief Discovers all primary services. For each found service, an le_service_event_t with type set to GATT_EVENT_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t, with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -// uint8_t gatt_client_discover_primary_services(user_packet_handler_t callback, hci_con_handle_t con_handle); -typedef uint8_t (*f_gatt_client_discover_primary_services)(user_packet_handler_t callback, hci_con_handle_t con_handle); -#define gatt_client_discover_primary_services ((f_gatt_client_discover_primary_services)(0x000138f9)) - - -/** - * @brief Discovers a specific primary service given its UUID. This service may exist multiple times. For each found service, an le_service_event_t with type set to GATT_EVENT_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t, with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -// uint8_t gatt_client_discover_primary_services_by_uuid16(user_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t uuid16); -typedef uint8_t (*f_gatt_client_discover_primary_services_by_uuid16)(user_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t uuid16); -#define gatt_client_discover_primary_services_by_uuid16 ((f_gatt_client_discover_primary_services_by_uuid16)(0x0001396f)) - -// uint8_t gatt_client_discover_primary_services_by_uuid128(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint8_t * uuid128); -typedef uint8_t (*f_gatt_client_discover_primary_services_by_uuid128)(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint8_t * uuid128); -#define gatt_client_discover_primary_services_by_uuid128 ((f_gatt_client_discover_primary_services_by_uuid128)(0x0001392b)) - -// uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); -typedef uint8_t (*f_gatt_client_discover_characteristics_for_service)(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); -#define gatt_client_discover_characteristics_for_service ((f_gatt_client_discover_characteristics_for_service)(0x000138a5)) - - -/** - * @brief Finds included services within the specified service. For each found included service, an le_service_event_t with type set to GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. Information about included service type (primary/secondary) can be retrieved either by sending an ATT find information request for the returned start group handle (returning the handle and the UUID for primary or secondary service) or by comparing the service to the list of all primary services. - */ -// uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); -typedef uint8_t (*f_gatt_client_find_included_services_for_service)(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); -#define gatt_client_find_included_services_for_service ((f_gatt_client_find_included_services_for_service)(0x000139d1)) - - - -/** - * @brief The following four functions are used to discover all characteristics within the specified service or handle range, and return those that match the given UUID. For each found characteristic, an le_characteristic_event_t with type set to GATT_EVENT_CHARACTERISTIC_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -// uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid16(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint16_t uuid16); -typedef uint8_t (*f_gatt_client_discover_characteristics_for_handle_range_by_uuid16)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint16_t uuid16); -#define gatt_client_discover_characteristics_for_handle_range_by_uuid16 ((f_gatt_client_discover_characteristics_for_handle_range_by_uuid16)(0x00013855)) - -// uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid128(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint8_t * uuid); -typedef uint8_t (*f_gatt_client_discover_characteristics_for_handle_range_by_uuid128)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint8_t * uuid); -#define gatt_client_discover_characteristics_for_handle_range_by_uuid128 ((f_gatt_client_discover_characteristics_for_handle_range_by_uuid128)(0x00013805)) - -// uint8_t gatt_client_discover_characteristics_for_service_by_uuid16 (btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service, uint16_t uuid16); -typedef uint8_t (*f_gatt_client_discover_characteristics_for_service_by_uuid16) (btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service, uint16_t uuid16); -#define gatt_client_discover_characteristics_for_service_by_uuid16 ((f_gatt_client_discover_characteristics_for_service_by_uuid16)(0x000138eb)) - -// uint8_t gatt_client_discover_characteristics_for_service_by_uuid128(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service, uint8_t * uuid128); -typedef uint8_t (*f_gatt_client_discover_characteristics_for_service_by_uuid128)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service, uint8_t * uuid128); -#define gatt_client_discover_characteristics_for_service_by_uuid128 ((f_gatt_client_discover_characteristics_for_service_by_uuid128)(0x000138dd)) - - -/** - * @brief Discovers attribute handle and UUID of a characteristic descriptor within the specified characteristic. For each found descriptor, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. - */ -// uint8_t gatt_client_discover_characteristic_descriptors(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -typedef uint8_t (*f_gatt_client_discover_characteristic_descriptors)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -#define gatt_client_discover_characteristic_descriptors ((f_gatt_client_discover_characteristic_descriptors)(0x000137c3)) - - -/** - * @brief Reads the characteristic value using the characteristic's value handle. If the characteristic value is found, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -// uint8_t gatt_client_read_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -typedef uint8_t (*f_gatt_client_read_value_of_characteristic)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -#define gatt_client_read_value_of_characteristic ((f_gatt_client_read_value_of_characteristic)(0x00013bfd)) - -// uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); -typedef uint8_t (*f_gatt_client_read_value_of_characteristic_using_value_handle)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); -#define gatt_client_read_value_of_characteristic_using_value_handle ((f_gatt_client_read_value_of_characteristic_using_value_handle)(0x00013c03)) - - -/** - * @brief Reads the characteric value of all characteristics with the uuid. For each found, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -// uint8_t gatt_client_read_value_of_characteristics_by_uuid16(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint16_t uuid16); -typedef uint8_t (*f_gatt_client_read_value_of_characteristics_by_uuid16)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint16_t uuid16); -#define gatt_client_read_value_of_characteristics_by_uuid16 ((f_gatt_client_read_value_of_characteristics_by_uuid16)(0x00013c7d)) - -// uint8_t gatt_client_read_value_of_characteristics_by_uuid128(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint8_t * uuid128); -typedef uint8_t (*f_gatt_client_read_value_of_characteristics_by_uuid128)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, uint16_t end_handle, uint8_t * uuid128); -#define gatt_client_read_value_of_characteristics_by_uuid128 ((f_gatt_client_read_value_of_characteristics_by_uuid128)(0x00013c31)) - - -/** - * @brief Reads the long characteristic value using the characteristic's value handle. The value will be returned in several blobs. For each blob, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT and updated value offset will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, mark the end of read. - */ -// uint8_t gatt_client_read_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -typedef uint8_t (*f_gatt_client_read_long_value_of_characteristic)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); -#define gatt_client_read_long_value_of_characteristic ((f_gatt_client_read_long_value_of_characteristic)(0x00013b91)) - -// uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); -typedef uint8_t (*f_gatt_client_read_long_value_of_characteristic_using_value_handle)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); -#define gatt_client_read_long_value_of_characteristic_using_value_handle ((f_gatt_client_read_long_value_of_characteristic_using_value_handle)(0x00013b99)) - -// uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset); -typedef uint8_t (*f_gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset); -#define gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset ((f_gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset)(0x00013b9f)) - - -/* - * @brief Read multiple characteristic values - * @param number handles - * @param list_of_handles list of handles - */ -// uint8_t gatt_client_read_multiple_characteristic_values(btstack_packet_handler_t callback, hci_con_handle_t con_handle, int num_value_handles, uint16_t * value_handles); -typedef uint8_t (*f_gatt_client_read_multiple_characteristic_values)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, int num_value_handles, uint16_t * value_handles); -#define gatt_client_read_multiple_characteristic_values ((f_gatt_client_read_multiple_characteristic_values)(0x00013bcd)) - - -/** - * @brief Writes the characteristic value using the characteristic's value handle without an acknowledgment that the write was successfully performed. - */ -// uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_value_of_characteristic_without_response)(hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -#define gatt_client_write_value_of_characteristic_without_response ((f_gatt_client_write_value_of_characteristic_without_response)(0x000143a9)) - - -/** - * @brief Writes the authenticated characteristic value using the characteristic's value handle without an acknowledgment that the write was successfully performed. - */ -// uint8_t gatt_client_signed_write_without_response(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t handle, uint16_t message_len, uint8_t * message); -typedef uint8_t (*f_gatt_client_signed_write_without_response)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t handle, uint16_t message_len, uint8_t * message); -#define gatt_client_signed_write_without_response ((f_gatt_client_signed_write_without_response)(0x00014145)) - - -/** - * @brief Writes the characteristic value using the characteristic's value handle. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of write. The write is successfully performed, if the event's status field is set to 0. - */ -// uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_value_of_characteristic)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -#define gatt_client_write_value_of_characteristic ((f_gatt_client_write_value_of_characteristic)(0x00014373)) - -// uint8_t gatt_client_write_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_long_value_of_characteristic)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -#define gatt_client_write_long_value_of_characteristic ((f_gatt_client_write_long_value_of_characteristic)(0x00014327)) - -// uint8_t gatt_client_write_long_value_of_characteristic_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_long_value_of_characteristic_with_offset)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset, uint16_t length, uint8_t * data); -#define gatt_client_write_long_value_of_characteristic_with_offset ((f_gatt_client_write_long_value_of_characteristic_with_offset)(0x00014337)) - - -/** - * @brief Writes of the long characteristic value using the characteristic's value handle. It uses server response to validate that the write was correctly received. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE marks the end of write. The write is successfully performed, if the event's status field is set to 0. - */ -// uint8_t gatt_client_reliable_write_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_reliable_write_long_value_of_characteristic)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, uint8_t * data); -#define gatt_client_reliable_write_long_value_of_characteristic ((f_gatt_client_reliable_write_long_value_of_characteristic)(0x00013cc7)) - - -/** - * @brief Reads the characteristic descriptor using its handle. If the characteristic descriptor is found, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -// uint8_t gatt_client_read_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); -typedef uint8_t (*f_gatt_client_read_characteristic_descriptor)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); -#define gatt_client_read_characteristic_descriptor ((f_gatt_client_read_characteristic_descriptor)(0x00013b25)) - -// uint8_t gatt_client_read_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); -typedef uint8_t (*f_gatt_client_read_characteristic_descriptor_using_descriptor_handle)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); -#define gatt_client_read_characteristic_descriptor_using_descriptor_handle ((f_gatt_client_read_characteristic_descriptor_using_descriptor_handle)(0x00013b2b)) - - -/** - * @brief Reads the long characteristic descriptor using its handle. It will be returned in several blobs. For each blob, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. - */ -// uint8_t gatt_client_read_long_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); -typedef uint8_t (*f_gatt_client_read_long_characteristic_descriptor)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); -#define gatt_client_read_long_characteristic_descriptor ((f_gatt_client_read_long_characteristic_descriptor)(0x00013b55)) - -// uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); -typedef uint8_t (*f_gatt_client_read_long_characteristic_descriptor_using_descriptor_handle)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); -#define gatt_client_read_long_characteristic_descriptor_using_descriptor_handle ((f_gatt_client_read_long_characteristic_descriptor_using_descriptor_handle)(0x00013b5d)) - -// uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset); -typedef uint8_t (*f_gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset); -#define gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset ((f_gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset)(0x00013b63)) - - -/** - * @brief Writes the characteristic descriptor using its handle. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of write. The write is successfully performed, if the event's status field is set to 0. - */ -// uint8_t gatt_client_write_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_characteristic_descriptor)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); -#define gatt_client_write_characteristic_descriptor ((f_gatt_client_write_characteristic_descriptor)(0x00014221)) - -// uint8_t gatt_client_write_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_characteristic_descriptor_using_descriptor_handle)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -#define gatt_client_write_characteristic_descriptor_using_descriptor_handle ((f_gatt_client_write_characteristic_descriptor_using_descriptor_handle)(0x0001422f)) - -// uint8_t gatt_client_write_long_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_long_characteristic_descriptor)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); -#define gatt_client_write_long_characteristic_descriptor ((f_gatt_client_write_long_characteristic_descriptor)(0x000142c9)) - -// uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_long_characteristic_descriptor_using_descriptor_handle)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -#define gatt_client_write_long_characteristic_descriptor_using_descriptor_handle ((f_gatt_client_write_long_characteristic_descriptor_using_descriptor_handle)(0x000142db)) - -// uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset, uint16_t length, uint8_t * data); -#define gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset ((f_gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset)(0x000142eb)) - - -/** - * @brief Writes the client characteristic configuration of the specified characteristic. It is used to subscribe for notifications or indications of the characteristic value. For notifications or indications specify: GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION resp. GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION as configuration value. - */ -// uint8_t gatt_client_write_client_characteristic_configuration(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic, uint16_t configuration); -typedef uint8_t (*f_gatt_client_write_client_characteristic_configuration)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic, uint16_t configuration); -#define gatt_client_write_client_characteristic_configuration ((f_gatt_client_write_client_characteristic_configuration)(0x00014269)) - - - -/** - * @brief -> gatt complete event - */ -// uint8_t gatt_client_prepare_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint16_t length, uint8_t * data); -typedef uint8_t (*f_gatt_client_prepare_write)(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint16_t length, uint8_t * data); -#define gatt_client_prepare_write ((f_gatt_client_prepare_write)(0x00013add)) - - -/** - * @brief -> gatt complete event - */ -// uint8_t gatt_client_execute_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle); -typedef uint8_t (*f_gatt_client_execute_write)(btstack_packet_handler_t callback, hci_con_handle_t con_handle); -#define gatt_client_execute_write ((f_gatt_client_execute_write)(0x000139ab)) - - -/** - * @brief -> gatt complete event - */ -// uint8_t gatt_client_cancel_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle); -typedef uint8_t (*f_gatt_client_cancel_write)(btstack_packet_handler_t callback, hci_con_handle_t con_handle); -#define gatt_client_cancel_write ((f_gatt_client_cancel_write)(0x000136f9)) - - -// int ble_gatts_find_svc(const ble_uuid_t *uuid, uint16_t *out_handle); -typedef int (*f_ble_gatts_find_svc)(const ble_uuid_t *uuid, uint16_t *out_handle); -#define ble_gatts_find_svc ((f_ble_gatts_find_svc)(0x00008a41)) - -// int ble_gatts_find_chr(uint16_t srv_handle, const ble_uuid_t *uuid,uint16_t *out_att_chr); -typedef int (*f_ble_gatts_find_chr)(uint16_t srv_handle, const ble_uuid_t *uuid,uint16_t *out_att_chr); -#define ble_gatts_find_chr ((f_ble_gatts_find_chr)(0x00008999)) - -// uint16_t ble_att_mtu(uint16_t conn_handle); -typedef uint16_t (*f_ble_att_mtu)(uint16_t conn_handle); -#define ble_att_mtu ((f_ble_att_mtu)(0x0000888d)) - -#endif diff --git a/bundles/mesh/inc/glue.h b/bundles/mesh/inc/glue.h deleted file mode 100644 index c2469c340..000000000 --- a/bundles/mesh/inc/glue.h +++ /dev/null @@ -1,1028 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef _MESH_GLUE_ -#define _MESH_GLUE_ - -#include -#include "gap.h" -#include "errno.h" - -#include "syscfg.h" - -#include "nimble_npl.h" - -#include "os_mbuf.h" -#include "queue.h" - -#include "ble.h" -#include "ble_hs_log.h" -// #include "ble_uuid.h" - -//#include "ble_sm_priv.h" -//#include "ble_hs_hci_priv.h" - - -#define BLE_GAP_EVENT_CONNECT 0 -#define BLE_GAP_EVENT_DISCONNECT 1 -/* Reserved 2 */ -#define BLE_GAP_EVENT_CONN_UPDATE 3 -#define BLE_GAP_EVENT_CONN_UPDATE_REQ 4 -#define BLE_GAP_EVENT_L2CAP_UPDATE_REQ 5 -#define BLE_GAP_EVENT_TERM_FAILURE 6 -#define BLE_GAP_EVENT_DISC 7 -#define BLE_GAP_EVENT_DISC_COMPLETE 8 -#define BLE_GAP_EVENT_ADV_COMPLETE 9 -#define BLE_GAP_EVENT_ENC_CHANGE 10 -#define BLE_GAP_EVENT_PASSKEY_ACTION 11 -#define BLE_GAP_EVENT_NOTIFY_RX 12 -#define BLE_GAP_EVENT_NOTIFY_TX 13 -#define BLE_GAP_EVENT_SUBSCRIBE 14 -#define BLE_GAP_EVENT_MTU 15 -#define BLE_GAP_EVENT_IDENTITY_RESOLVED 16 -#define BLE_GAP_EVENT_REPEAT_PAIRING 17 -#define BLE_GAP_EVENT_PHY_UPDATE_COMPLETE 18 -#define BLE_GAP_EVENT_EXT_DISC 19 -#define BLE_GAP_EVENT_PROXY 20 -#define BLE_MESH_APP_EVENT 21 -#define BLE_MESH_BEACON_STATE 22 -#define STACK_INIT_DONE 0xfe -#define ADV_TERM_CON 0xfc -#define u8_t uint8_t -#define s8_t int8_t -#define u16_t uint16_t -#define s16_t int16_t -#define u32_t uint32_t -#define u64_t uint64_t -#define s64_t int64_t -#define s32_t int32_t - -typedef struct { - uint8_t type; - uint8_t val[6]; -} ble_addr_t2; - -typedef struct advertising_report { - uint8_t type; - uint8_t event_type; - uint8_t address_type; - bd_addr_t address; - int8_t rssi; - uint8_t length; - const uint8_t * data; -} advertising_report_t; - -typedef struct ext_advertising_report { - uint8_t type; - uint16_t event_type; - bd_addr_type_t address_type; - bd_addr_t address; - uint8_t primary_phy; - uint8_t sec_phy; - uint8_t adv_sid; - int8_t tx_pwr; - int8_t rssi; - uint16_t PRD_ADV_INTER; - bd_addr_type_t direct_addr_type; - bd_addr_t Direct_Address; - uint8_t length; - const uint8_t * data; -} ext_advertising_report_t; - -typedef struct prd_advertising_report { - uint8_t type; - uint16_t Sync_Handle; - int8_t tx_pwr; - int8_t rssi; - uint8_t unused; - uint8_t status; - uint8_t length; - const uint8_t * data; -} prd_advertising_report_t; - -struct ble_gap_ext_adv_params { - unsigned int connectable:1; - unsigned int scannable:1; - unsigned int directed:1; - unsigned int high_duty_directed:1; - unsigned int legacy_pdu:1; - unsigned int anonymous:1; - unsigned int include_tx_power:1; - unsigned int scan_req_notif:1; - - uint32_t itvl_min; - uint32_t itvl_max; - uint8_t channel_map; - uint8_t own_addr_type; - ble_addr_t2 peer; - uint8_t filter_policy; - uint8_t primary_phy; - uint8_t secondary_phy; - int8_t tx_power; - uint8_t sid; -}; - -struct ble_gap_ext_disc_params { - uint16_t itvl; - uint16_t window; - uint8_t passive:1; -}; - -struct ble_gap_ext_disc_desc { - /*** Common fields. */ - uint8_t props; - uint8_t data_status; - uint8_t legacy_event_type; - ble_addr_t2 addr; - int8_t rssi; - uint8_t tx_power; - uint8_t sid; - uint8_t prim_phy; - uint8_t sec_phy; - uint8_t length_data; - uint8_t *data; - /*** - * LE direct advertising report fields; direct_addr is BLE_ADDR_ANY if - * direct address fields are not present. - */ - bd_addr_t direct_addr; -}; - -typedef enum { - GAP_CONNECTION_INVALID, - GAP_CONNECTION_ACL, - GAP_CONNECTION_LE -} gap_connection_type_t; - -typedef struct le_event_struct_head { - uint8_t event_code; - uint8_t total_len; -}le_event_struct_head_t; - -struct le_event_advset_Terminate{ - le_event_struct_head_t head; - uint8_t sub_event_code; - uint8_t status; - uint8_t adv_handle; - uint16_t conn_handle; - uint8_t num_events; -}; - -struct ble_gap_disc_params { - uint16_t itvl; - uint16_t window; - uint8_t filter_policy; - uint8_t limited:1; - uint8_t passive:1; - uint8_t filter_duplicates:1; -}; - -struct ble_gap_sec_state { - /** If connection is encrypted */ - unsigned encrypted:1; - - /** If connection is authenticated */ - unsigned authenticated:1; - - /** If connection is bonded (security information is stored) */ - unsigned bonded:1; - - /** Size of a key used for encryption */ - unsigned key_size:5; -}; - -struct ble_gap_disc_desc { - /*** Common fields. */ - uint8_t event_type; - uint8_t length_data; - bd_addr_t addr; - int8_t rssi; - uint8_t *data; - - /*** - * LE direct advertising report fields; direct_addr is BLE_ADDR_ANY if - * direct address fields are not present. - */ - bd_addr_t direct_addr; -}; - -/** @brief Connection descriptor */ -struct ble_gap_conn_desc { - /** Connection security state */ - struct ble_gap_sec_state sec_state; - - /** Local identity address */ - bd_addr_t our_id_addr; - - /** Peer identity address */ - bd_addr_t peer_id_addr; - - /** Connection handle */ - uint16_t conn_handle; - - /** Connection interval */ - uint16_t conn_itvl; - - /** Connection latency */ - uint16_t conn_latency; - - /** Connection supervision timeout */ - uint16_t supervision_timeout; - - /** Connection Role - * Possible values BLE_GAP_ROLE_SLAVE or BLE_GAP_ROLE_MASTER - */ - uint8_t role; - - /** Master clock accuracy */ - uint8_t master_clock_accuracy; -}; - -struct ble_gap_event -{ - /** - * Indicates the type of GAP event that occurred. This is one of the - * BLE_GAP_EVENT codes. - */ - uint8_t type; - - /** - * A discriminated union containing additional details concerning the GAP - * event. The 'type' field indicates which member of the union is valid. - */ - union { - /** - * Represents a connection attempt. Valid for the following event - * types: - * o BLE_GAP_EVENT_CONNECT - */ - struct { - /** - * The status of the connection attempt; - * o 0: the connection was successfully established. - * o BLE host error code: the connection attempt failed for - * the specified reason. - */ - int status; - - /** The handle of the relevant connection. */ - uint16_t conn_handle; - - /** The handle in the server database*/ - uint16_t attr_handle; - - /*pointer to the data of the upper data*/ - uint8_t* data; - - /*lenth of data*/ - uint8_t length; - } connect; - - /** - * Represents a terminated connection. Valid for the following event - * types: - * o BLE_GAP_EVENT_DISCONNECT - */ - struct { - /** - * A BLE host return code indicating the reason for the - * disconnect. - */ - int reason; - - /** Information about the connection prior to termination. */ - struct ble_gap_conn_desc conn; - } disconnect; - - /** - * Represents an advertising report received during a discovery - * procedure. Valid for the following event types: - * o BLE_GAP_EVENT_DISC - */ - struct ble_gap_disc_desc disc; - - - /** - * Represents an extended advertising report received during a discovery - * procedure. Valid for the following event types: - * o BLE_GAP_EVENT_EXT_DISC - */ - struct ble_gap_ext_disc_desc ext_disc; - - /** - * Represents a completed discovery procedure. Valid for the following - * event types: - * o BLE_GAP_EVENT_DISC_COMPLETE - */ - struct { - /** - * The reason the discovery procedure stopped. Typical reason - * codes are: - * o 0: Duration expired. - * o BLE_HS_EPREEMPTED: Host aborted procedure to configure a - * peer's identity. - */ - int reason; - } disc_complete; - - /** - * Represents a completed advertise procedure. Valid for the following - * event types: - * o BLE_GAP_EVENT_ADV_COMPLETE - */ - struct { - /** - * The reason the advertise procedure stopped. Typical reason - * codes are: - * o 0: Terminated due to connection. - * o BLE_HS_ETIMEOUT: Duration expired. - * o BLE_HS_EPREEMPTED: Host aborted procedure to configure a - * peer's identity. - */ - int reason; - - } adv_complete; - - /** - * Represents a failed attempt to terminate an established connection. - * Valid for the following event types: - * o BLE_GAP_EVENT_TERM_FAILURE - */ - struct { - /** - * A BLE host return code indicating the reason for the failure. - */ - int status; - - /** The handle of the relevant connection. */ - uint16_t conn_handle; - } term_failure; - /** - * Represents a state change in a peer's subscription status. In this - * comment, the term "update" is used to refer to either a notification - * or an indication. This event is triggered by any of the following - * occurrences: - * o Peer enables or disables updates via a CCCD write. - * o Connection is about to be terminated and the peer is - * subscribed to updates. - * o Peer is now subscribed to updates after its state was restored - * from persistence. This happens when bonding is restored. - * - * Valid for the following event types: - * o BLE_GAP_EVENT_SUBSCRIBE - */ - struct { - /** The handle of the relevant connection. */ - uint16_t conn_handle; - - /** The value handle of the relevant characteristic. */ - uint16_t attr_handle; - - /** One of the BLE_GAP_SUBSCRIBE_REASON codes. */ - uint8_t reason; - - /** Whether the peer was previously subscribed to notifications. */ - uint8_t prev_notify:1; - - /** Whether the peer is currently subscribed to notifications. */ - uint8_t cur_notify:1; - - /** Whether the peer was previously subscribed to indications. */ - uint8_t prev_indicate:1; - - /** Whether the peer is currently subscribed to indications. */ - uint8_t cur_indicate:1; - } subscribe; - struct{ - uint8_t * data; - uint8_t length; - }mesh_app; - - struct{ - uint8_t enable; - }beacon_state; - - }; -}; -struct ble_gap_adv_params { - /** Advertising mode. Can be one of following constants: - * - BLE_GAP_CONN_MODE_NON (non-connectable; 3.C.9.3.2). - * - BLE_GAP_CONN_MODE_DIR (directed-connectable; 3.C.9.3.3). - * - BLE_GAP_CONN_MODE_UND (undirected-connectable; 3.C.9.3.4). - */ - uint8_t conn_mode; - /** Discoverable mode. Can be one of following constants: - * - BLE_GAP_DISC_MODE_NON (non-discoverable; 3.C.9.2.2). - * - BLE_GAP_DISC_MODE_LTD (limited-discoverable; 3.C.9.2.3). - * - BLE_GAP_DISC_MODE_GEN (general-discoverable; 3.C.9.2.4). - */ - uint8_t disc_mode; - - /** Minimum advertising interval, if 0 stack use sane defaults */ - uint16_t itvl_min; - /** Maximum advertising interval, if 0 stack use sane defaults */ - uint16_t itvl_max; - /** Advertising channel map , if 0 stack use sane defaults */ - uint8_t channel_map; - - /** Advertising Filter policy */ - uint8_t filter_policy; - - /** If do High Duty cycle for Directed Advertising */ - uint8_t high_duty_cycle:1; -}; - -typedef int ble_gap_event_fn(struct ble_gap_event *event, void *arg); -struct ble_gap_mesh_state { - ble_gap_event_fn *cb; - void *cb_arg; -}; - -extern struct ble_gap_mesh_state ble_gap_mesh; - -#if MYNEWT_VAL(BLE_EXT_ADV) -#define BT_MESH_ADV_INST (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES)) - - -/* Note that BLE_MULTI_ADV_INSTANCES contains number of additional instances. - * Instance 0 is always there - */ -#if MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) < 1 -#error "Mesh needs at least BLE_MULTI_ADV_INSTANCES set to 1" -#endif -#define BT_MESH_ADV_GATT_INST (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) - 1) - -#endif /* BLE_EXT_ADV */ - -#define MESH_PROXY_ADV_HANDLE 0x07 - -#define PB_ADV_HANDLE 0x06 - - -extern uint8_t MESH_PROXY_RANDOM_ADDR[16]; -extern uint8_t PB_ADV_RANDOM_ADDR[16]; -/** @brief Helper to declare elements of bt_data arrays - * - * This macro is mainly for creating an array of struct bt_data - * elements which is then passed to bt_le_adv_start(). - * - * @param _type Type of advertising data field - * @param _data Pointer to the data field payload - * @param _data_len Number of bytes behind the _data pointer - */ -#define BT_DATA(_type, _data, _data_len) \ - { \ - .type = (_type), \ - .data_len = (_data_len), \ - .data = (const u8_t *)(_data), \ - } - -/** @brief Helper to declare elements of bt_data arrays - * - * This macro is mainly for creating an array of struct bt_data - * elements which is then passed to bt_le_adv_start(). - * - * @param _type Type of advertising data field - * @param _bytes Variable number of single-byte parameters - */ -#define BT_DATA_BYTES(_type, _bytes...) \ - BT_DATA(_type, ((u8_t []) { _bytes }), \ - sizeof((u8_t []) { _bytes })) - -/* EIR/AD data type definitions */ -#define BT_DATA_FLAGS 0x01 /* AD flags */ -#define BT_DATA_UUID16_SOME 0x02 /* 16-bit UUID, more available */ -#define BT_DATA_UUID16_ALL 0x03 /* 16-bit UUID, all listed */ -#define BT_DATA_UUID32_SOME 0x04 /* 32-bit UUID, more available */ -#define BT_DATA_UUID32_ALL 0x05 /* 32-bit UUID, all listed */ -#define BT_DATA_UUID128_SOME 0x06 /* 128-bit UUID, more available */ -#define BT_DATA_UUID128_ALL 0x07 /* 128-bit UUID, all listed */ -#define BT_DATA_NAME_SHORTENED 0x08 /* Shortened name */ -#define BT_DATA_NAME_COMPLETE 0x09 /* Complete name */ -#define BT_DATA_TX_POWER 0x0a /* Tx Power */ -#define BT_DATA_SOLICIT16 0x14 /* Solicit UUIDs, 16-bit */ -#define BT_DATA_SOLICIT128 0x15 /* Solicit UUIDs, 128-bit */ -#define BT_DATA_SVC_DATA16 0x16 /* Service data, 16-bit UUID */ -#define BT_DATA_GAP_APPEARANCE 0x19 /* GAP appearance */ -#define BT_DATA_SOLICIT32 0x1f /* Solicit UUIDs, 32-bit */ -#define BT_DATA_SVC_DATA32 0x20 /* Service data, 32-bit UUID */ -#define BT_DATA_SVC_DATA128 0x21 /* Service data, 128-bit UUID */ -#define BT_DATA_URI 0x24 /* URI */ -#define BT_DATA_MESH_PROV 0x29 /* Mesh Provisioning PDU */ -#define BT_DATA_MESH_MESSAGE 0x2a /* Mesh Networking PDU */ -#define BT_DATA_MESH_BEACON 0x2b /* Mesh Beacon */ - -#define BT_DATA_MANUFACTURER_DATA 0xff /* Manufacturer Specific Data */ - -#define BT_LE_AD_LIMITED 0x01 /* Limited Discoverable */ -#define BT_LE_AD_GENERAL 0x02 /* General Discoverable */ -#define BT_LE_AD_NO_BREDR 0x04 /* BR/EDR not supported */ - -#define sys_put_be16(a,b) put_be16(b, a) -#define sys_put_le16(a,b) put_le16(b, a) -#define sys_put_be32(a,b) put_be32(b, a) -#define sys_get_be16(a) get_be16(a) -#define sys_get_le16(a) get_le16(a) -#define sys_get_be32(a) get_be32(a) -#define sys_cpu_to_be16(a) htobe16(a) -#define sys_cpu_to_be32(a) htobe32(a) -#define sys_be32_to_cpu(a) be32toh(a) -#define sys_be16_to_cpu(a) be16toh(a) -#define sys_le16_to_cpu(a) le16toh(a) - -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -#define CODE_UNREACHABLE __builtin_unreachable() -#define __ASSERT(code, str) \ - do { \ - if (!(code)) BT_ERR(str); \ - assert(code); \ - } while (0); - -#define __ASSERT_NO_MSG(test) __ASSERT(test, "") - -/* Mesh is designed to not use mbuf chains */ -#if BT_DBG_ENABLED -#define ASSERT_NOT_CHAIN(om) assert(SLIST_NEXT(om, om_next) == NULL) -#else -#define ASSERT_NOT_CHAIN(om) (void)(om) -#endif - -#define __packed __attribute__((__packed__)) - -#define MSEC_PER_SEC (1000) -#define K_MSEC(ms) (ms) -#define K_SECONDS(s) K_MSEC((s) * MSEC_PER_SEC) -#define K_MINUTES(m) K_SECONDS((m) * 60) -#define K_HOURS(h) K_MINUTES((h) * 60) - -#ifndef BIT -#define BIT(n) (1UL << (n)) -#endif - -#define BIT_MASK(n) (BIT(n) - 1) - -#define BT_GAP_ADV_FAST_INT_MIN_1 0x0030 /* 30 ms */ -#define BT_GAP_ADV_FAST_INT_MAX_1 0x0060 /* 60 ms */ -#define BT_GAP_ADV_FAST_INT_MIN_2 0x00a0 /* 100 ms */ -#define BT_GAP_ADV_FAST_INT_MAX_2 0x00f0 /* 150 ms */ -#define BT_GAP_ADV_SLOW_INT_MIN 0x0640 /* 1 s */ -#define BT_GAP_ADV_SLOW_INT_MAX 0x0780 /* 1.2 s */ - -#define BT_DBG(fmt, ...) \ - if (BT_DBG_ENABLED) { \ - BLE_HS_LOG(DEBUG, "%s: " fmt "\n", __func__, ## __VA_ARGS__); \ - } -#define BT_INFO(fmt, ...) \ - if (BT_INFO_ENABLED) { \ - BLE_HS_LOG(INFO, "%s: " fmt "\n", __func__, ## __VA_ARGS__); \ - } -#define BT_WARN(fmt, ...) \ - if (BT_WARN_ENABLED) { \ - BLE_HS_LOG(WARN, "%s: " fmt "\n", __func__, ## __VA_ARGS__); \ - } -#define BT_ERR(fmt, ...) BLE_HS_LOG(ERROR, "%s: " fmt "\n", __func__, ## __VA_ARGS__); -#define BT_GATT_ERR(_att_err) (-(_att_err)) - -typedef ble_addr_t bt_addr_le_t; - -#define k_fifo_init(queue) ble_npl_eventq_init(queue) -#define net_buf_simple_tailroom(buf) OS_MBUF_TRAILINGSPACE(buf) -#define net_buf_tailroom(buf) net_buf_simple_tailroom(buf) -#define net_buf_headroom(buf) ((buf)->om_data - &(buf)->om_databuf[buf->om_pkthdr_len]) -#define net_buf_simple_headroom(buf) net_buf_headroom(buf) -#define net_buf_simple_tail(buf) ((buf)->om_data + (buf)->om_len) - -struct net_buf_simple_state { - /** Offset of the data pointer from the beginning of the storage */ - u16_t offset; - /** Length of data */ - u16_t len; -}; - -static inline struct os_mbuf * NET_BUF_SIMPLE(uint16_t size) -{ - struct os_mbuf *buf; - - buf = os_msys_get(size, 0); - assert(buf); - - return buf; -} - -#define K_NO_WAIT (0) -#define K_FOREVER (-1) - -/* This is by purpose */ -static inline void net_buf_simple_init(struct os_mbuf *buf, - size_t reserve_head) -{ - /* This is called in Zephyr after init. - * Note in Mynewt case we don't care abour reserved head*/ - buf->om_data = &buf->om_databuf[buf->om_pkthdr_len] + reserve_head; - buf->om_len = 0; -} - -void net_buf_put(struct ble_npl_eventq *fifo, struct os_mbuf *buf); -void * net_buf_ref(struct os_mbuf *om); -void net_buf_unref(struct os_mbuf *om); -uint16_t net_buf_simple_pull_le16(struct os_mbuf *om); -uint16_t net_buf_simple_pull_be16(struct os_mbuf *om); -uint32_t net_buf_simple_pull_be32(struct os_mbuf *om); -uint32_t net_buf_simple_pull_le32(struct os_mbuf *om); -uint8_t net_buf_simple_pull_u8(struct os_mbuf *om); -void net_buf_simple_add_le16(struct os_mbuf *om, uint16_t val); -void net_buf_simple_add_be16(struct os_mbuf *om, uint16_t val); -void net_buf_simple_add_u8(struct os_mbuf *om, uint8_t val); -void net_buf_simple_add_be32(struct os_mbuf *om, uint32_t val); -void net_buf_simple_add_le32(struct os_mbuf *om, uint32_t val); -void net_buf_add_zeros(struct os_mbuf *om, uint8_t len); -void net_buf_simple_push_le16(struct os_mbuf *om, uint16_t val); -void net_buf_simple_push_be16(struct os_mbuf *om, uint16_t val); -void net_buf_simple_push_u8(struct os_mbuf *om, uint8_t val); -void *net_buf_simple_pull(struct os_mbuf *om, uint8_t len); -void *net_buf_simple_add(struct os_mbuf *om, uint8_t len); -bool k_fifo_is_empty(struct ble_npl_eventq *q); -void *net_buf_get(struct ble_npl_eventq *fifo,s32_t t); -uint8_t *net_buf_simple_push(struct os_mbuf *om, uint8_t len); -void net_buf_reserve(struct os_mbuf *om, size_t reserve); - -#define net_buf_add_mem(a,b,c) os_mbuf_append(a,b,c) -#define net_buf_simple_add_mem(a,b,c) os_mbuf_append(a,b,c) -#define net_buf_add_u8(a,b) net_buf_simple_add_u8(a,b) -#define net_buf_add(a,b) net_buf_simple_add(a,b) - -#define net_buf_clone(a, b) os_mbuf_dup(a) -#define net_buf_add_be32(a, b) net_buf_simple_add_be32(a, b) -#define net_buf_add_be16(a, b) net_buf_simple_add_be16(a, b) - -#define BT_GATT_CCC_NOTIFY BLE_GATT_CHR_PROP_NOTIFY -#define bt_gatt_attr ble_gatt_attr - -/** Description of different data types that can be encoded into - * advertising data. Used to form arrays that are passed to the - * bt_le_adv_start() function. - */ -struct bt_data { - u8_t type; - u8_t data_len; - const u8_t *data; -}; - -struct bt_pub_key_cb { - /** @brief Callback type for Public Key generation. - * - * Used to notify of the local public key or that the local key is not - * available (either because of a failure to read it or because it is - * being regenerated). - * - * @param key The local public key, or NULL in case of no key. - */ - void (*func)(const u8_t key[64]); - - struct bt_pub_key_cb *_next; -}; - -typedef void (*bt_dh_key_cb_t)(const u8_t key[32]); -int bt_dh_key_gen(const u8_t remote_pk[64], bt_dh_key_cb_t cb); -int bt_pub_key_gen(struct bt_pub_key_cb *new_cb); -uint8_t *bt_pub_key_get(void); -int bt_rand(void *buf, size_t len); -const char * bt_hex(const void *buf, size_t len); -int bt_encrypt_be(const uint8_t *key, const uint8_t *plaintext, uint8_t *enc_data); -// void bt_mesh_register_gatt(void); -// WARNING: ^^^ this API is not available in this release - -int bt_le_adv_start(const struct ble_gap_adv_params *param, - const struct bt_data *ad, size_t ad_len, - const struct bt_data *sd, size_t sd_len); -int bt_le_adv_stop(bool proxy); - -struct k_delayed_work { - struct ble_npl_callout work; -}; - -void k_work_init(struct ble_npl_callout *work, ble_npl_event_fn handler); -void k_delayed_work_init(struct k_delayed_work *w, ble_npl_event_fn *f); -void k_delayed_work_cancel(struct k_delayed_work *w); -void k_delayed_work_submit(struct k_delayed_work *w, uint32_t ms); -int64_t k_uptime_get(void); -u32_t k_uptime_get_32(void); -void k_sleep(int32_t duration); -void k_work_submit(struct ble_npl_callout *w); -void k_work_add_arg(struct ble_npl_callout *w, void *arg); -void k_delayed_work_add_arg(struct k_delayed_work *w, void *arg); -uint32_t k_delayed_work_remaining_get(struct k_delayed_work *w); - -static inline void net_buf_simple_save(struct os_mbuf *buf, - struct net_buf_simple_state *state) -{ - state->offset = net_buf_simple_headroom(buf); - state->len = buf->om_len; -} - -static inline void net_buf_simple_restore(struct os_mbuf *buf, - struct net_buf_simple_state *state) -{ - buf->om_data = &buf->om_databuf[buf->om_pkthdr_len] + state->offset; - buf->om_len = state->len; -} - -static inline void sys_memcpy_swap(u8_t *dst, const u8_t *src, size_t length) -{ - __ASSERT(((src < dst && (src + length) <= dst) || - (src > dst && (dst + length) <= src)), - "Source and destination buffers must not overlap"); - - src += length - 1; - - for (; length > 0; length--) { - *((u8_t *)dst++) = *((u8_t *)src--); - } -} - -#define popcount(x) __builtin_popcount(x) - -static inline unsigned int find_lsb_set(u32_t op) -{ - return __builtin_ffs(op); -} - -static inline unsigned int find_msb_set(u32_t op) -{ - if (!op) - return 0; - - return 32 - __builtin_clz(op); -} - -extern uint32_t MYNEWT_VAL_BLE_MESH_GATT_PROXY; -#define CONFIG_BT_MESH_FRIEND BLE_MESH_FRIEND - -#define CONFIG_BT_MESH_IV_UPDATE_TEST BLE_MESH_IV_UPDATE_TEST -#define CONFIG_BT_MESH_LOW_POWER BLE_MESH_LOW_POWER -#define CONFIG_BT_MESH_LPN_AUTO BLE_MESH_LPN_AUTO -#define CONFIG_BT_MESH_LPN_ESTABLISHMENT BLE_MESH_LPN_ESTABLISHMENT -#define CONFIG_BT_MESH_PB_ADV BLE_MESH_PB_ADV -#define CONFIG_BT_MESH_PB_GATT BLE_MESH_PB_GATT -#define CONFIG_BT_MESH_PROV BLE_MESH_PROV -#define CONFIG_BT_TESTING BLE_MESH_TESTING -#define CONFIG_BT_SETTINGS BLE_MESH_SETTINGS -#define CONFIG_SETTINGS BLE_MESH_SETTINGS -#define BT_SETTINGS BLE_MESH_SETTINGS - -/* Above flags are used with IS_ENABLED macro */ -#define IS_ENABLED(config) MYNEWT_VAL(config) - -#define CONFIG_BT_MESH_LPN_GROUPS MYNEWT_VAL(BLE_MESH_LPN_GROUPS) -#define CONFIG_BT_MESH_ADV_BUF_COUNT MYNEWT_VAL(BLE_MESH_ADV_BUF_COUNT) -#define CONFIG_BT_MESH_FRIEND_QUEUE_SIZE MYNEWT_VAL(BLE_MESH_FRIEND_QUEUE_SIZE) -#define CONFIG_BT_MESH_FRIEND_RECV_WIN MYNEWT_VAL(BLE_MESH_FRIEND_RECV_WIN) -#define CONFIG_BT_MESH_LPN_POLL_TIMEOUT MYNEWT_VAL(BLE_MESH_LPN_POLL_TIMEOUT) -#define CONFIG_BT_MESH_MODEL_GROUP_COUNT MYNEWT_VAL(BLE_MESH_MODEL_GROUP_COUNT) -#define CONFIG_BT_MESH_MODEL_KEY_COUNT MYNEWT_VAL(BLE_MESH_MODEL_KEY_COUNT) -#define CONFIG_BT_MESH_NODE_ID_TIMEOUT MYNEWT_VAL(BLE_MESH_NODE_ID_TIMEOUT) -#define CONFIG_BT_MAX_CONN MYNEWT_VAL(BLE_MAX_CONNECTIONS) -#define CONFIG_BT_MESH_SEQ_STORE_RATE MYNEWT_VAL(BLE_MESH_SEQ_STORE_RATE) -#define CONFIG_BT_MESH_RPL_STORE_TIMEOUT MYNEWT_VAL(BLE_MESH_RPL_STORE_TIMEOUT) -#define CONFIG_BT_MESH_APP_KEY_COUNT MYNEWT_VAL(BLE_MESH_APP_KEY_COUNT) -#define CONFIG_BT_MESH_SUBNET_COUNT MYNEWT_VAL(BLE_MESH_SUBNET_COUNT) -#define CONFIG_BT_MESH_STORE_TIMEOUT MYNEWT_VAL(BLE_MESH_STORE_TIMEOUT) -#define CONFIG_BT_MESH_IVU_DIVIDER MYNEWT_VAL(BLE_MESH_IVU_DIVIDER) -#define CONFIG_BT_DEVICE_NAME MYNEWT_VAL(BLE_MESH_DEVICE_NAME) -#define CONFIG_BT_MESH_TX_SEG_MAX MYNEWT_VAL(BLE_MESH_TX_SEG_MAX) - -#define printk printf - -#define CONTAINER_OF(ptr, type, field) \ - ((type *)(((char *)(ptr)) - offsetof(type, field))) - - -#define k_sem ble_npl_sem - -static inline void k_sem_init(struct k_sem *sem, unsigned int initial_count, - unsigned int limit) -{ - ble_npl_sem_init(sem, initial_count); -} - -static inline int k_sem_take(struct k_sem *sem, s32_t timeout) -{ - uint32_t ticks; - - ble_npl_time_ms_to_ticks(timeout, &ticks); - return - ble_npl_sem_pend(sem, ticks); - -} - -static inline void k_sem_give(struct k_sem *sem) -{ - ble_npl_sem_release(sem); //not used the sem mechanism -} - -/* Helpers to access the storage array, since we don't have access to its - * type at this point anymore. - */ - -#define BUF_SIZE(pool) (pool->omp_pool->mp_block_size) - -static inline int net_buf_id(struct os_mbuf *buf) -{ - struct os_mbuf_pool *pool = buf->om_omp; - u8_t *pool_start = (u8_t *)pool->omp_pool->mp_membuf_addr; - u8_t *buf_ptr = (u8_t *)buf; - - return (buf_ptr - pool_start) / BUF_SIZE(pool); -} - -/* XXX: We should not use os_mbuf_pkthdr chains to represent a list of - * packets, this is a hack. For now this is not an issue, because mesh - * does not use os_mbuf chains. We should change this in the future. - */ -STAILQ_HEAD(net_buf_slist_t, os_mbuf_pkthdr); - -void net_buf_slist_init(struct net_buf_slist_t *list); -bool net_buf_slist_is_empty(struct net_buf_slist_t *list); -struct os_mbuf *net_buf_slist_peek_head(struct net_buf_slist_t *list); -struct os_mbuf *net_buf_slist_peek_next(struct os_mbuf *buf); -struct os_mbuf *net_buf_slist_get(struct net_buf_slist_t *list); -void net_buf_slist_put(struct net_buf_slist_t *list, struct os_mbuf *buf); -void net_buf_slist_remove(struct net_buf_slist_t *list, struct os_mbuf *prev, - struct os_mbuf *cur); -void net_buf_slist_merge_slist(struct net_buf_slist_t *list, - struct net_buf_slist_t *list_to_append); -#define NET_BUF_SLIST_FOR_EACH_NODE(head, var) STAILQ_FOREACH(var, head, omp_next) - -#if MYNEWT_VAL(BLE_MESH_SETTINGS) - -#define settings_load conf_load -int settings_bytes_from_str(char *val_str, void *vp, int *len); -char *settings_str_from_bytes(void *vp, int vp_len, char *buf, int buf_len); - -#define snprintk snprintf -#define BT_SETTINGS_SIZE(in_size) (in_size+1) -#define settings_save_one save_binary_value - -#else - -static inline int -settings_load(void) -{ - return 0; -} - -#endif /* MYNEWT_VAL(MYNEWT_VAL_BLE_MESH_SETTINGS) */ - -int PB_ADV_config(void); -int le_adv_status_reset(bool proxy); -#define BUILD_ASSERT(cond) \ //modified by dengyiyun - -typedef struct ble_gap_event mesh_gap_event; - -/*below for MESH->HOST message invoke*/ -#define USER_MSG_ID_CCM_REQ (0x0f) -#define SCAN_RSP_DATA_SET 0x21 -#define EXT_SCAN 0x22 -#define EXT_ADV 0x23 -#define WHITELST_SET 0x24 -#define ADV_PARAM_SET 0x25 -#define SCAN_PARAM_SET 0x26 -#define RAND_ADDR_SET 0x27 -#define ADV_DATA_SET 0x28 - -typedef struct ccm_data -{ - uint8_t type; // 0: encrypt 1: decrypt - uint8_t mic_size; - uint16_t msg_len; - uint16_t aad_len; - uint32_t tag; // same value will be reported in event - uint8_t *key; - uint8_t *nonce; - uint8_t *msg; - uint8_t *aad; - uint8_t *out_msg; -}ccm_data_t; - - -typedef struct ext_scan -{ - uint8_t enable; - uint8_t filter_dup; - uint16_t dur; - uint16_t peri; -}ext_scan_t; - -typedef struct scan_param -{ - uint8_t addr_type; - uint8_t pol; - uint8_t num; - scan_phy_config_t config[2]; -}scan_param_t; - -typedef struct scan_rsp_data -{ - uint8_t adv_handle; - uint8_t length; - uint8_t* data; -}scan_rsp_data_t; - -typedef struct adv_param -{ - uint8_t adv_handle; - uint8_t prop; - uint32_t inter_min; - uint32_t inter_max; - uint8_t map; - uint8_t addr_type; - uint8_t peer_addr_type; - bd_addr_t peer_addr; - uint8_t filter; - uint8_t tx_power; - uint8_t adv_phy; - uint8_t max_skip; - uint8_t sec_phy; - uint8_t sid; - uint8_t notify; -}adv_param_t; - -typedef struct rand_addr -{ - uint8_t adv_handle; - bd_addr_t addr; -}rand_addr_t; - - -typedef struct adv_en -{ - uint8_t en; - uint8_t setsnum; - ext_adv_set_en_t adv_set_conf; -}adv_en_t; - -typedef struct adv_data -{ - uint8_t adv_handle; - uint8_t len; - uint8_t * data; -}adv_data_t; - -typedef struct whitelst -{ - uint8_t type; - bd_addr_t whitaddr; -}whitelst_t; - -typedef struct app_request -{ - struct bt_mesh_model *model; - uint16_t app_idx; - uint16_t dst; - u32_t opcode; - uint8_t msg[20]; - uint8_t len; - uint8_t bear; -}app_request_t; - -typedef enum trace_info{ - ADV_LAYER = BIT(0), - NET_LAYER = BIT(1), - TRANS_LAYER = BIT(2), - ACC_LAYER = BIT(3), - BEA_FEA = BIT(4), - FRND_FEA = BIT(5), - LPN_FEA = BIT(6), - MESH_FEA = BIT(7), - CRYPTO_FEA = BIT(8), - PROV_FEA = BIT(9), - PROXY_FEA = BIT(10), - SET_FEA = BIT(11), - CFG_FEA = BIT(12), - HEALTH_FEA = BIT(13), -}trace_info_t; - -enum TRACE_CLA{ - DEBUG_CLA = BIT(0), - INFO_CLA = BIT(1), - WARN_CLA = BIT(2), -}; - -//below used to setup the uart data output function from APP -typedef void (*mesh_at_out)(const char* buf, int len); -#endif diff --git a/bundles/mesh/inc/health_cli.h b/bundles/mesh/inc/health_cli.h deleted file mode 100644 index 8b890422e..000000000 --- a/bundles/mesh/inc/health_cli.h +++ /dev/null @@ -1,72 +0,0 @@ -/** @file - * @brief Bluetooth Mesh Health Client Model APIs. - */ - -/* - * Copyright (c) 2017 Intel Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef __BT_MESH_HEALTH_CLI_H -#define __BT_MESH_HEALTH_CLI_H - -/** - * @brief Bluetooth Mesh - * @defgroup bt_mesh_health_cli Bluetooth Mesh Health Client Model - * @ingroup bt_mesh - * @{ - */ - -/** Mesh Health Client Model Context */ -struct bt_mesh_health_cli { - struct bt_mesh_model *model; - - void (*current_status)(struct bt_mesh_health_cli *cli, u16_t addr, - u8_t test_id, u16_t cid, u8_t *faults, - size_t fault_count); - - struct k_sem op_sync; - u32_t op_pending; - void *op_param; -}; - -extern const struct bt_mesh_model_op bt_mesh_health_cli_op[]; - -#define BT_MESH_MODEL_HEALTH_CLI(cli_data) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_HEALTH_CLI, \ - bt_mesh_health_cli_op, NULL, cli_data) - -int bt_mesh_health_cli_set(struct bt_mesh_model *model); - -int bt_mesh_health_fault_get(u16_t net_idx, u16_t addr, u16_t app_idx, - u16_t cid, u8_t *test_id, u8_t *faults, - size_t *fault_count); - -int bt_mesh_health_fault_clear(u16_t net_idx, u16_t addr, u16_t app_idx, - u16_t cid, u8_t *test_id, u8_t *faults, - size_t *fault_count); - -int bt_mesh_health_fault_test(u16_t net_idx, u16_t addr, u16_t app_idx, - u16_t cid, u8_t test_id, u8_t *faults, - size_t *fault_count); - -int bt_mesh_health_period_get(u16_t net_idx, u16_t addr, u16_t app_idx, - u8_t *divisor); - -int bt_mesh_health_period_set(u16_t net_idx, u16_t addr, u16_t app_idx, - u8_t divisor, u8_t *updated_divisor); - -int bt_mesh_health_attention_get(u16_t net_idx, u16_t addr, u16_t app_idx, - u8_t *attention); - -int bt_mesh_health_attention_set(u16_t net_idx, u16_t addr, u16_t app_idx, - u8_t attention, u8_t *updated_attention); - -s32_t bt_mesh_health_cli_timeout_get(void); -void bt_mesh_health_cli_timeout_set(s32_t timeout); - -/** - * @} - */ - -#endif /* __BT_MESH_HEALTH_CLI_H */ diff --git a/bundles/mesh/inc/health_srv.h b/bundles/mesh/inc/health_srv.h deleted file mode 100644 index 96f69e1e0..000000000 --- a/bundles/mesh/inc/health_srv.h +++ /dev/null @@ -1,91 +0,0 @@ -/** @file - * @brief Bluetooth Mesh Health Server Model APIs. - */ - -/* - * Copyright (c) 2017 Intel Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef __BT_MESH_HEALTH_SRV_H -#define __BT_MESH_HEALTH_SRV_H - -/** - * @brief Mesh Bluetooth Mesh Health Server Model - * @defgroup bt_mesh_health_srv - * @ingroup bt_mesh - * @{ - */ - -struct bt_mesh_health_srv_cb { - /* Fetch current faults */ - int (*fault_get_cur)(struct bt_mesh_model *model, u8_t *test_id, - u16_t *company_id, u8_t *faults, - u8_t *fault_count); - - /* Fetch registered faults */ - int (*fault_get_reg)(struct bt_mesh_model *model, u16_t company_id, - u8_t *test_id, u8_t *faults, - u8_t *fault_count); - - /* Clear registered faults */ - int (*fault_clear)(struct bt_mesh_model *model, u16_t company_id); - - /* Run a specific test */ - int (*fault_test)(struct bt_mesh_model *model, u8_t test_id, - u16_t company_id); - - /* Attention on */ - void (*attn_on)(struct bt_mesh_model *model); - - /* Attention off */ - void (*attn_off)(struct bt_mesh_model *model); -}; - -/** @def BT_MESH_HEALTH_FAULT_MSG - * - * A helper to define a health fault message. - * - * @param max_faults Maximum number of faults the element can have. - * - * @return a New net_buf_simple of the needed size. - */ -#define BT_MESH_HEALTH_FAULT_MSG(max_faults) \ - NET_BUF_SIMPLE(1 + 3 + (max_faults)) - -/** Mesh Health Server Model Context */ -struct bt_mesh_health_srv { - struct bt_mesh_model *model; - - /* Optional callback struct */ - const struct bt_mesh_health_srv_cb *cb; - - /* Attention Timer state */ - struct k_delayed_work attn_timer; -}; - -int bt_mesh_fault_update(struct bt_mesh_elem *elem); - -extern const struct bt_mesh_model_op bt_mesh_health_srv_op[]; - -/** @def BT_MESH_MODEL_HEALTH_SRV - * - * Define a new health server model. Note that this API needs to be - * repeated for each element that the application wants to have a - * health server model on. Each instance also needs a unique - * bt_mesh_health_srv and bt_mesh_model_pub context. - * - * @param srv Pointer to a unique struct bt_mesh_health_srv. - * @param pub Pointer to a unique struct bt_mesh_model_pub. - * - * @return New mesh model instance. - */ -#define BT_MESH_MODEL_HEALTH_SRV(srv, pub) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_HEALTH_SRV, \ - bt_mesh_health_srv_op, pub, srv) - -/** - * @} - */ - -#endif /* __BT_MESH_HEALTH_SRV_H */ diff --git a/bundles/mesh/inc/kv_storage.h b/bundles/mesh/inc/kv_storage.h deleted file mode 100644 index e9259de9e..000000000 --- a/bundles/mesh/inc/kv_storage.h +++ /dev/null @@ -1,162 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018-2019 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef _KV_STORAGE_H -#define _KV_STORAGE_H - -#include - -/** - * @brief A simple key-value storage - * - * A key is just an integer and its associated value is an array of bytes. - * - * When modified, a timer is (re-)started. When this timer timed out, whole db is committed to nvm. - */ - - -/** - * @brief key-collision between different modules should be strictly avoided. - * Here is a pre-defined range for keys: - */ -#define KV_HOST_KEY_START 1 -#define KV_HOST_KEY_END 50 -#define KV_MESH_KEY_START 51 -#define KV_MESH_KEY_END 200 -#define KV_USER_KEY_START 201 -#define KV_USER_KEY_END 255 - - -/** - * @brief The whole data. - */ -struct kv_db; -typedef struct kv_db kv_db_t; - -typedef uint8_t kvkey_t; - -#define KV_VALUE_MAX_LEN (253) - -/** - * @brief return value for callbacks - */ -#define KV_OK 0 -#define KV_ERR_OUT_OF_MEM 1 -#define KV_ERR_KEY_NOT_EXISTS 2 -#define KV_ERR_ABORT 3 - -/** - * @brief callback function to save whole db into non-volatile memory (such as flash) - * @param[in] db the whole db - * @param[in] size total bytes that need to be saved - */ -typedef int (*f_kv_write_to_nvm)(const void *db, const int size); - -/** - * @brief callback function restore whole db from non-volatile memory (such as flash) - * @param[out] db the whole db - * @param[in] max_size max_size of bytes can be restored into db - * @return KV_OK or error code - * - * Note: (sizeof(db->size) + db->size) bytes need to be read from nvm. - * If max_size is not big enough, KV_ERR_OUT_OF_MEM should be returned. - */ -typedef int (*f_kv_read_from_nvm)(void *db, const int max_size); - -/** - * @brief visitor function for each k-v pair - * @param[in] key current key - * @param[in] data data for current key - * @param[in] len data length for current key - * @param[in] user_data user data - * @return KV_OK to continue visit other k-v pair, else to abor visiting - */ -typedef int (*f_kv_visitor)(const kvkey_t key, const uint8_t *data, const int16_t len, void *user_data); - -/** - * @brief intialize k-v storage - * @param[in] f_write callback function for save whole db into non-volatile memory - * @param[in] f_read callback function restore whole db from non-volatile memory - */ -void kv_init(f_kv_write_to_nvm f_write, - f_kv_read_from_nvm f_read); - -/** - * @brief remove all k-v parirs - */ -void kv_remove_all(void); - -/** - * @brief remove a k-v pair - */ -void kv_remove(const kvkey_t key); - -/** - * @brief put a k-v pair into the db - * @param[in] key the key - * @param[in] data data for the key - * @param[in] len data length for the key - * - * Note: if key does not exist, k-v pair is created; if already exists, value is updated. - */ -int kv_put(const kvkey_t key, const uint8_t *data, int16_t len); - -/** - * @brief get the value associated with a key - * @param[in] key the key - * @param[out] len data length for the key (can be set to NULL) - * @return value for the key - * - * Note: if key does not exist, NULL is returned & len is set to 0. - */ -uint8_t *kv_get(const kvkey_t key, int16_t *len); - -/** - * @brief notify that value of a key (got from `kv_get`) has been modified. - * - * Note: whole db will be commited to nvm later. - */ -void kv_value_modified(void); - -/** - * @brief commited whole db to nvm immediately - */ -void kv_commit(void); - -/** - * @brief traverse each k-v pair - * @param[in] visitor visitor function - * @param[in] user_data user data passing to visitor - * - * Note: data should not be modified in visitor - */ -void kv_visit(f_kv_visitor visitor, void *user_data); - -/** - * @brief append more data to the end of an existing value - * @param[in] key the key - * @param[in] more_data data to be appended for the key - * @param[in] len data length to be appended for the key - * @return KV_OK if successful else error code - */ -int kv_value_append(const kvkey_t key, const uint8_t *more_data, const int16_t len); - -/** - * @brief truncate an existing value - * @param[in] key the key - * @param[in] new_len new length of data for the key - * @return KV_OK if successful else error code - */ -int kv_value_trunc(const kvkey_t key, const int16_t new_len); - -#endif diff --git a/bundles/mesh/inc/l2cap.h b/bundles/mesh/inc/l2cap.h deleted file mode 100644 index 0c2ce7257..000000000 --- a/bundles/mesh/inc/l2cap.h +++ /dev/null @@ -1,194 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef __L2CAP_H -#define __L2CAP_H - -#include "bluetooth.h" -#include "bt_types.h" -#include "gap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint16_t channel_id); -int l2cap_can_send_fixed_channel_packet_now(hci_con_handle_t con_handle, uint16_t channel_id); -void l2cap_request_can_send_fix_channel_now_event(hci_con_handle_t con_handle, uint16_t channel_id); -int l2cap_send_connectionless(hci_con_handle_t con_handle, uint16_t cid, - const uint8_t *data1, uint16_t data1_len, - const uint8_t *data2, uint16_t data2_len); -int l2cap_send_connectionless3(hci_con_handle_t con_handle, uint16_t cid, - const uint8_t *data1, uint16_t data1_len, - const uint8_t *data2, uint16_t data2_len, - const uint8_t *data3, uint16_t data3_len); - -// int l2cap_le_send_flow_control_credit(hci_con_handle_t con_handle,uint8_t id ,uint16_t cid,uint16_t credits); -// WARNING: ^^^ this API is not available in this release - - -// PTS Testing -// int l2cap_send_echo_request(hci_con_handle_t con_handle, uint8_t *data, uint16_t len); -// WARNING: ^^^ this API is not available in this release - -// void l2cap_require_security_level_2_for_outgoing_sdp(void); -// WARNING: ^^^ this API is not available in this release - - -// Used by RFCOMM - similar to l2cap_can-send_packet_now but does not check if outgoing buffer is reserved -// int l2cap_can_send_prepared_packet_now(uint16_t local_cid); -// WARNING: ^^^ this API is not available in this release - - -/* API_START */ - -/** - * @brief Set up L2CAP and register L2CAP with HCI layer. - */ -void l2cap_init(void); - -/** - * @brief Registers packet handler for LE Connection Parameter Update events - */ -// void l2cap_register_packet_handler(btstack_packet_handler_t handler); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Get max MTU for Classic connections based on btstack configuration - */ -// uint16_t l2cap_max_mtu(void); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Get max MTU for LE connections based on btstack configuration - */ -uint16_t l2cap_max_le_mtu(void); - -/** - * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary. - * @param packet_handler - * @param address - * @param psm - * @param mtu - * @param local_cid - * @param status - */ -// uint8_t l2cap_create_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm, uint16_t mtu, uint16_t * out_local_cid); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Disconnects L2CAP channel with given identifier. - */ -// void l2cap_disconnect(uint16_t local_cid, uint8_t reason); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Queries the maximal transfer unit (MTU) for L2CAP channel with given identifier. - */ -// uint16_t l2cap_get_remote_mtu_for_local_cid(uint16_t local_cid); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Sends L2CAP data packet to the channel with given identifier. - */ -// int l2cap_send(uint16_t local_cid, uint8_t *data, uint16_t len); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Registers L2CAP service with given PSM and MTU, and assigns a packet handler. - */ -// uint8_t l2cap_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Unregisters L2CAP service with given PSM. On embedded systems, use NULL for connection parameter. - */ -// void l2cap_unregister_service(uint16_t psm); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Accepts incoming L2CAP connection. - */ -// void l2cap_accept_connection(uint16_t local_cid); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Deny incoming L2CAP connection. - */ -// void l2cap_decline_connection(uint16_t local_cid, uint8_t reason); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Check if outgoing buffer is available and that there's space on the Bluetooth module - */ -// int l2cap_can_send_packet_now(uint16_t local_cid); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible - * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function - * so packet handler should be ready to handle it - * @param local_cid - */ -// void l2cap_request_can_send_now_event(uint16_t local_cid); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Request an update of the connection parameter for a given LE connection - * @param handle - * @param conn_interval_min (unit: 1.25ms) - * @param conn_interval_max (unit: 1.25ms) - * @param conn_latency - * @param supervision_timeout (unit: 10ms) - * @returns 0 if ok - */ -// int l2cap_request_connection_parameter_update(hci_con_handle_t con_handle, uint16_t conn_interval_min, -// uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout); -// WARNING: ^^^ this API is not available in this release - - -#ifdef CONNECTION_PARAMETER_DYNAMICALLY_ADJUST -uint8_t l2cap_update_MTU_on_LL_link(l2cap_channel_t * channel); -#endif - -/* API_END */ - -#ifdef __cplusplus -} -#endif -/*to define the error result of the connection response*/ -#ifdef L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE -#define L2CAP_CONNECTION_REFUSED_LEPSM_NOT_SUPPORTED 0x0002 -#define L2CAP_CONNECTION_REFUSED_RESERVED 0x0003 -#define L2CAP_CONNECTION_REFUSED_NO_RESOURCE_AVAILABLE 0x0004 -#define L2CAP_CONNECTION_REFUSED_INSUFFICIENT_AUTHEN 0x0005 -#define L2CAP_CONNECTION_REFUSED_INSUFFICIENT_AUTHOR 0x0006 -#define L2CAP_CONNECTION_REFUSED_INSUFFICIENT_ENCRYPT_KEY_SIZE 0x0007 -#define L2CAP_CONNECTION_REFUSED_INSUFFICIENT_ENCRYPT 0x0008 -#define L2CAP_CONNECTION_REFUSED_INVALID_SCID 0x0009 -#define L2CAP_CONNECTION_REFUSED_SCID_ALREADY_ALLOCATED 0x000A -#endif - -#endif // __L2CAP_H diff --git a/bundles/mesh/inc/l2cap_signaling.h b/bundles/mesh/inc/l2cap_signaling.h deleted file mode 100644 index ac7ba045e..000000000 --- a/bundles/mesh/inc/l2cap_signaling.h +++ /dev/null @@ -1,58 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef __L2CAP_SIGNALING_H -#define __L2CAP_SIGNALING_H - -#include -#include -#include "bluetooth.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - COMMAND_REJECT = 1, - CONNECTION_REQUEST, - CONNECTION_RESPONSE, - CONFIGURE_REQUEST, - CONFIGURE_RESPONSE, - DISCONNECTION_REQUEST, - DISCONNECTION_RESPONSE, - ECHO_REQUEST, - ECHO_RESPONSE, - INFORMATION_REQUEST, - INFORMATION_RESPONSE, - /* 0x0c - 0x11 used for AMP */ - CONNECTION_PARAMETER_UPDATE_REQUEST = 0x12, - CONNECTION_PARAMETER_UPDATE_RESPONSE, - LE_CREDIT_BASED_CONNECTION_REQUEST, - LE_CREDIT_BASED_CONNECTION_RESPONSE, - LE_FLOW_CONTROL_CREDIT, - COMMAND_REJECT_LE = 0x1F // internal to BTstack -} L2CAP_SIGNALING_COMMANDS; - -uint8_t l2cap_send_signaling_le(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr); -// uint8_t l2cap_next_sig_id(void); -// WARNING: ^^^ this API is not available in this release - -// uint16_t l2cap_next_local_cid(void); -// WARNING: ^^^ this API is not available in this release - - -#ifdef __cplusplus -} -#endif - -#endif // __L2CAP_SIGNALING_H diff --git a/bundles/mesh/inc/main.h b/bundles/mesh/inc/main.h deleted file mode 100644 index 9c835d473..000000000 --- a/bundles/mesh/inc/main.h +++ /dev/null @@ -1,375 +0,0 @@ -/** @file - * @brief Bluetooth Mesh Profile APIs. - */ - -/* - * Copyright (c) 2017 Intel Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef __BT_MESH_MAIN_H -#define __BT_MESH_MAIN_H - -/** - * @brief Bluetooth Mesh Provisioning - * @defgroup bt_mesh_prov Bluetooth Mesh Provisioning - * @ingroup bt_mesh - * @{ - */ - -typedef enum { - BT_MESH_NO_OUTPUT = 0, - BT_MESH_BLINK = BIT(0), - BT_MESH_BEEP = BIT(1), - BT_MESH_VIBRATE = BIT(2), - BT_MESH_DISPLAY_NUMBER = BIT(3), - BT_MESH_DISPLAY_STRING = BIT(4), -} bt_mesh_output_action_t; - -typedef enum { - BT_MESH_NO_INPUT = 0, - BT_MESH_PUSH = BIT(0), - BT_MESH_TWIST = BIT(1), - BT_MESH_ENTER_NUMBER = BIT(2), - BT_MESH_ENTER_STRING = BIT(3), -} bt_mesh_input_action_t; - -typedef enum { - BT_MESH_PROV_ADV = BIT(0), - BT_MESH_PROV_GATT = BIT(1), -} bt_mesh_prov_bearer_t; - -typedef enum { - BT_MESH_PROV_OOB_OTHER = BIT(0), - BT_MESH_PROV_OOB_URI = BIT(1), - BT_MESH_PROV_OOB_2D_CODE = BIT(2), - BT_MESH_PROV_OOB_BAR_CODE = BIT(3), - BT_MESH_PROV_OOB_NFC = BIT(4), - BT_MESH_PROV_OOB_NUMBER = BIT(5), - BT_MESH_PROV_OOB_STRING = BIT(6), - /* 7 - 10 are reserved */ - BT_MESH_PROV_OOB_ON_BOX = BIT(11), - BT_MESH_PROV_OOB_IN_BOX = BIT(12), - BT_MESH_PROV_OOB_ON_PAPER = BIT(13), - BT_MESH_PROV_OOB_IN_MANUAL = BIT(14), - BT_MESH_PROV_OOB_ON_DEV = BIT(15), -} bt_mesh_prov_oob_info_t; - -/** Provisioning properties & capabilities. */ -struct bt_mesh_prov { - /** The UUID that's used when advertising as unprovisioned */ - const u8_t *uuid; - - /** Optional URI. This will be advertised separately from the - * unprovisioned beacon, however the unprovisioned beacon will - * contain a hash of it so the two can be associated by the - * provisioner. - */ - const char *uri; - - /** Out of Band information field. */ - bt_mesh_prov_oob_info_t oob_info; - - /** Static OOB value */ - const u8_t *static_val; - /** Static OOB value length */ - u8_t static_val_len; - - /** Maximum size of Output OOB supported */ - u8_t output_size; - /** Supported Output OOB Actions */ - u16_t output_actions; - - /* Maximum size of Input OOB supported */ - u8_t input_size; - /** Supported Input OOB Actions */ - u16_t input_actions; - - /** @brief Output of a number is requested. - * - * This callback notifies the application that it should - * output the given number using the given action. - * - * @param act Action for outputting the number. - * @param num Number to be outputted. - * - * @return Zero on success or negative error code otherwise - */ - int (*output_number)(bt_mesh_output_action_t act, u32_t num); - - /** @brief Output of a string is requested. - * - * This callback notifies the application that it should - * display the given string to the user. - * - * @param str String to be displayed. - * - * @return Zero on success or negative error code otherwise - */ - int (*output_string)(const char *str); - - /** @brief Input is requested. - * - * This callback notifies the application that it should - * request input from the user using the given action. The - * requested input will either be a string or a number, and - * the application needs to consequently call the - * bt_mesh_input_string() or bt_mesh_input_number() functions - * once the data has been acquired from the user. - * - * @param act Action for inputting data. - * @param num Maximum size of the inputted data. - * - * @return Zero on success or negative error code otherwise - */ - int (*input)(bt_mesh_input_action_t act, u8_t size); - - /** @brief Provisioning link has been opened. - * - * This callback notifies the application that a provisioning - * link has been opened on the given provisioning bearer. - * - * @param bearer Provisioning bearer. - */ - void (*link_open)(bt_mesh_prov_bearer_t bearer); - - /** @brief Provisioning link has been closed. - * - * This callback notifies the application that a provisioning - * link has been closed on the given provisioning bearer. - * - * @param bearer Provisioning bearer. - */ - void (*link_close)(bt_mesh_prov_bearer_t bearer); - - /** @brief Provisioning is complete. - * - * This callback notifies the application that provisioning has - * been successfully completed, and that the local node has been - * assigned the specified NetKeyIndex and primary element address. - * - * @param net_idx NetKeyIndex given during provisioning. - * @param addr Primary element address. - */ - void (*complete)(u16_t net_idx, u16_t addr); - - /** @brief Node has been reset. - * - * This callback notifies the application that the local node - * has been reset and needs to be reprovisioned. The node will - * not automatically advertise as unprovisioned, rather the - * bt_mesh_prov_enable() API needs to be called to enable - * unprovisioned advertising on one or more provisioning bearers. - */ - void (*reset)(void); -}; - -/** @brief Provide provisioning input OOB string. - * - * This is intended to be called after the bt_mesh_prov input callback - * has been called with BT_MESH_ENTER_STRING as the action. - * - * @param str String. - * - * @return Zero on success or (negative) error code otherwise. - */ -int bt_mesh_input_string(const char *str); - -/** @brief Provide provisioning input OOB number. - * - * This is intended to be called after the bt_mesh_prov input callback - * has been called with BT_MESH_ENTER_NUMBER as the action. - * - * @param num Number. - * - * @return Zero on success or (negative) error code otherwise. - */ -int bt_mesh_input_number(u32_t num); - -/** @brief Enable specific provisioning bearers - * - * Enable one or more provisioning bearers. - * - * @param bearers Bit-wise or of provisioning bearers. - * - * @return Zero on success or (negative) error code otherwise. - */ -int bt_mesh_prov_enable(bt_mesh_prov_bearer_t bearers); - -/** @brief Disable specific provisioning bearers - * - * Disable one or more provisioning bearers. - * - * @param bearers Bit-wise or of provisioning bearers. - * - * @return Zero on success or (negative) error code otherwise. - */ -int bt_mesh_prov_disable(bt_mesh_prov_bearer_t bearers); - -/** - * @} - */ - -/** - * @brief Bluetooth Mesh - * @defgroup bt_mesh Bluetooth Mesh - * @ingroup bluetooth - * @{ - */ - -/* Primary Network Key index */ -#define BT_MESH_NET_PRIMARY 0x000 - -#define BT_MESH_RELAY_DISABLED 0x00 -#define BT_MESH_RELAY_ENABLED 0x01 -#define BT_MESH_RELAY_NOT_SUPPORTED 0x02 - -#define BT_MESH_BEACON_DISABLED 0x00 -#define BT_MESH_BEACON_ENABLED 0x01 - -#define BT_MESH_GATT_PROXY_DISABLED 0x00 -#define BT_MESH_GATT_PROXY_ENABLED 0x01 -#define BT_MESH_GATT_PROXY_NOT_SUPPORTED 0x02 - -#define BT_MESH_FRIEND_DISABLED 0x00 -#define BT_MESH_FRIEND_ENABLED 0x01 -#define BT_MESH_FRIEND_NOT_SUPPORTED 0x02 - -#define BT_MESH_NODE_IDENTITY_STOPPED 0x00 -#define BT_MESH_NODE_IDENTITY_RUNNING 0x01 -#define BT_MESH_NODE_IDENTITY_NOT_SUPPORTED 0x02 - -/* Features */ -#define BT_MESH_FEAT_RELAY BIT(0) -#define BT_MESH_FEAT_PROXY BIT(1) -#define BT_MESH_FEAT_FRIEND BIT(2) -#define BT_MESH_FEAT_LOW_POWER BIT(3) -#define BT_MESH_FEAT_SUPPORTED (BT_MESH_FEAT_RELAY | \ - BT_MESH_FEAT_PROXY | \ - BT_MESH_FEAT_FRIEND | \ - BT_MESH_FEAT_LOW_POWER) - -/** @brief Initialize Mesh support - * - * After calling this API, the node will not automatically advertise as - * unprovisioned, rather the bt_mesh_prov_enable() API needs to be called - * to enable unprovisioned advertising on one or more provisioning bearers. - * - * @param own_addr_type Node address type - * @param prov Node provisioning information. - * @param comp Node Composition. - * - * @return Zero on success or (negative) error code otherwise. - */ -int bt_mesh_init(u8_t own_addr_type, - const struct bt_mesh_prov *prov, - const struct bt_mesh_comp *comp); - -/** @brief Reset the state of the local Mesh node. - * - * Resets the state of the node, which means that it needs to be - * reprovisioned to become an active node in a Mesh network again. - * - * After calling this API, the node will not automatically advertise as - * unprovisioned, rather the bt_mesh_prov_enable() API needs to be called - * to enable unprovisioned advertising on one or more provisioning bearers. - * - */ -void bt_mesh_reset(void); - -/** @brief Provision the local Mesh Node. - * - * This API should normally not be used directly by the application. The - * only exception is for testing purposes where manual provisioning is - * desired without an actual external provisioner. - * - * @param net_key Network Key - * @param net_idx Network Key Index - * @param flags Provisioning Flags - * @param iv_index IV Index - * @param addr Primary element address - * @param dev_key Device Key - * - * @return Zero on success or (negative) error code otherwise. - */ -int bt_mesh_provision(const u8_t net_key[16], u16_t net_idx, - u8_t flags, u32_t iv_index, u16_t addr, - const u8_t dev_key[16]); - -/** @brief Check if the local node has been provisioned. - * - * This API can be used to check if the local node has been provisioned - * or not. It can e.g. be helpful to determine if there was a stored - * network in flash, i.e. if the network was restored after calling - * settings_load(). - * - * @return True if the node is provisioned. False otherwise. - */ -bool bt_mesh_is_provisioned(void); - -/** @brief Toggle the IV Update test mode - * - * This API is only available if the IV Update test mode has been enabled - * in Kconfig. It is needed for passing most of the IV Update qualification - * test cases. - * - * @param enable true to enable IV Update test mode, false to disable it. - */ -// void bt_mesh_iv_update_test(bool enable); -// WARNING: ^^^ this API is not available in this release - - -/** @brief Toggle the IV Update state - * - * This API is only available if the IV Update test mode has been enabled - * in Kconfig. It is needed for passing most of the IV Update qualification - * test cases. - * - * @return true if IV Update In Progress state was entered, false otherwise. - */ -// bool bt_mesh_iv_update(void); -// WARNING: ^^^ this API is not available in this release - - -/** @brief Toggle the Low Power feature of the local device - * - * Enables or disables the Low Power feature of the local device. This is - * exposed as a run-time feature, since the device might want to change - * this e.g. based on being plugged into a stable power source or running - * from a battery power source. - * - * @param enable true to enable LPN functionality, false to disable it. - * - * @return Zero on success or (negative) error code otherwise. - */ -// int bt_mesh_lpn_set(bool enable); -// WARNING: ^^^ this API is not available in this release - - -/** @brief Send out a Friend Poll message. - * - * Send a Friend Poll message to the Friend of this node. If there is no - * established Friendship the function will return an error. - * - * @return Zero on success or (negative) error code otherwise. - */ -// int bt_mesh_lpn_poll(void); -// WARNING: ^^^ this API is not available in this release - - -/** @brief Register a callback for Friendship changes. - * - * Registers a callback that will be called whenever Friendship gets - * established or is lost. - * - * @param cb Function to call when the Friendship status changes. - */ -// void bt_mesh_lpn_set_cb(void (*cb)(u16_t friend_addr, bool established)); -// WARNING: ^^^ this API is not available in this release - - -/** - * @} - */ - -#endif /* __BT_MESH_MAIN_H */ diff --git a/bundles/mesh/inc/mesh_api.h b/bundles/mesh/inc/mesh_api.h deleted file mode 100644 index 0c339f51a..000000000 --- a/bundles/mesh/inc/mesh_api.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef _MESH_API_H -#define _MESH_API_H - -#include - -#include "glue.h" -#include "access.h" -#include "nimble_npl.h" -#include "nimble_npl_os.h" -#include "timers.h" -#include "btstack_event.h" -#define NODE_FEATURE_RELAY 1 -#define NODE_FEATURE_PROXY 2 -#define NODE_FEATURE_LP 4 -#define NODE_FEATURE_FRIEND 8 - -#define NODE_USE_BLE_5_ADV 0x80 - -/** @brief Set up mesh features, provision, and composition - * - * @param features (not implemented yet) - * @param a_prov provision configuration - * @param a_comp composition - */ -void mesh_setup(uint8_t features, const struct bt_mesh_prov *a_prov, - const struct bt_mesh_comp *a_comp); - -#define MESH_MODEL_OP_CLIENT 0 -#define MESH_MODEL_OP_SERVER 1 - -/** @brief set device name for PB_GATT - * - * @param name device name - */ -void mesh_set_dev_name(const char *name); - -typedef enum -{ - MESH_PLT_PB_ADV = 1, - MESH_PLT_PB_GATT = 2 -} mesh_platform_t; - -/** @brief platform config - * - * @param platform see mesh_platform_t - * @param addr random address for advertising - * @param param additional specific data for mesh provisioning vendors (Tianmao, etc) - */ -void mesh_platform_config(mesh_platform_t platform, uint8_t *addr, uint8_t *param); - -#endif diff --git a/bundles/mesh/inc/modlog.h b/bundles/mesh/inc/modlog.h deleted file mode 100644 index 90a61c131..000000000 --- a/bundles/mesh/inc/modlog.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef H_MODLOG_ -#define H_MODLOG_ - -#include "log.h" - -#define MODLOG_MODULE_DFLT 255 - -static inline void -modlog_dummy(const char *msg, ...) -{ - printf(msg); -} - -#define MODLOG_DEBUG(ml_mod_, ml_msg_, ...) \ - modlog_dummy((ml_msg_), ##__VA_ARGS__) - -#define MODLOG_INFO(ml_mod_, ml_msg_, ...) \ - modlog_dummy((ml_msg_), ##__VA_ARGS__) - -#define MODLOG_WARN(ml_mod_, ml_msg_, ...) \ - modlog_dummy((ml_msg_), ##__VA_ARGS__) - -#define MODLOG_ERROR(ml_mod_, ml_msg_, ...) \ - modlog_dummy((ml_msg_), ##__VA_ARGS__) - -#define MODLOG_CRITICAL(ml_mod_, ml_msg_, ...) \ - modlog_dummy((ml_msg_), ##__VA_ARGS__) - -#define MODLOG(ml_lvl_, ml_mod_, ...) \ - MODLOG_ ## ml_lvl_((ml_mod_), __VA_ARGS__) - -#define MODLOG_DFLT(ml_lvl_, ...) \ - MODLOG(ml_lvl_, LOG_MODULE_DEFAULT, __VA_ARGS__) - -#endif diff --git a/bundles/mesh/inc/nimble_port_freertos.h b/bundles/mesh/inc/nimble_port_freertos.h deleted file mode 100644 index 43cbf2915..000000000 --- a/bundles/mesh/inc/nimble_port_freertos.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef _NIMBLE_PORT_FREERTOS_H -#define _NIMBLE_PORT_FREERTOS_H - -#include "nimble/nimble_npl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void nimble_port_freertos_init(TaskFunction_t host_task_fn); - -#ifdef __cplusplus -} -#endif - -#endif /* _NIMBLE_PORT_FREERTOS_H */ diff --git a/bundles/mesh/inc/os/FreeRTOS.h b/bundles/mesh/inc/os/FreeRTOS.h deleted file mode 100644 index 9d09d91af..000000000 --- a/bundles/mesh/inc/os/FreeRTOS.h +++ /dev/null @@ -1,1278 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef INC_FREERTOS_H -#define INC_FREERTOS_H - -/* - * Include the generic headers required for the FreeRTOS port being used. - */ -#include - -/* - * If stdint.h cannot be located then: - * + If using GCC ensure the -nostdint options is *not* being used. - * + Ensure the project's include path includes the directory in which your - * compiler stores stdint.h. - * + Set any compiler options necessary for it to support C99, as technically - * stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any - * other way). - * + The FreeRTOS download includes a simple stdint.h definition that can be - * used in cases where none is provided by the compiler. The files only - * contains the typedefs required to build FreeRTOS. Read the instructions - * in FreeRTOS/source/stdint.readme for more information. - */ -#include /* READ COMMENT ABOVE. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Application specific configuration options. */ -#include "FreeRTOSConfig.h" - -/* Basic FreeRTOS definitions. */ -#include "projdefs.h" - -/* Definitions specific to the port being used. */ -#include "portable.h" - -/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */ -#ifndef configUSE_NEWLIB_REENTRANT - #define configUSE_NEWLIB_REENTRANT 0 -#endif - -/* Required if struct _reent is used. */ -#if ( configUSE_NEWLIB_REENTRANT == 1 ) - #include -#endif -/* - * Check all the required application specific macros have been defined. - * These macros are application specific and (as downloaded) are defined - * within FreeRTOSConfig.h. - */ - -#ifndef configMINIMAL_STACK_SIZE - #error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value. -#endif - -#ifndef configMAX_PRIORITIES - #error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#if configMAX_PRIORITIES < 1 - #error configMAX_PRIORITIES must be defined to be greater than or equal to 1. -#endif - -#ifndef configUSE_PREEMPTION - #error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_IDLE_HOOK - #error Missing definition: configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_TICK_HOOK - #error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_16_BIT_TICKS - #error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_CO_ROUTINES - #define configUSE_CO_ROUTINES 0 -#endif - -#ifndef INCLUDE_vTaskPrioritySet - #define INCLUDE_vTaskPrioritySet 0 -#endif - -#ifndef INCLUDE_uxTaskPriorityGet - #define INCLUDE_uxTaskPriorityGet 0 -#endif - -#ifndef INCLUDE_vTaskDelete - #define INCLUDE_vTaskDelete 0 -#endif - -#ifndef INCLUDE_vTaskSuspend - #define INCLUDE_vTaskSuspend 0 -#endif - -#ifndef INCLUDE_vTaskDelayUntil - #define INCLUDE_vTaskDelayUntil 0 -#endif - -#ifndef INCLUDE_vTaskDelay - #define INCLUDE_vTaskDelay 0 -#endif - -#ifndef INCLUDE_xTaskGetIdleTaskHandle - #define INCLUDE_xTaskGetIdleTaskHandle 0 -#endif - -#ifndef INCLUDE_xTaskAbortDelay - #define INCLUDE_xTaskAbortDelay 0 -#endif - -#ifndef INCLUDE_xQueueGetMutexHolder - #define INCLUDE_xQueueGetMutexHolder 0 -#endif - -#ifndef INCLUDE_xSemaphoreGetMutexHolder - #define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder -#endif - -#ifndef INCLUDE_xTaskGetHandle - #define INCLUDE_xTaskGetHandle 0 -#endif - -#ifndef INCLUDE_uxTaskGetStackHighWaterMark - #define INCLUDE_uxTaskGetStackHighWaterMark 0 -#endif - -#ifndef INCLUDE_uxTaskGetStackHighWaterMark2 - #define INCLUDE_uxTaskGetStackHighWaterMark2 0 -#endif - -#ifndef INCLUDE_eTaskGetState - #define INCLUDE_eTaskGetState 0 -#endif - -#ifndef INCLUDE_xTaskResumeFromISR - #define INCLUDE_xTaskResumeFromISR 1 -#endif - -#ifndef INCLUDE_xTimerPendFunctionCall - #define INCLUDE_xTimerPendFunctionCall 0 -#endif - -#ifndef INCLUDE_xTaskGetSchedulerState - #define INCLUDE_xTaskGetSchedulerState 0 -#endif - -#ifndef INCLUDE_xTaskGetCurrentTaskHandle - #define INCLUDE_xTaskGetCurrentTaskHandle 0 -#endif - -#if configUSE_CO_ROUTINES != 0 - #ifndef configMAX_CO_ROUTINE_PRIORITIES - #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1. - #endif -#endif - -#ifndef configUSE_DAEMON_TASK_STARTUP_HOOK - #define configUSE_DAEMON_TASK_STARTUP_HOOK 0 -#endif - -#ifndef configUSE_APPLICATION_TASK_TAG - #define configUSE_APPLICATION_TASK_TAG 0 -#endif - -#ifndef configNUM_THREAD_LOCAL_STORAGE_POINTERS - #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0 -#endif - -#ifndef configUSE_RECURSIVE_MUTEXES - #define configUSE_RECURSIVE_MUTEXES 0 -#endif - -#ifndef configUSE_MUTEXES - #define configUSE_MUTEXES 0 -#endif - -#ifndef configUSE_TIMERS - #define configUSE_TIMERS 0 -#endif - -#ifndef configUSE_COUNTING_SEMAPHORES - #define configUSE_COUNTING_SEMAPHORES 0 -#endif - -#ifndef configUSE_ALTERNATIVE_API - #define configUSE_ALTERNATIVE_API 0 -#endif - -#ifndef portCRITICAL_NESTING_IN_TCB - #define portCRITICAL_NESTING_IN_TCB 0 -#endif - -#ifndef configMAX_TASK_NAME_LEN - #define configMAX_TASK_NAME_LEN 16 -#endif - -#ifndef configIDLE_SHOULD_YIELD - #define configIDLE_SHOULD_YIELD 1 -#endif - -#if configMAX_TASK_NAME_LEN < 1 - #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h -#endif - -#ifndef configASSERT - #define configASSERT( x ) - #define configASSERT_DEFINED 0 -#else - #define configASSERT_DEFINED 1 -#endif - -#ifndef portMEMORY_BARRIER - #define portMEMORY_BARRIER() -#endif - -/* The timers module relies on xTaskGetSchedulerState(). */ -#if configUSE_TIMERS == 1 - - #ifndef configTIMER_TASK_PRIORITY - #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_PRIORITY must also be defined. - #endif /* configTIMER_TASK_PRIORITY */ - - #ifndef configTIMER_QUEUE_LENGTH - #error If configUSE_TIMERS is set to 1 then configTIMER_QUEUE_LENGTH must also be defined. - #endif /* configTIMER_QUEUE_LENGTH */ - - #ifndef configTIMER_TASK_STACK_DEPTH - #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_STACK_DEPTH must also be defined. - #endif /* configTIMER_TASK_STACK_DEPTH */ - -#endif /* configUSE_TIMERS */ - -#ifndef portSET_INTERRUPT_MASK_FROM_ISR - #define portSET_INTERRUPT_MASK_FROM_ISR() 0 -#endif - -#ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR - #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue -#endif - -#ifndef portCLEAN_UP_TCB - #define portCLEAN_UP_TCB( pxTCB ) ( void ) pxTCB -#endif - -#ifndef portPRE_TASK_DELETE_HOOK - #define portPRE_TASK_DELETE_HOOK( pvTaskToDelete, pxYieldPending ) -#endif - -#ifndef portSETUP_TCB - #define portSETUP_TCB( pxTCB ) ( void ) pxTCB -#endif - -#ifndef configQUEUE_REGISTRY_SIZE - #define configQUEUE_REGISTRY_SIZE 0U -#endif - -#if ( configQUEUE_REGISTRY_SIZE < 1 ) - #define vQueueAddToRegistry( xQueue, pcName ) - #define vQueueUnregisterQueue( xQueue ) - #define pcQueueGetName( xQueue ) -#endif - -#ifndef portPOINTER_SIZE_TYPE - #define portPOINTER_SIZE_TYPE uint32_t -#endif - -/* Remove any unused trace macros. */ -#ifndef traceSTART - /* Used to perform any necessary initialisation - for example, open a file - into which trace is to be written. */ - #define traceSTART() -#endif - -#ifndef traceEND - /* Use to close a trace, for example close a file into which trace has been - written. */ - #define traceEND() -#endif - -#ifndef traceTASK_SWITCHED_IN - /* Called after a task has been selected to run. pxCurrentTCB holds a pointer - to the task control block of the selected task. */ - #define traceTASK_SWITCHED_IN() -#endif - -#ifndef traceINCREASE_TICK_COUNT - /* Called before stepping the tick count after waking from tickless idle - sleep. */ - #define traceINCREASE_TICK_COUNT( x ) -#endif - -#ifndef traceLOW_POWER_IDLE_BEGIN - /* Called immediately before entering tickless idle. */ - #define traceLOW_POWER_IDLE_BEGIN() -#endif - -#ifndef traceLOW_POWER_IDLE_END - /* Called when returning to the Idle task after a tickless idle. */ - #define traceLOW_POWER_IDLE_END() -#endif - -#ifndef traceTASK_SWITCHED_OUT - /* Called before a task has been selected to run. pxCurrentTCB holds a pointer - to the task control block of the task being switched out. */ - #define traceTASK_SWITCHED_OUT() -#endif - -#ifndef traceTASK_PRIORITY_INHERIT - /* Called when a task attempts to take a mutex that is already held by a - lower priority task. pxTCBOfMutexHolder is a pointer to the TCB of the task - that holds the mutex. uxInheritedPriority is the priority the mutex holder - will inherit (the priority of the task that is attempting to obtain the - muted. */ - #define traceTASK_PRIORITY_INHERIT( pxTCBOfMutexHolder, uxInheritedPriority ) -#endif - -#ifndef traceTASK_PRIORITY_DISINHERIT - /* Called when a task releases a mutex, the holding of which had resulted in - the task inheriting the priority of a higher priority task. - pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the - mutex. uxOriginalPriority is the task's configured (base) priority. */ - #define traceTASK_PRIORITY_DISINHERIT( pxTCBOfMutexHolder, uxOriginalPriority ) -#endif - -#ifndef traceBLOCKING_ON_QUEUE_RECEIVE - /* Task is about to block because it cannot read from a - queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore - upon which the read was attempted. pxCurrentTCB points to the TCB of the - task that attempted the read. */ - #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ) -#endif - -#ifndef traceBLOCKING_ON_QUEUE_PEEK - /* Task is about to block because it cannot read from a - queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore - upon which the read was attempted. pxCurrentTCB points to the TCB of the - task that attempted the read. */ - #define traceBLOCKING_ON_QUEUE_PEEK( pxQueue ) -#endif - -#ifndef traceBLOCKING_ON_QUEUE_SEND - /* Task is about to block because it cannot write to a - queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore - upon which the write was attempted. pxCurrentTCB points to the TCB of the - task that attempted the write. */ - #define traceBLOCKING_ON_QUEUE_SEND( pxQueue ) -#endif - -#ifndef configCHECK_FOR_STACK_OVERFLOW - #define configCHECK_FOR_STACK_OVERFLOW 0 -#endif - -#ifndef configRECORD_STACK_HIGH_ADDRESS - #define configRECORD_STACK_HIGH_ADDRESS 0 -#endif - -#ifndef configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H - #define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H 0 -#endif - -/* The following event macros are embedded in the kernel API calls. */ - -#ifndef traceMOVED_TASK_TO_READY_STATE - #define traceMOVED_TASK_TO_READY_STATE( pxTCB ) -#endif - -#ifndef tracePOST_MOVED_TASK_TO_READY_STATE - #define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) -#endif - -#ifndef traceQUEUE_CREATE - #define traceQUEUE_CREATE( pxNewQueue ) -#endif - -#ifndef traceQUEUE_CREATE_FAILED - #define traceQUEUE_CREATE_FAILED( ucQueueType ) -#endif - -#ifndef traceCREATE_MUTEX - #define traceCREATE_MUTEX( pxNewQueue ) -#endif - -#ifndef traceCREATE_MUTEX_FAILED - #define traceCREATE_MUTEX_FAILED() -#endif - -#ifndef traceGIVE_MUTEX_RECURSIVE - #define traceGIVE_MUTEX_RECURSIVE( pxMutex ) -#endif - -#ifndef traceGIVE_MUTEX_RECURSIVE_FAILED - #define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex ) -#endif - -#ifndef traceTAKE_MUTEX_RECURSIVE - #define traceTAKE_MUTEX_RECURSIVE( pxMutex ) -#endif - -#ifndef traceTAKE_MUTEX_RECURSIVE_FAILED - #define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex ) -#endif - -#ifndef traceCREATE_COUNTING_SEMAPHORE - #define traceCREATE_COUNTING_SEMAPHORE() -#endif - -#ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED - #define traceCREATE_COUNTING_SEMAPHORE_FAILED() -#endif - -#ifndef traceQUEUE_SEND - #define traceQUEUE_SEND( pxQueue ) -#endif - -#ifndef traceQUEUE_SEND_FAILED - #define traceQUEUE_SEND_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE - #define traceQUEUE_RECEIVE( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK - #define traceQUEUE_PEEK( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK_FAILED - #define traceQUEUE_PEEK_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK_FROM_ISR - #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE_FAILED - #define traceQUEUE_RECEIVE_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_SEND_FROM_ISR - #define traceQUEUE_SEND_FROM_ISR( pxQueue ) -#endif - -#ifndef traceQUEUE_SEND_FROM_ISR_FAILED - #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE_FROM_ISR - #define traceQUEUE_RECEIVE_FROM_ISR( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED - #define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK_FROM_ISR_FAILED - #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_DELETE - #define traceQUEUE_DELETE( pxQueue ) -#endif - -#ifndef traceTASK_CREATE - #define traceTASK_CREATE( pxNewTCB ) -#endif - -#ifndef traceTASK_CREATE_FAILED - #define traceTASK_CREATE_FAILED() -#endif - -#ifndef traceTASK_DELETE - #define traceTASK_DELETE( pxTaskToDelete ) -#endif - -#ifndef traceTASK_DELAY_UNTIL - #define traceTASK_DELAY_UNTIL( x ) -#endif - -#ifndef traceTASK_DELAY - #define traceTASK_DELAY() -#endif - -#ifndef traceTASK_PRIORITY_SET - #define traceTASK_PRIORITY_SET( pxTask, uxNewPriority ) -#endif - -#ifndef traceTASK_SUSPEND - #define traceTASK_SUSPEND( pxTaskToSuspend ) -#endif - -#ifndef traceTASK_RESUME - #define traceTASK_RESUME( pxTaskToResume ) -#endif - -#ifndef traceTASK_RESUME_FROM_ISR - #define traceTASK_RESUME_FROM_ISR( pxTaskToResume ) -#endif - -#ifndef traceTASK_INCREMENT_TICK - #define traceTASK_INCREMENT_TICK( xTickCount ) -#endif - -#ifndef traceTIMER_CREATE - #define traceTIMER_CREATE( pxNewTimer ) -#endif - -#ifndef traceTIMER_CREATE_FAILED - #define traceTIMER_CREATE_FAILED() -#endif - -#ifndef traceTIMER_COMMAND_SEND - #define traceTIMER_COMMAND_SEND( xTimer, xMessageID, xMessageValueValue, xReturn ) -#endif - -#ifndef traceTIMER_EXPIRED - #define traceTIMER_EXPIRED( pxTimer ) -#endif - -#ifndef traceTIMER_COMMAND_RECEIVED - #define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue ) -#endif - -#ifndef traceMALLOC - #define traceMALLOC( pvAddress, uiSize ) -#endif - -#ifndef traceFREE - #define traceFREE( pvAddress, uiSize ) -#endif - -#ifndef traceEVENT_GROUP_CREATE - #define traceEVENT_GROUP_CREATE( xEventGroup ) -#endif - -#ifndef traceEVENT_GROUP_CREATE_FAILED - #define traceEVENT_GROUP_CREATE_FAILED() -#endif - -#ifndef traceEVENT_GROUP_SYNC_BLOCK - #define traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor ) -#endif - -#ifndef traceEVENT_GROUP_SYNC_END - #define traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred -#endif - -#ifndef traceEVENT_GROUP_WAIT_BITS_BLOCK - #define traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor ) -#endif - -#ifndef traceEVENT_GROUP_WAIT_BITS_END - #define traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred -#endif - -#ifndef traceEVENT_GROUP_CLEAR_BITS - #define traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear ) -#endif - -#ifndef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR - #define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear ) -#endif - -#ifndef traceEVENT_GROUP_SET_BITS - #define traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet ) -#endif - -#ifndef traceEVENT_GROUP_SET_BITS_FROM_ISR - #define traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet ) -#endif - -#ifndef traceEVENT_GROUP_DELETE - #define traceEVENT_GROUP_DELETE( xEventGroup ) -#endif - -#ifndef tracePEND_FUNC_CALL - #define tracePEND_FUNC_CALL(xFunctionToPend, pvParameter1, ulParameter2, ret) -#endif - -#ifndef tracePEND_FUNC_CALL_FROM_ISR - #define tracePEND_FUNC_CALL_FROM_ISR(xFunctionToPend, pvParameter1, ulParameter2, ret) -#endif - -#ifndef traceQUEUE_REGISTRY_ADD - #define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName) -#endif - -#ifndef traceTASK_NOTIFY_TAKE_BLOCK - #define traceTASK_NOTIFY_TAKE_BLOCK() -#endif - -#ifndef traceTASK_NOTIFY_TAKE - #define traceTASK_NOTIFY_TAKE() -#endif - -#ifndef traceTASK_NOTIFY_WAIT_BLOCK - #define traceTASK_NOTIFY_WAIT_BLOCK() -#endif - -#ifndef traceTASK_NOTIFY_WAIT - #define traceTASK_NOTIFY_WAIT() -#endif - -#ifndef traceTASK_NOTIFY - #define traceTASK_NOTIFY() -#endif - -#ifndef traceTASK_NOTIFY_FROM_ISR - #define traceTASK_NOTIFY_FROM_ISR() -#endif - -#ifndef traceTASK_NOTIFY_GIVE_FROM_ISR - #define traceTASK_NOTIFY_GIVE_FROM_ISR() -#endif - -#ifndef traceSTREAM_BUFFER_CREATE_FAILED - #define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_CREATE_STATIC_FAILED - #define traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xIsMessageBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_CREATE - #define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_DELETE - #define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_RESET - #define traceSTREAM_BUFFER_RESET( xStreamBuffer ) -#endif - -#ifndef traceBLOCKING_ON_STREAM_BUFFER_SEND - #define traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_SEND - #define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent ) -#endif - -#ifndef traceSTREAM_BUFFER_SEND_FAILED - #define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_SEND_FROM_ISR - #define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent ) -#endif - -#ifndef traceBLOCKING_ON_STREAM_BUFFER_RECEIVE - #define traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_RECEIVE - #define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) -#endif - -#ifndef traceSTREAM_BUFFER_RECEIVE_FAILED - #define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_RECEIVE_FROM_ISR - #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) -#endif - -#ifndef configGENERATE_RUN_TIME_STATS - #define configGENERATE_RUN_TIME_STATS 0 -#endif - -#if ( configGENERATE_RUN_TIME_STATS == 1 ) - - #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS - #error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base. - #endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */ - - #ifndef portGET_RUN_TIME_COUNTER_VALUE - #ifndef portALT_GET_RUN_TIME_COUNTER_VALUE - #error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined. See the examples provided and the FreeRTOS web site for more information. - #endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */ - #endif /* portGET_RUN_TIME_COUNTER_VALUE */ - -#endif /* configGENERATE_RUN_TIME_STATS */ - -#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS - #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() -#endif - -#ifndef configUSE_MALLOC_FAILED_HOOK - #define configUSE_MALLOC_FAILED_HOOK 0 -#endif - -#ifndef portPRIVILEGE_BIT - #define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 ) -#endif - -#ifndef portYIELD_WITHIN_API - #define portYIELD_WITHIN_API portYIELD -#endif - -#ifndef portSUPPRESS_TICKS_AND_SLEEP - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) -#endif - -#ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP - #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 2 -#endif - -#if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2 - #error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2 -#endif - -#ifndef configUSE_TICKLESS_IDLE - #define configUSE_TICKLESS_IDLE 0 -#endif - -#ifndef configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING - #define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x ) -#endif - -#ifndef configPRE_SLEEP_PROCESSING - #define configPRE_SLEEP_PROCESSING( x ) -#endif - -#ifndef configPOST_SLEEP_PROCESSING - #define configPOST_SLEEP_PROCESSING( x ) -#endif - -#ifndef configUSE_QUEUE_SETS - #define configUSE_QUEUE_SETS 0 -#endif - -#ifndef portTASK_USES_FLOATING_POINT - #define portTASK_USES_FLOATING_POINT() -#endif - -#ifndef portALLOCATE_SECURE_CONTEXT - #define portALLOCATE_SECURE_CONTEXT( ulSecureStackSize ) -#endif - -#ifndef portDONT_DISCARD - #define portDONT_DISCARD -#endif - -#ifndef configUSE_TIME_SLICING - #define configUSE_TIME_SLICING 1 -#endif - -#ifndef configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS - #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0 -#endif - -#ifndef configUSE_STATS_FORMATTING_FUNCTIONS - #define configUSE_STATS_FORMATTING_FUNCTIONS 0 -#endif - -#ifndef portASSERT_IF_INTERRUPT_PRIORITY_INVALID - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() -#endif - -#ifndef configUSE_TRACE_FACILITY - #define configUSE_TRACE_FACILITY 0 -#endif - -#ifndef mtCOVERAGE_TEST_MARKER - #define mtCOVERAGE_TEST_MARKER() -#endif - -#ifndef mtCOVERAGE_TEST_DELAY - #define mtCOVERAGE_TEST_DELAY() -#endif - -#ifndef portASSERT_IF_IN_ISR - #define portASSERT_IF_IN_ISR() -#endif - -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#endif - -#ifndef configAPPLICATION_ALLOCATED_HEAP - #define configAPPLICATION_ALLOCATED_HEAP 0 -#endif - -#ifndef configUSE_TASK_NOTIFICATIONS - #define configUSE_TASK_NOTIFICATIONS 1 -#endif - -#ifndef configUSE_POSIX_ERRNO - #define configUSE_POSIX_ERRNO 0 -#endif - -#ifndef portTICK_TYPE_IS_ATOMIC - #define portTICK_TYPE_IS_ATOMIC 0 -#endif - -#ifndef configSUPPORT_STATIC_ALLOCATION - /* Defaults to 0 for backward compatibility. */ - #define configSUPPORT_STATIC_ALLOCATION 0 -#endif - -#ifndef configSUPPORT_DYNAMIC_ALLOCATION - /* Defaults to 1 for backward compatibility. */ - #define configSUPPORT_DYNAMIC_ALLOCATION 1 -#endif - -#ifndef configSTACK_DEPTH_TYPE - /* Defaults to uint16_t for backward compatibility, but can be overridden - in FreeRTOSConfig.h if uint16_t is too restrictive. */ - #define configSTACK_DEPTH_TYPE uint16_t -#endif - -#ifndef configMESSAGE_BUFFER_LENGTH_TYPE - /* Defaults to size_t for backward compatibility, but can be overridden - in FreeRTOSConfig.h if lengths will always be less than the number of bytes - in a size_t. */ - #define configMESSAGE_BUFFER_LENGTH_TYPE size_t -#endif - -/* Sanity check the configuration. */ -#if( configUSE_TICKLESS_IDLE != 0 ) - #if( INCLUDE_vTaskSuspend != 1 ) - #error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0 - #endif /* INCLUDE_vTaskSuspend */ -#endif /* configUSE_TICKLESS_IDLE */ - -#if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) ) - #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1. -#endif - -#if( ( configUSE_RECURSIVE_MUTEXES == 1 ) && ( configUSE_MUTEXES != 1 ) ) - #error configUSE_MUTEXES must be set to 1 to use recursive mutexes -#endif - -#ifndef configINITIAL_TICK_COUNT - #define configINITIAL_TICK_COUNT 0 -#endif - -#if( portTICK_TYPE_IS_ATOMIC == 0 ) - /* Either variables of tick type cannot be read atomically, or - portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when - the tick count is returned to the standard critical section macros. */ - #define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL() - #define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL() - #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() - #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) ) -#else - /* The tick type can be read atomically, so critical sections used when the - tick count is returned can be defined away. */ - #define portTICK_TYPE_ENTER_CRITICAL() - #define portTICK_TYPE_EXIT_CRITICAL() - #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 0 - #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) ( void ) x -#endif - -/* Definitions to allow backward compatibility with FreeRTOS versions prior to -V8 if desired. */ -#ifndef configENABLE_BACKWARD_COMPATIBILITY - #define configENABLE_BACKWARD_COMPATIBILITY 1 -#endif - -#ifndef configPRINTF - /* configPRINTF() was not defined, so define it away to nothing. To use - configPRINTF() then define it as follows (where MyPrintFunction() is - provided by the application writer): - - void MyPrintFunction(const char *pcFormat, ... ); - #define configPRINTF( X ) MyPrintFunction X - - Then call like a standard printf() function, but placing brackets around - all parameters so they are passed as a single parameter. For example: - configPRINTF( ("Value = %d", MyVariable) ); */ - #define configPRINTF( X ) -#endif - -#ifndef configMAX - /* The application writer has not provided their own MAX macro, so define - the following generic implementation. */ - #define configMAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) -#endif - -#ifndef configMIN - /* The application writer has not provided their own MAX macro, so define - the following generic implementation. */ - #define configMIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) -#endif - -#if configENABLE_BACKWARD_COMPATIBILITY == 1 - #define eTaskStateGet eTaskGetState - #define portTickType TickType_t - #define xTaskHandle TaskHandle_t - #define xQueueHandle QueueHandle_t - #define xSemaphoreHandle SemaphoreHandle_t - #define xQueueSetHandle QueueSetHandle_t - #define xQueueSetMemberHandle QueueSetMemberHandle_t - #define xTimeOutType TimeOut_t - #define xMemoryRegion MemoryRegion_t - #define xTaskParameters TaskParameters_t - #define xTaskStatusType TaskStatus_t - #define xTimerHandle TimerHandle_t - #define xCoRoutineHandle CoRoutineHandle_t - #define pdTASK_HOOK_CODE TaskHookFunction_t - #define portTICK_RATE_MS portTICK_PERIOD_MS - #define pcTaskGetTaskName pcTaskGetName - #define pcTimerGetTimerName pcTimerGetName - #define pcQueueGetQueueName pcQueueGetName - #define vTaskGetTaskInfo vTaskGetInfo - - /* Backward compatibility within the scheduler code only - these definitions - are not really required but are included for completeness. */ - #define tmrTIMER_CALLBACK TimerCallbackFunction_t - #define pdTASK_CODE TaskFunction_t - #define xListItem ListItem_t - #define xList List_t - - /* For libraries that break the list data hiding, and access list structure - members directly (which is not supposed to be done). */ - #define pxContainer pvContainer -#endif /* configENABLE_BACKWARD_COMPATIBILITY */ - -#if( configUSE_ALTERNATIVE_API != 0 ) - #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0 -#endif - -/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support even -if floating point hardware is otherwise supported by the FreeRTOS port in use. -This constant is not supported by all FreeRTOS ports that include floating -point support. */ -#ifndef configUSE_TASK_FPU_SUPPORT - #define configUSE_TASK_FPU_SUPPORT 1 -#endif - -/* Set configENABLE_MPU to 1 to enable MPU support and 0 to disable it. This is -currently used in ARMv8M ports. */ -#ifndef configENABLE_MPU - #define configENABLE_MPU 0 -#endif - -/* Set configENABLE_FPU to 1 to enable FPU support and 0 to disable it. This is -currently used in ARMv8M ports. */ -#ifndef configENABLE_FPU - #define configENABLE_FPU 1 -#endif - -/* Set configENABLE_TRUSTZONE to 1 enable TrustZone support and 0 to disable it. -This is currently used in ARMv8M ports. */ -#ifndef configENABLE_TRUSTZONE - #define configENABLE_TRUSTZONE 1 -#endif - -/* Set configRUN_FREERTOS_SECURE_ONLY to 1 to run the FreeRTOS ARMv8M port on -the Secure Side only. */ -#ifndef configRUN_FREERTOS_SECURE_ONLY - #define configRUN_FREERTOS_SECURE_ONLY 0 -#endif - -/* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using - * dynamically allocated RAM, in which case when any task is deleted it is known - * that both the task's stack and TCB need to be freed. Sometimes the - * FreeRTOSConfig.h settings only allow a task to be created using statically - * allocated RAM, in which case when any task is deleted it is known that neither - * the task's stack or TCB should be freed. Sometimes the FreeRTOSConfig.h - * settings allow a task to be created using either statically or dynamically - * allocated RAM, in which case a member of the TCB is used to record whether the - * stack and/or TCB were allocated statically or dynamically, so when a task is - * deleted the RAM that was allocated dynamically is freed again and no attempt is - * made to free the RAM that was allocated statically. - * tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a - * task to be created using either statically or dynamically allocated RAM. Note - * that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with - * a statically allocated stack and a dynamically allocated TCB. - * - * The following table lists various combinations of portUSING_MPU_WRAPPERS, - * configSUPPORT_DYNAMIC_ALLOCATION and configSUPPORT_STATIC_ALLOCATION and - * when it is possible to have both static and dynamic allocation: - * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ - * | MPU | Dynamic | Static | Available Functions | Possible Allocations | Both Dynamic and | Need Free | - * | | | | | | Static Possible | | - * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ - * | 0 | 0 | 1 | xTaskCreateStatic | TCB - Static, Stack - Static | No | No | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 0 | 1 | 0 | xTaskCreate | TCB - Dynamic, Stack - Dynamic | No | Yes | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 0 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | - * | | | | xTaskCreateStatic | 2. TCB - Static, Stack - Static | | | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 1 | 0 | 1 | xTaskCreateStatic, | TCB - Static, Stack - Static | No | No | - * | | | | xTaskCreateRestrictedStatic | | | | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 1 | 1 | 0 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | - * | | | | xTaskCreateRestricted | 2. TCB - Dynamic, Stack - Static | | | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 1 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | - * | | | | xTaskCreateStatic, | 2. TCB - Dynamic, Stack - Static | | | - * | | | | xTaskCreateRestricted, | 3. TCB - Static, Stack - Static | | | - * | | | | xTaskCreateRestrictedStatic | | | | - * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ - */ -#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( portUSING_MPU_WRAPPERS == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) || \ - ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) ) - -/* - * In line with software engineering best practice, FreeRTOS implements a strict - * data hiding policy, so the real structures used by FreeRTOS to maintain the - * state of tasks, queues, semaphores, etc. are not accessible to the application - * code. However, if the application writer wants to statically allocate such - * an object then the size of the object needs to be know. Dummy structures - * that are guaranteed to have the same size and alignment requirements of the - * real objects are used for this purpose. The dummy list and list item - * structures below are used for inclusion in such a dummy structure. - */ -struct xSTATIC_LIST_ITEM -{ - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy1; - #endif - TickType_t xDummy2; - void *pvDummy3[ 4 ]; - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy4; - #endif -}; -typedef struct xSTATIC_LIST_ITEM StaticListItem_t; - -/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ -struct xSTATIC_MINI_LIST_ITEM -{ - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy1; - #endif - TickType_t xDummy2; - void *pvDummy3[ 2 ]; -}; -typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t; - -/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ -typedef struct xSTATIC_LIST -{ - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy1; - #endif - UBaseType_t uxDummy2; - void *pvDummy3; - StaticMiniListItem_t xDummy4; - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy5; - #endif -} StaticList_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the Task structure used internally by - * FreeRTOS is not accessible to application code. However, if the application - * writer wants to statically allocate the memory required to create a task then - * the size of the task object needs to be know. The StaticTask_t structure - * below is provided for this purpose. Its sizes and alignment requirements are - * guaranteed to match those of the genuine structure, no matter which - * architecture is being used, and no matter how the values in FreeRTOSConfig.h - * are set. Its contents are somewhat obfuscated in the hope users will - * recognise that it would be unwise to make direct use of the structure members. - */ -typedef struct xSTATIC_TCB -{ - void *pxDummy1; - #if ( portUSING_MPU_WRAPPERS == 1 ) - xMPU_SETTINGS xDummy2; - #endif - StaticListItem_t xDummy3[ 2 ]; - UBaseType_t uxDummy5; - void *pxDummy6; - uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ]; - #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) ) - void *pxDummy8; - #endif - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - UBaseType_t uxDummy9; - #endif - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy10[ 2 ]; - #endif - #if ( configUSE_MUTEXES == 1 ) - UBaseType_t uxDummy12[ 2 ]; - #endif - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - void *pxDummy14; - #endif - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; - #endif - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - uint32_t ulDummy16; - #endif - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - struct _reent xDummy17; - #endif - #if ( configUSE_TASK_NOTIFICATIONS == 1 ) - uint32_t ulDummy18; - uint8_t ucDummy19; - #endif - #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - uint8_t uxDummy20; - #endif - - #if( INCLUDE_xTaskAbortDelay == 1 ) - uint8_t ucDummy21; - #endif - #if ( configUSE_POSIX_ERRNO == 1 ) - int iDummy22; - #endif -} StaticTask_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the Queue structure used internally by - * FreeRTOS is not accessible to application code. However, if the application - * writer wants to statically allocate the memory required to create a queue - * then the size of the queue object needs to be know. The StaticQueue_t - * structure below is provided for this purpose. Its sizes and alignment - * requirements are guaranteed to match those of the genuine structure, no - * matter which architecture is being used, and no matter how the values in - * FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in the hope - * users will recognise that it would be unwise to make direct use of the - * structure members. - */ -typedef struct xSTATIC_QUEUE -{ - void *pvDummy1[ 3 ]; - - union - { - void *pvDummy2; - UBaseType_t uxDummy2; - } u; - - StaticList_t xDummy3[ 2 ]; - UBaseType_t uxDummy4[ 3 ]; - uint8_t ucDummy5[ 2 ]; - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy6; - #endif - - #if ( configUSE_QUEUE_SETS == 1 ) - void *pvDummy7; - #endif - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy8; - uint8_t ucDummy9; - #endif - -} StaticQueue_t; -typedef StaticQueue_t StaticSemaphore_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the event group structure used - * internally by FreeRTOS is not accessible to application code. However, if - * the application writer wants to statically allocate the memory required to - * create an event group then the size of the event group object needs to be - * know. The StaticEventGroup_t structure below is provided for this purpose. - * Its sizes and alignment requirements are guaranteed to match those of the - * genuine structure, no matter which architecture is being used, and no matter - * how the values in FreeRTOSConfig.h are set. Its contents are somewhat - * obfuscated in the hope users will recognise that it would be unwise to make - * direct use of the structure members. - */ -typedef struct xSTATIC_EVENT_GROUP -{ - TickType_t xDummy1; - StaticList_t xDummy2; - - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy3; - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy4; - #endif - -} StaticEventGroup_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the software timer structure used - * internally by FreeRTOS is not accessible to application code. However, if - * the application writer wants to statically allocate the memory required to - * create a software timer then the size of the queue object needs to be know. - * The StaticTimer_t structure below is provided for this purpose. Its sizes - * and alignment requirements are guaranteed to match those of the genuine - * structure, no matter which architecture is being used, and no matter how the - * values in FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in - * the hope users will recognise that it would be unwise to make direct use of - * the structure members. - */ -typedef struct xSTATIC_TIMER -{ - void *pvDummy1; - StaticListItem_t xDummy2; - TickType_t xDummy3; - void *pvDummy5; - TaskFunction_t pvDummy6; - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy7; - #endif - uint8_t ucDummy8; - -} StaticTimer_t; - -/* -* In line with software engineering best practice, especially when supplying a -* library that is likely to change in future versions, FreeRTOS implements a -* strict data hiding policy. This means the stream buffer structure used -* internally by FreeRTOS is not accessible to application code. However, if -* the application writer wants to statically allocate the memory required to -* create a stream buffer then the size of the stream buffer object needs to be -* know. The StaticStreamBuffer_t structure below is provided for this purpose. -* Its size and alignment requirements are guaranteed to match those of the -* genuine structure, no matter which architecture is being used, and no matter -* how the values in FreeRTOSConfig.h are set. Its contents are somewhat -* obfuscated in the hope users will recognise that it would be unwise to make -* direct use of the structure members. -*/ -typedef struct xSTATIC_STREAM_BUFFER -{ - size_t uxDummy1[ 4 ]; - void * pvDummy2[ 3 ]; - uint8_t ucDummy3; - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy4; - #endif -} StaticStreamBuffer_t; - -/* Message buffers are built on stream buffers. */ -typedef StaticStreamBuffer_t StaticMessageBuffer_t; - -#ifdef __cplusplus -} -#endif - -#endif /* INC_FREERTOS_H */ - diff --git a/bundles/mesh/inc/os/FreeRTOSConfig.h b/bundles/mesh/inc/os/FreeRTOSConfig.h deleted file mode 100644 index dc73649d8..000000000 --- a/bundles/mesh/inc/os/FreeRTOSConfig.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef FREERTOS_CONFIG_H -#define FREERTOS_CONFIG_H - -#include "ingsoc.h" - -/*----------------------------------------------------------- - * Application specific definitions. - * - * These definitions should be adjusted for your particular hardware and - * application requirements. - * - * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE - * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. - * - * See http://www.freertos.org/a00110.html. - *----------------------------------------------------------*/ - -#define configUSE_PREEMPTION 1 -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#ifdef POWER_SAVING -#define configUSE_TICKLESS_IDLE 1 -#endif -#define configSYSTICK_CLOCK_HZ 32768 -#ifdef TARGET_FPGA -#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) -#else -#define configCPU_CLOCK_HZ ( ( unsigned long ) 48000000 ) -#endif -#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) -#define configMAX_PRIORITIES ( 15 ) -#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 20 * 1024 ) ) -#define configMAX_TASK_NAME_LEN ( 16 ) -#define configUSE_TRACE_FACILITY 0 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_QUEUE_SETS 1 -#define configUSE_TIMERS 1 -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configUSE_MALLOC_FAILED_HOOK 1 -#define configUSE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configUSE_RECURSIVE_MUTEXES 1 - -#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) -#define configTIMER_QUEUE_LENGTH 10 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE - -/* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) - -/* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */ - -#define INCLUDE_vTaskPrioritySet 1 -#define INCLUDE_uxTaskPriorityGet 1 -#define INCLUDE_vTaskDelete 1 -#define INCLUDE_vTaskCleanUpResources 0 -#define INCLUDE_vTaskSuspend 1 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 - - -/* Cortex-M specific definitions. */ -#define configPRIO_BITS __NVIC_PRIO_BITS - - -/* The lowest interrupt priority that can be used in a call to a "set priority" -function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1 << configPRIO_BITS) - 1) -/* The highest interrupt priority that can be used by any interrupt service -routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL -INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER -PRIORITY THAN THIS! (higher priorities are lower numeric values. */ -#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 0x01 -/* Interrupt priorities used by the kernel port layer itself. These are generic -to all Cortex-M ports, and do not rely on any particular library functions. */ -#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) -/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! -See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ -#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) - -void platform_raise_assertion(const char *file_name, int line_no); - -/* Normal assert() semantics without relying on the provision of an assert.h -header file. */ -#define configASSERT( x ) if( ( x ) == 0 ) { platform_raise_assertion(__MODULE__, __LINE__); } - -/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS -standard names. */ -#define vPortSVCHandler SVC_Handler -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler - -#ifdef POWER_SAVING - -#define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING(xExpectedIdleTime) \ - do { extern TickType_t sysPreSuppressTicksAndSleepProcessing(TickType_t expectedTicks); \ - xExpectedIdleTime = sysPreSuppressTicksAndSleepProcessing(xExpectedIdleTime); \ - } while (0) - -#define configPRE_SLEEP_PROCESSING(xModifiableIdleTime) \ - do { extern void sysPreSleepProcessing(TickType_t idleTime); \ - sysPreSleepProcessing(xModifiableIdleTime); \ - } while (0) - -#define configPOST_SLEEP_PROCESSING( xExpectedIdleTime ) \ - do { extern void sysPostSleepProcessing(TickType_t idleTime); \ - sysPostSleepProcessing(xModifiableIdleTime); \ - } while (0) -#else -#define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING(xExpectedIdleTime) \ - do { \ - xExpectedIdleTime = 0; \ - } while (0) -#endif - -#endif /* FREERTOS_CONFIG_H */ - diff --git a/bundles/mesh/inc/os/deprecated_definitions.h b/bundles/mesh/inc/os/deprecated_definitions.h deleted file mode 100644 index 9cece988f..000000000 --- a/bundles/mesh/inc/os/deprecated_definitions.h +++ /dev/null @@ -1,279 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef DEPRECATED_DEFINITIONS_H -#define DEPRECATED_DEFINITIONS_H - - -/* Each FreeRTOS port has a unique portmacro.h header file. Originally a -pre-processor definition was used to ensure the pre-processor found the correct -portmacro.h file for the port being used. That scheme was deprecated in favour -of setting the compiler's include path such that it found the correct -portmacro.h file - removing the need for the constant and allowing the -portmacro.h file to be located anywhere in relation to the port being used. The -definitions below remain in the code for backward compatibility only. New -projects should not use them. */ - -#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT - #include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT - #include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef GCC_MEGA_AVR - #include "../portable/GCC/ATMega323/portmacro.h" -#endif - -#ifdef IAR_MEGA_AVR - #include "../portable/IAR/ATMega323/portmacro.h" -#endif - -#ifdef MPLAB_PIC24_PORT - #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" -#endif - -#ifdef MPLAB_DSPIC_PORT - #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" -#endif - -#ifdef MPLAB_PIC18F_PORT - #include "../../Source/portable/MPLAB/PIC18F/portmacro.h" -#endif - -#ifdef MPLAB_PIC32MX_PORT - #include "../../Source/portable/MPLAB/PIC32MX/portmacro.h" -#endif - -#ifdef _FEDPICC - #include "libFreeRTOS/Include/portmacro.h" -#endif - -#ifdef SDCC_CYGNAL - #include "../../Source/portable/SDCC/Cygnal/portmacro.h" -#endif - -#ifdef GCC_ARM7 - #include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h" -#endif - -#ifdef GCC_ARM7_ECLIPSE - #include "portmacro.h" -#endif - -#ifdef ROWLEY_LPC23xx - #include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h" -#endif - -#ifdef IAR_MSP430 - #include "..\..\Source\portable\IAR\MSP430\portmacro.h" -#endif - -#ifdef GCC_MSP430 - #include "../../Source/portable/GCC/MSP430F449/portmacro.h" -#endif - -#ifdef ROWLEY_MSP430 - #include "../../Source/portable/Rowley/MSP430F449/portmacro.h" -#endif - -#ifdef ARM7_LPC21xx_KEIL_RVDS - #include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h" -#endif - -#ifdef SAM7_GCC - #include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h" -#endif - -#ifdef SAM7_IAR - #include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h" -#endif - -#ifdef SAM9XE_IAR - #include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h" -#endif - -#ifdef LPC2000_IAR - #include "..\..\Source\portable\IAR\LPC2000\portmacro.h" -#endif - -#ifdef STR71X_IAR - #include "..\..\Source\portable\IAR\STR71x\portmacro.h" -#endif - -#ifdef STR75X_IAR - #include "..\..\Source\portable\IAR\STR75x\portmacro.h" -#endif - -#ifdef STR75X_GCC - #include "..\..\Source\portable\GCC\STR75x\portmacro.h" -#endif - -#ifdef STR91X_IAR - #include "..\..\Source\portable\IAR\STR91x\portmacro.h" -#endif - -#ifdef GCC_H8S - #include "../../Source/portable/GCC/H8S2329/portmacro.h" -#endif - -#ifdef GCC_AT91FR40008 - #include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h" -#endif - -#ifdef RVDS_ARMCM3_LM3S102 - #include "../../Source/portable/RVDS/ARM_CM3/portmacro.h" -#endif - -#ifdef GCC_ARMCM3_LM3S102 - #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" -#endif - -#ifdef GCC_ARMCM3 - #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" -#endif - -#ifdef IAR_ARM_CM3 - #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" -#endif - -#ifdef IAR_ARMCM3_LM - #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" -#endif - -#ifdef HCS12_CODE_WARRIOR - #include "../../Source/portable/CodeWarrior/HCS12/portmacro.h" -#endif - -#ifdef MICROBLAZE_GCC - #include "../../Source/portable/GCC/MicroBlaze/portmacro.h" -#endif - -#ifdef TERN_EE - #include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h" -#endif - -#ifdef GCC_HCS12 - #include "../../Source/portable/GCC/HCS12/portmacro.h" -#endif - -#ifdef GCC_MCF5235 - #include "../../Source/portable/GCC/MCF5235/portmacro.h" -#endif - -#ifdef COLDFIRE_V2_GCC - #include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h" -#endif - -#ifdef COLDFIRE_V2_CODEWARRIOR - #include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h" -#endif - -#ifdef GCC_PPC405 - #include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h" -#endif - -#ifdef GCC_PPC440 - #include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h" -#endif - -#ifdef _16FX_SOFTUNE - #include "..\..\Source\portable\Softune\MB96340\portmacro.h" -#endif - -#ifdef BCC_INDUSTRIAL_PC_PORT - /* A short file name has to be used in place of the normal - FreeRTOSConfig.h when using the Borland compiler. */ - #include "frconfig.h" - #include "..\portable\BCC\16BitDOS\PC\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef BCC_FLASH_LITE_186_PORT - /* A short file name has to be used in place of the normal - FreeRTOSConfig.h when using the Borland compiler. */ - #include "frconfig.h" - #include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef __GNUC__ - #ifdef __AVR32_AVR32A__ - #include "portmacro.h" - #endif -#endif - -#ifdef __ICCAVR32__ - #ifdef __CORE__ - #if __CORE__ == __AVR32A__ - #include "portmacro.h" - #endif - #endif -#endif - -#ifdef __91467D - #include "portmacro.h" -#endif - -#ifdef __96340 - #include "portmacro.h" -#endif - - -#ifdef __IAR_V850ES_Fx3__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Jx3__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Jx3_L__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Jx2__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Hx2__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_78K0R_Kx3__ - #include "../../Source/portable/IAR/78K0R/portmacro.h" -#endif - -#ifdef __IAR_78K0R_Kx3L__ - #include "../../Source/portable/IAR/78K0R/portmacro.h" -#endif - -#endif /* DEPRECATED_DEFINITIONS_H */ - diff --git a/bundles/mesh/inc/os/event_groups.h b/bundles/mesh/inc/os/event_groups.h deleted file mode 100644 index 6b4e72db5..000000000 --- a/bundles/mesh/inc/os/event_groups.h +++ /dev/null @@ -1,777 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef EVENT_GROUPS_H -#define EVENT_GROUPS_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h" must appear in source files before "include event_groups.h" -#endif - -/* FreeRTOS includes. */ -#include "timers.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * An event group is a collection of bits to which an application can assign a - * meaning. For example, an application may create an event group to convey - * the status of various CAN bus related events in which bit 0 might mean "A CAN - * message has been received and is ready for processing", bit 1 might mean "The - * application has queued a message that is ready for sending onto the CAN - * network", and bit 2 might mean "It is time to send a SYNC message onto the - * CAN network" etc. A task can then test the bit values to see which events - * are active, and optionally enter the Blocked state to wait for a specified - * bit or a group of specified bits to be active. To continue the CAN bus - * example, a CAN controlling task can enter the Blocked state (and therefore - * not consume any processing time) until either bit 0, bit 1 or bit 2 are - * active, at which time the bit that was actually active would inform the task - * which action it had to take (process a received message, send a message, or - * send a SYNC). - * - * The event groups implementation contains intelligence to avoid race - * conditions that would otherwise occur were an application to use a simple - * variable for the same purpose. This is particularly important with respect - * to when a bit within an event group is to be cleared, and when bits have to - * be set and then tested atomically - as is the case where event groups are - * used to create a synchronisation point between multiple tasks (a - * 'rendezvous'). - * - * \defgroup EventGroup - */ - - - -/** - * event_groups.h - * - * Type by which event groups are referenced. For example, a call to - * xEventGroupCreate() returns an EventGroupHandle_t variable that can then - * be used as a parameter to other event group functions. - * - * \defgroup EventGroupHandle_t EventGroupHandle_t - * \ingroup EventGroup - */ -struct EventGroupDef_t; -typedef struct EventGroupDef_t * EventGroupHandle_t; - -/* - * The type that holds event bits always matches TickType_t - therefore the - * number of bits it holds is set by configUSE_16_BIT_TICKS (16 bits if set to 1, - * 32 bits if set to 0. - * - * \defgroup EventBits_t EventBits_t - * \ingroup EventGroup - */ -typedef TickType_t EventBits_t; - -/** - * event_groups.h - *
- EventGroupHandle_t xEventGroupCreate( void );
- 
- * - * Create a new event group. - * - * Internally, within the FreeRTOS implementation, event groups use a [small] - * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGropuCreate() then the required memory is - * automatically dynamically allocated inside the xEventGroupCreate() function. - * (see http://www.freertos.org/a00111.html). If an event group is created - * using xEventGropuCreateStatic() then the application writer must instead - * provide the memory that will get used by the event group. - * xEventGroupCreateStatic() therefore allows an event group to be created - * without using any dynamic memory allocation. - * - * Although event groups are not related to ticks, for internal implementation - * reasons the number of bits available for use in an event group is dependent - * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If - * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit - * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has - * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store - * event bits within an event group. - * - * @return If the event group was created then a handle to the event group is - * returned. If there was insufficient FreeRTOS heap available to create the - * event group then NULL is returned. See http://www.freertos.org/a00111.html - * - * Example usage: -
-	// Declare a variable to hold the created event group.
-	EventGroupHandle_t xCreatedEventGroup;
-
-	// Attempt to create the event group.
-	xCreatedEventGroup = xEventGroupCreate();
-
-	// Was the event group created successfully?
-	if( xCreatedEventGroup == NULL )
-	{
-		// The event group was not created because there was insufficient
-		// FreeRTOS heap available.
-	}
-	else
-	{
-		// The event group was created.
-	}
-   
- * \defgroup xEventGroupCreate xEventGroupCreate - * \ingroup EventGroup - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) -// EventGroupHandle_t xEventGroupCreate( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -#endif - -/** - * event_groups.h - *
- EventGroupHandle_t xEventGroupCreateStatic( EventGroupHandle_t * pxEventGroupBuffer );
- 
- * - * Create a new event group. - * - * Internally, within the FreeRTOS implementation, event groups use a [small] - * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGropuCreate() then the required memory is - * automatically dynamically allocated inside the xEventGroupCreate() function. - * (see http://www.freertos.org/a00111.html). If an event group is created - * using xEventGropuCreateStatic() then the application writer must instead - * provide the memory that will get used by the event group. - * xEventGroupCreateStatic() therefore allows an event group to be created - * without using any dynamic memory allocation. - * - * Although event groups are not related to ticks, for internal implementation - * reasons the number of bits available for use in an event group is dependent - * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If - * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit - * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has - * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store - * event bits within an event group. - * - * @param pxEventGroupBuffer pxEventGroupBuffer must point to a variable of type - * StaticEventGroup_t, which will be then be used to hold the event group's data - * structures, removing the need for the memory to be allocated dynamically. - * - * @return If the event group was created then a handle to the event group is - * returned. If pxEventGroupBuffer was NULL then NULL is returned. - * - * Example usage: -
-	// StaticEventGroup_t is a publicly accessible structure that has the same
-	// size and alignment requirements as the real event group structure.  It is
-	// provided as a mechanism for applications to know the size of the event
-	// group (which is dependent on the architecture and configuration file
-	// settings) without breaking the strict data hiding policy by exposing the
-	// real event group internals.  This StaticEventGroup_t variable is passed
-	// into the xSemaphoreCreateEventGroupStatic() function and is used to store
-	// the event group's data structures
-	StaticEventGroup_t xEventGroupBuffer;
-
-	// Create the event group without dynamically allocating any memory.
-	xEventGroup = xEventGroupCreateStatic( &xEventGroupBuffer );
-   
- */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) -// EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupWaitBits( 	EventGroupHandle_t xEventGroup,
-										const EventBits_t uxBitsToWaitFor,
-										const BaseType_t xClearOnExit,
-										const BaseType_t xWaitForAllBits,
-										const TickType_t xTicksToWait );
- 
- * - * [Potentially] block to wait for one or more bits to be set within a - * previously created event group. - * - * This function cannot be called from an interrupt. - * - * @param xEventGroup The event group in which the bits are being tested. The - * event group must have previously been created using a call to - * xEventGroupCreate(). - * - * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test - * inside the event group. For example, to wait for bit 0 and/or bit 2 set - * uxBitsToWaitFor to 0x05. To wait for bits 0 and/or bit 1 and/or bit 2 set - * uxBitsToWaitFor to 0x07. Etc. - * - * @param xClearOnExit If xClearOnExit is set to pdTRUE then any bits within - * uxBitsToWaitFor that are set within the event group will be cleared before - * xEventGroupWaitBits() returns if the wait condition was met (if the function - * returns for a reason other than a timeout). If xClearOnExit is set to - * pdFALSE then the bits set in the event group are not altered when the call to - * xEventGroupWaitBits() returns. - * - * @param xWaitForAllBits If xWaitForAllBits is set to pdTRUE then - * xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor - * are set or the specified block time expires. If xWaitForAllBits is set to - * pdFALSE then xEventGroupWaitBits() will return when any one of the bits set - * in uxBitsToWaitFor is set or the specified block time expires. The block - * time is specified by the xTicksToWait parameter. - * - * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait - * for one/all (depending on the xWaitForAllBits value) of the bits specified by - * uxBitsToWaitFor to become set. - * - * @return The value of the event group at the time either the bits being waited - * for became set, or the block time expired. Test the return value to know - * which bits were set. If xEventGroupWaitBits() returned because its timeout - * expired then not all the bits being waited for will be set. If - * xEventGroupWaitBits() returned because the bits it was waiting for were set - * then the returned value is the event group value before any bits were - * automatically cleared in the case that xClearOnExit parameter was set to - * pdTRUE. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-   const TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
-
-		// Wait a maximum of 100ms for either bit 0 or bit 4 to be set within
-		// the event group.  Clear the bits before exiting.
-		uxBits = xEventGroupWaitBits(
-					xEventGroup,	// The event group being tested.
-					BIT_0 | BIT_4,	// The bits within the event group to wait for.
-					pdTRUE,			// BIT_0 and BIT_4 should be cleared before returning.
-					pdFALSE,		// Don't wait for both bits, either bit will do.
-					xTicksToWait );	// Wait a maximum of 100ms for either bit to be set.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// xEventGroupWaitBits() returned because both bits were set.
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// xEventGroupWaitBits() returned because just BIT_0 was set.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// xEventGroupWaitBits() returned because just BIT_4 was set.
-		}
-		else
-		{
-			// xEventGroupWaitBits() returned because xTicksToWait ticks passed
-			// without either BIT_0 or BIT_4 becoming set.
-		}
-   }
-   
- * \defgroup xEventGroupWaitBits xEventGroupWaitBits - * \ingroup EventGroup - */ -// EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * event_groups.h - *
-	EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );
- 
- * - * Clear bits within an event group. This function cannot be called from an - * interrupt. - * - * @param xEventGroup The event group in which the bits are to be cleared. - * - * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear - * in the event group. For example, to clear bit 3 only, set uxBitsToClear to - * 0x08. To clear bit 3 and bit 0 set uxBitsToClear to 0x09. - * - * @return The value of the event group before the specified bits were cleared. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-
-		// Clear bit 0 and bit 4 in xEventGroup.
-		uxBits = xEventGroupClearBits(
-								xEventGroup,	// The event group being updated.
-								BIT_0 | BIT_4 );// The bits being cleared.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// Both bit 0 and bit 4 were set before xEventGroupClearBits() was
-			// called.  Both will now be clear (not set).
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// Bit 0 was set before xEventGroupClearBits() was called.  It will
-			// now be clear.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// Bit 4 was set before xEventGroupClearBits() was called.  It will
-			// now be clear.
-		}
-		else
-		{
-			// Neither bit 0 nor bit 4 were set in the first place.
-		}
-   }
-   
- * \defgroup xEventGroupClearBits xEventGroupClearBits - * \ingroup EventGroup - */ -// EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * event_groups.h - *
-	BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
- 
- * - * A version of xEventGroupClearBits() that can be called from an interrupt. - * - * Setting bits in an event group is not a deterministic operation because there - * are an unknown number of tasks that may be waiting for the bit or bits being - * set. FreeRTOS does not allow nondeterministic operations to be performed - * while interrupts are disabled, so protects event groups that are accessed - * from tasks by suspending the scheduler rather than disabling interrupts. As - * a result event groups cannot be accessed directly from an interrupt service - * routine. Therefore xEventGroupClearBitsFromISR() sends a message to the - * timer task to have the clear operation performed in the context of the timer - * task. - * - * @param xEventGroup The event group in which the bits are to be cleared. - * - * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear. - * For example, to clear bit 3 only, set uxBitsToClear to 0x08. To clear bit 3 - * and bit 0 set uxBitsToClear to 0x09. - * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned - * if the timer service queue was full. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   // An event group which it is assumed has already been created by a call to
-   // xEventGroupCreate().
-   EventGroupHandle_t xEventGroup;
-
-   void anInterruptHandler( void )
-   {
-		// Clear bit 0 and bit 4 in xEventGroup.
-		xResult = xEventGroupClearBitsFromISR(
-							xEventGroup,	 // The event group being updated.
-							BIT_0 | BIT_4 ); // The bits being set.
-
-		if( xResult == pdPASS )
-		{
-			// The message was posted successfully.
-		}
-  }
-   
- * \defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR - * \ingroup EventGroup - */ -#if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; -#else - #define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ) -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
- 
- * - * Set bits within an event group. - * This function cannot be called from an interrupt. xEventGroupSetBitsFromISR() - * is a version that can be called from an interrupt. - * - * Setting bits in an event group will automatically unblock tasks that are - * blocked waiting for the bits. - * - * @param xEventGroup The event group in which the bits are to be set. - * - * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. - * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 - * and bit 0 set uxBitsToSet to 0x09. - * - * @return The value of the event group at the time the call to - * xEventGroupSetBits() returns. There are two reasons why the returned value - * might have the bits specified by the uxBitsToSet parameter cleared. First, - * if setting a bit results in a task that was waiting for the bit leaving the - * blocked state then it is possible the bit will be cleared automatically - * (see the xClearBitOnExit parameter of xEventGroupWaitBits()). Second, any - * unblocked (or otherwise Ready state) task that has a priority above that of - * the task that called xEventGroupSetBits() will execute and may change the - * event group value before the call to xEventGroupSetBits() returns. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-
-		// Set bit 0 and bit 4 in xEventGroup.
-		uxBits = xEventGroupSetBits(
-							xEventGroup,	// The event group being updated.
-							BIT_0 | BIT_4 );// The bits being set.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// Both bit 0 and bit 4 remained set when the function returned.
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// Bit 0 remained set when the function returned, but bit 4 was
-			// cleared.  It might be that bit 4 was cleared automatically as a
-			// task that was waiting for bit 4 was removed from the Blocked
-			// state.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// Bit 4 remained set when the function returned, but bit 0 was
-			// cleared.  It might be that bit 0 was cleared automatically as a
-			// task that was waiting for bit 0 was removed from the Blocked
-			// state.
-		}
-		else
-		{
-			// Neither bit 0 nor bit 4 remained set.  It might be that a task
-			// was waiting for both of the bits to be set, and the bits were
-			// cleared as the task left the Blocked state.
-		}
-   }
-   
- * \defgroup xEventGroupSetBits xEventGroupSetBits - * \ingroup EventGroup - */ -// EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * event_groups.h - *
-	BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );
- 
- * - * A version of xEventGroupSetBits() that can be called from an interrupt. - * - * Setting bits in an event group is not a deterministic operation because there - * are an unknown number of tasks that may be waiting for the bit or bits being - * set. FreeRTOS does not allow nondeterministic operations to be performed in - * interrupts or from critical sections. Therefore xEventGroupSetBitsFromISR() - * sends a message to the timer task to have the set operation performed in the - * context of the timer task - where a scheduler lock is used in place of a - * critical section. - * - * @param xEventGroup The event group in which the bits are to be set. - * - * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. - * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 - * and bit 0 set uxBitsToSet to 0x09. - * - * @param pxHigherPriorityTaskWoken As mentioned above, calling this function - * will result in a message being sent to the timer daemon task. If the - * priority of the timer daemon task is higher than the priority of the - * currently running task (the task the interrupt interrupted) then - * *pxHigherPriorityTaskWoken will be set to pdTRUE by - * xEventGroupSetBitsFromISR(), indicating that a context switch should be - * requested before the interrupt exits. For that reason - * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the - * example code below. - * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned - * if the timer service queue was full. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   // An event group which it is assumed has already been created by a call to
-   // xEventGroupCreate().
-   EventGroupHandle_t xEventGroup;
-
-   void anInterruptHandler( void )
-   {
-   BaseType_t xHigherPriorityTaskWoken, xResult;
-
-		// xHigherPriorityTaskWoken must be initialised to pdFALSE.
-		xHigherPriorityTaskWoken = pdFALSE;
-
-		// Set bit 0 and bit 4 in xEventGroup.
-		xResult = xEventGroupSetBitsFromISR(
-							xEventGroup,	// The event group being updated.
-							BIT_0 | BIT_4   // The bits being set.
-							&xHigherPriorityTaskWoken );
-
-		// Was the message posted successfully?
-		if( xResult == pdPASS )
-		{
-			// If xHigherPriorityTaskWoken is now set to pdTRUE then a context
-			// switch should be requested.  The macro used is port specific and
-			// will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() -
-			// refer to the documentation page for the port being used.
-			portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-		}
-  }
-   
- * \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR - * \ingroup EventGroup - */ -#if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -#else - #define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ) -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupSync(	EventGroupHandle_t xEventGroup,
-									const EventBits_t uxBitsToSet,
-									const EventBits_t uxBitsToWaitFor,
-									TickType_t xTicksToWait );
- 
- * - * Atomically set bits within an event group, then wait for a combination of - * bits to be set within the same event group. This functionality is typically - * used to synchronise multiple tasks, where each task has to wait for the other - * tasks to reach a synchronisation point before proceeding. - * - * This function cannot be used from an interrupt. - * - * The function will return before its block time expires if the bits specified - * by the uxBitsToWait parameter are set, or become set within that time. In - * this case all the bits specified by uxBitsToWait will be automatically - * cleared before the function returns. - * - * @param xEventGroup The event group in which the bits are being tested. The - * event group must have previously been created using a call to - * xEventGroupCreate(). - * - * @param uxBitsToSet The bits to set in the event group before determining - * if, and possibly waiting for, all the bits specified by the uxBitsToWait - * parameter are set. - * - * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test - * inside the event group. For example, to wait for bit 0 and bit 2 set - * uxBitsToWaitFor to 0x05. To wait for bits 0 and bit 1 and bit 2 set - * uxBitsToWaitFor to 0x07. Etc. - * - * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait - * for all of the bits specified by uxBitsToWaitFor to become set. - * - * @return The value of the event group at the time either the bits being waited - * for became set, or the block time expired. Test the return value to know - * which bits were set. If xEventGroupSync() returned because its timeout - * expired then not all the bits being waited for will be set. If - * xEventGroupSync() returned because all the bits it was waiting for were - * set then the returned value is the event group value before any bits were - * automatically cleared. - * - * Example usage: -
- // Bits used by the three tasks.
- #define TASK_0_BIT		( 1 << 0 )
- #define TASK_1_BIT		( 1 << 1 )
- #define TASK_2_BIT		( 1 << 2 )
-
- #define ALL_SYNC_BITS ( TASK_0_BIT | TASK_1_BIT | TASK_2_BIT )
-
- // Use an event group to synchronise three tasks.  It is assumed this event
- // group has already been created elsewhere.
- EventGroupHandle_t xEventBits;
-
- void vTask0( void *pvParameters )
- {
- EventBits_t uxReturn;
- TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
-
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 0 in the event flag to note this task has reached the
-		// sync point.  The other two tasks will set the other two bits defined
-		// by ALL_SYNC_BITS.  All three tasks have reached the synchronisation
-		// point when all the ALL_SYNC_BITS are set.  Wait a maximum of 100ms
-		// for this to happen.
-		uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xTicksToWait );
-
-		if( ( uxReturn & ALL_SYNC_BITS ) == ALL_SYNC_BITS )
-		{
-			// All three tasks reached the synchronisation point before the call
-			// to xEventGroupSync() timed out.
-		}
-	}
- }
-
- void vTask1( void *pvParameters )
- {
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 1 in the event flag to note this task has reached the
-		// synchronisation point.  The other two tasks will set the other two
-		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
-		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
-		// indefinitely for this to happen.
-		xEventGroupSync( xEventBits, TASK_1_BIT, ALL_SYNC_BITS, portMAX_DELAY );
-
-		// xEventGroupSync() was called with an indefinite block time, so
-		// this task will only reach here if the syncrhonisation was made by all
-		// three tasks, so there is no need to test the return value.
-	 }
- }
-
- void vTask2( void *pvParameters )
- {
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 2 in the event flag to note this task has reached the
-		// synchronisation point.  The other two tasks will set the other two
-		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
-		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
-		// indefinitely for this to happen.
-		xEventGroupSync( xEventBits, TASK_2_BIT, ALL_SYNC_BITS, portMAX_DELAY );
-
-		// xEventGroupSync() was called with an indefinite block time, so
-		// this task will only reach here if the syncrhonisation was made by all
-		// three tasks, so there is no need to test the return value.
-	}
- }
-
- 
- * \defgroup xEventGroupSync xEventGroupSync - * \ingroup EventGroup - */ -// EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - - -/** - * event_groups.h - *
-	EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup );
- 
- * - * Returns the current value of the bits in an event group. This function - * cannot be used from an interrupt. - * - * @param xEventGroup The event group being queried. - * - * @return The event group bits at the time xEventGroupGetBits() was called. - * - * \defgroup xEventGroupGetBits xEventGroupGetBits - * \ingroup EventGroup - */ -#define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 ) - -/** - * event_groups.h - *
-	EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup );
- 
- * - * A version of xEventGroupGetBits() that can be called from an ISR. - * - * @param xEventGroup The event group being queried. - * - * @return The event group bits at the time xEventGroupGetBitsFromISR() was called. - * - * \defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR - * \ingroup EventGroup - */ -// EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * event_groups.h - *
-	void xEventGroupDelete( EventGroupHandle_t xEventGroup );
- 
- * - * Delete an event group that was previously created by a call to - * xEventGroupCreate(). Tasks that are blocked on the event group will be - * unblocked and obtain 0 as the event group's value. - * - * @param xEventGroup The event group being deleted. - */ -// void vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* For internal use only. */ -// void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - - -#if (configUSE_TRACE_FACILITY == 1) - UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) PRIVILEGED_FUNCTION; - void vEventGroupSetNumber( void* xEventGroup, UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* EVENT_GROUPS_H */ - - diff --git a/bundles/mesh/inc/os/list.h b/bundles/mesh/inc/os/list.h deleted file mode 100644 index 2fb6775ff..000000000 --- a/bundles/mesh/inc/os/list.h +++ /dev/null @@ -1,412 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/* - * This is the list implementation used by the scheduler. While it is tailored - * heavily for the schedulers needs, it is also available for use by - * application code. - * - * list_ts can only store pointers to list_item_ts. Each ListItem_t contains a - * numeric value (xItemValue). Most of the time the lists are sorted in - * descending item value order. - * - * Lists are created already containing one list item. The value of this - * item is the maximum possible that can be stored, it is therefore always at - * the end of the list and acts as a marker. The list member pxHead always - * points to this marker - even though it is at the tail of the list. This - * is because the tail contains a wrap back pointer to the true head of - * the list. - * - * In addition to it's value, each list item contains a pointer to the next - * item in the list (pxNext), a pointer to the list it is in (pxContainer) - * and a pointer to back to the object that contains it. These later two - * pointers are included for efficiency of list manipulation. There is - * effectively a two way link between the object containing the list item and - * the list item itself. - * - * - * \page ListIntroduction List Implementation - * \ingroup FreeRTOSIntro - */ - -#ifndef INC_FREERTOS_H - #error FreeRTOS.h must be included before list.h -#endif - -#ifndef LIST_H -#define LIST_H - -/* - * The list structure members are modified from within interrupts, and therefore - * by rights should be declared volatile. However, they are only modified in a - * functionally atomic way (within critical sections of with the scheduler - * suspended) and are either passed by reference into a function or indexed via - * a volatile variable. Therefore, in all use cases tested so far, the volatile - * qualifier can be omitted in order to provide a moderate performance - * improvement without adversely affecting functional behaviour. The assembly - * instructions generated by the IAR, ARM and GCC compilers when the respective - * compiler's options were set for maximum optimisation has been inspected and - * deemed to be as intended. That said, as compiler technology advances, and - * especially if aggressive cross module optimisation is used (a use case that - * has not been exercised to any great extend) then it is feasible that the - * volatile qualifier will be needed for correct optimisation. It is expected - * that a compiler removing essential code because, without the volatile - * qualifier on the list structure members and with aggressive cross module - * optimisation, the compiler deemed the code unnecessary will result in - * complete and obvious failure of the scheduler. If this is ever experienced - * then the volatile qualifier can be inserted in the relevant places within the - * list structures by simply defining configLIST_VOLATILE to volatile in - * FreeRTOSConfig.h (as per the example at the bottom of this comment block). - * If configLIST_VOLATILE is not defined then the preprocessor directives below - * will simply #define configLIST_VOLATILE away completely. - * - * To use volatile list structure members then add the following line to - * FreeRTOSConfig.h (without the quotes): - * "#define configLIST_VOLATILE volatile" - */ -#ifndef configLIST_VOLATILE - #define configLIST_VOLATILE -#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Macros that can be used to place known values within the list structures, -then check that the known values do not get corrupted during the execution of -the application. These may catch the list data structures being overwritten in -memory. They will not catch data errors caused by incorrect configuration or -use of FreeRTOS.*/ -#if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) - /* Define the macros to do nothing. */ - #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE - #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE - #define listFIRST_LIST_INTEGRITY_CHECK_VALUE - #define listSECOND_LIST_INTEGRITY_CHECK_VALUE - #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) - #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) - #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) - #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) - #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) - #define listTEST_LIST_INTEGRITY( pxList ) -#else - /* Define macros that add new members into the list structures. */ - #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1; - #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2; - #define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1; - #define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2; - - /* Define macros that set the new structure members to known values. */ - #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE - #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE - #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE - #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE - - /* Define macros that will assert if one of the structure members does not - contain its expected value. */ - #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) - #define listTEST_LIST_INTEGRITY( pxList ) configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) -#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */ - - -/* - * Definition of the only type of object that a list can contain. - */ -struct xLIST; -struct xLIST_ITEM -{ - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ - struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */ - struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */ - void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ - struct xLIST * configLIST_VOLATILE pxContainer; /*< Pointer to the list in which this list item is placed (if any). */ - listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ -}; -typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */ - -struct xMINI_LIST_ITEM -{ - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE TickType_t xItemValue; - struct xLIST_ITEM * configLIST_VOLATILE pxNext; - struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; -}; -typedef struct xMINI_LIST_ITEM MiniListItem_t; - -/* - * Definition of the type of queue used by the scheduler. - */ -typedef struct xLIST -{ - listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - volatile UBaseType_t uxNumberOfItems; - ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ - MiniListItem_t xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ - listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ -} List_t; - -/* - * Access macro to set the owner of a list item. The owner of a list item - * is the object (usually a TCB) that contains the list item. - * - * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER - * \ingroup LinkedList - */ -#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner ) ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) ) - -/* - * Access macro to get the owner of a list item. The owner of a list item - * is the object (usually a TCB) that contains the list item. - * - * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER - * \ingroup LinkedList - */ -#define listGET_LIST_ITEM_OWNER( pxListItem ) ( ( pxListItem )->pvOwner ) - -/* - * Access macro to set the value of the list item. In most cases the value is - * used to sort the list in descending order. - * - * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( ( pxListItem )->xItemValue = ( xValue ) ) - -/* - * Access macro to retrieve the value of the list item. The value can - * represent anything - for example the priority of a task, or the time at - * which a task should be unblocked. - * - * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue ) - -/* - * Access macro to retrieve the value of the list item at the head of a given - * list. - * - * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext->xItemValue ) - -/* - * Return the list item at the head of the list. - * - * \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY - * \ingroup LinkedList - */ -#define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext ) - -/* - * Return the list item at the head of the list. - * - * \page listGET_NEXT listGET_NEXT - * \ingroup LinkedList - */ -#define listGET_NEXT( pxListItem ) ( ( pxListItem )->pxNext ) - -/* - * Return the list item that marks the end of the list - * - * \page listGET_END_MARKER listGET_END_MARKER - * \ingroup LinkedList - */ -#define listGET_END_MARKER( pxList ) ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) ) - -/* - * Access macro to determine if a list contains any items. The macro will - * only have the value true if the list is empty. - * - * \page listLIST_IS_EMPTY listLIST_IS_EMPTY - * \ingroup LinkedList - */ -#define listLIST_IS_EMPTY( pxList ) ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE ) - -/* - * Access macro to return the number of items in the list. - */ -#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems ) - -/* - * Access function to obtain the owner of the next entry in a list. - * - * The list member pxIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list - * and returns that entry's pxOwner parameter. Using multiple calls to this - * function it is therefore possible to move through every item contained in - * a list. - * - * The pxOwner parameter of a list item is a pointer to the object that owns - * the list item. In the scheduler this is normally a task control block. - * The pxOwner parameter effectively creates a two way link between the list - * item and its owner. - * - * @param pxTCB pxTCB is set to the address of the owner of the next list item. - * @param pxList The list from which the next item owner is to be returned. - * - * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY - * \ingroup LinkedList - */ -#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \ -{ \ -List_t * const pxConstList = ( pxList ); \ - /* Increment the index to the next item and return the item, ensuring */ \ - /* we don't return the marker used at the end of the list. */ \ - ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ - if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) ) \ - { \ - ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ - } \ - ( pxTCB ) = ( pxConstList )->pxIndex->pvOwner; \ -} - - -/* - * Access function to obtain the owner of the first entry in a list. Lists - * are normally sorted in ascending item value order. - * - * This function returns the pxOwner member of the first item in the list. - * The pxOwner parameter of a list item is a pointer to the object that owns - * the list item. In the scheduler this is normally a task control block. - * The pxOwner parameter effectively creates a two way link between the list - * item and its owner. - * - * @param pxList The list from which the owner of the head item is to be - * returned. - * - * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY - * \ingroup LinkedList - */ -#define listGET_OWNER_OF_HEAD_ENTRY( pxList ) ( (&( ( pxList )->xListEnd ))->pxNext->pvOwner ) - -/* - * Check to see if a list item is within a list. The list item maintains a - * "container" pointer that points to the list it is in. All this macro does - * is check to see if the container and the list match. - * - * @param pxList The list we want to know if the list item is within. - * @param pxListItem The list item we want to know if is in the list. - * @return pdTRUE if the list item is in the list, otherwise pdFALSE. - */ -#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) ) - -/* - * Return the list a list item is contained within (referenced from). - * - * @param pxListItem The list item being queried. - * @return A pointer to the List_t object that references the pxListItem - */ -#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pxContainer ) - -/* - * This provides a crude means of knowing if a list has been initialised, as - * pxList->xListEnd.xItemValue is set to portMAX_DELAY by the vListInitialise() - * function. - */ -#define listLIST_IS_INITIALISED( pxList ) ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY ) - -/* - * Must be called before a list is used! This initialises all the members - * of the list structure and inserts the xListEnd item into the list as a - * marker to the back of the list. - * - * @param pxList Pointer to the list being initialised. - * - * \page vListInitialise vListInitialise - * \ingroup LinkedList - */ -void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION; - -/* - * Must be called before a list item is used. This sets the list container to - * null so the item does not think that it is already contained in a list. - * - * @param pxItem Pointer to the list item being initialised. - * - * \page vListInitialiseItem vListInitialiseItem - * \ingroup LinkedList - */ -void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION; - -/* - * Insert a list item into a list. The item will be inserted into the list in - * a position determined by its item value (descending item value order). - * - * @param pxList The list into which the item is to be inserted. - * - * @param pxNewListItem The item that is to be placed in the list. - * - * \page vListInsert vListInsert - * \ingroup LinkedList - */ -void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; - -/* - * Insert a list item into a list. The item will be inserted in a position - * such that it will be the last item within the list returned by multiple - * calls to listGET_OWNER_OF_NEXT_ENTRY. - * - * The list member pxIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list. - * Placing an item in a list using vListInsertEnd effectively places the item - * in the list position pointed to by pxIndex. This means that every other - * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before - * the pxIndex parameter again points to the item being inserted. - * - * @param pxList The list into which the item is to be inserted. - * - * @param pxNewListItem The list item to be inserted into the list. - * - * \page vListInsertEnd vListInsertEnd - * \ingroup LinkedList - */ -void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; - -/* - * Remove an item from a list. The list item has a pointer to the list that - * it is in, so only the list item need be passed into the function. - * - * @param uxListRemove The item to be removed. The item will remove itself from - * the list pointed to by it's pxContainer parameter. - * - * @return The number of items that remain in the list after the list item has - * been removed. - * - * \page uxListRemove uxListRemove - * \ingroup LinkedList - */ -UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION; - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bundles/mesh/inc/os/mpu_wrappers.h b/bundles/mesh/inc/os/mpu_wrappers.h deleted file mode 100644 index 711393f6a..000000000 --- a/bundles/mesh/inc/os/mpu_wrappers.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef MPU_WRAPPERS_H -#define MPU_WRAPPERS_H - -/* This file redefines API functions to be called through a wrapper macro, but -only for ports that are using the MPU. */ -#ifdef portUSING_MPU_WRAPPERS - - /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is - included from queue.c or task.c to prevent it from having an effect within - those files. */ - #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - - /* - * Map standard (non MPU) API functions to equivalents that start - * "MPU_". This will cause the application code to call the MPU_ - * version, which wraps the non-MPU version with privilege promoting - * then demoting code, so the kernel code always runs will full - * privileges. - */ - - /* Map standard tasks.h API functions to the MPU equivalents. */ - #define xTaskCreate MPU_xTaskCreate - #define xTaskCreateStatic MPU_xTaskCreateStatic - #define xTaskCreateRestricted MPU_xTaskCreateRestricted - #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions - #define vTaskDelete MPU_vTaskDelete - #define vTaskDelay MPU_vTaskDelay - #define vTaskDelayUntil MPU_vTaskDelayUntil - #define xTaskAbortDelay MPU_xTaskAbortDelay - #define uxTaskPriorityGet MPU_uxTaskPriorityGet - #define eTaskGetState MPU_eTaskGetState - #define vTaskGetInfo MPU_vTaskGetInfo - #define vTaskPrioritySet MPU_vTaskPrioritySet - #define vTaskSuspend MPU_vTaskSuspend - #define vTaskResume MPU_vTaskResume - #define vTaskSuspendAll MPU_vTaskSuspendAll - #define xTaskResumeAll MPU_xTaskResumeAll - #define xTaskGetTickCount MPU_xTaskGetTickCount - #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks - #define pcTaskGetName MPU_pcTaskGetName - #define xTaskGetHandle MPU_xTaskGetHandle - #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark - #define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2 - #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag - #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag - #define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer - #define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer - #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook - #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle - #define uxTaskGetSystemState MPU_uxTaskGetSystemState - #define vTaskList MPU_vTaskList - #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats - #define xTaskGetIdleRunTimeCounter MPU_xTaskGetIdleRunTimeCounter - #define xTaskGenericNotify MPU_xTaskGenericNotify - #define xTaskNotifyWait MPU_xTaskNotifyWait - #define ulTaskNotifyTake MPU_ulTaskNotifyTake - #define xTaskNotifyStateClear MPU_xTaskNotifyStateClear - - #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle - #define vTaskSetTimeOutState MPU_vTaskSetTimeOutState - #define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut - #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState - - /* Map standard queue.h API functions to the MPU equivalents. */ - #define xQueueGenericSend MPU_xQueueGenericSend - #define xQueueReceive MPU_xQueueReceive - #define xQueuePeek MPU_xQueuePeek - #define xQueueSemaphoreTake MPU_xQueueSemaphoreTake - #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting - #define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable - #define vQueueDelete MPU_vQueueDelete - #define xQueueCreateMutex MPU_xQueueCreateMutex - #define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic - #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore - #define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic - #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder - #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive - #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive - #define xQueueGenericCreate MPU_xQueueGenericCreate - #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic - #define xQueueCreateSet MPU_xQueueCreateSet - #define xQueueAddToSet MPU_xQueueAddToSet - #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet - #define xQueueSelectFromSet MPU_xQueueSelectFromSet - #define xQueueGenericReset MPU_xQueueGenericReset - - #if( configQUEUE_REGISTRY_SIZE > 0 ) - #define vQueueAddToRegistry MPU_vQueueAddToRegistry - #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue - #define pcQueueGetName MPU_pcQueueGetName - #endif - - /* Map standard timer.h API functions to the MPU equivalents. */ - #define xTimerCreate MPU_xTimerCreate - #define xTimerCreateStatic MPU_xTimerCreateStatic - #define pvTimerGetTimerID MPU_pvTimerGetTimerID - #define vTimerSetTimerID MPU_vTimerSetTimerID - #define xTimerIsTimerActive MPU_xTimerIsTimerActive - #define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle - #define xTimerPendFunctionCall MPU_xTimerPendFunctionCall - #define pcTimerGetName MPU_pcTimerGetName - #define vTimerSetReloadMode MPU_vTimerSetReloadMode - #define xTimerGetPeriod MPU_xTimerGetPeriod - #define xTimerGetExpiryTime MPU_xTimerGetExpiryTime - #define xTimerGenericCommand MPU_xTimerGenericCommand - - /* Map standard event_group.h API functions to the MPU equivalents. */ - #define xEventGroupCreate MPU_xEventGroupCreate - #define xEventGroupCreateStatic MPU_xEventGroupCreateStatic - #define xEventGroupWaitBits MPU_xEventGroupWaitBits - #define xEventGroupClearBits MPU_xEventGroupClearBits - #define xEventGroupSetBits MPU_xEventGroupSetBits - #define xEventGroupSync MPU_xEventGroupSync - #define vEventGroupDelete MPU_vEventGroupDelete - - /* Map standard message/stream_buffer.h API functions to the MPU - equivalents. */ - #define xStreamBufferSend MPU_xStreamBufferSend - #define xStreamBufferReceive MPU_xStreamBufferReceive - #define xStreamBufferNextMessageLengthBytes MPU_xStreamBufferNextMessageLengthBytes - #define vStreamBufferDelete MPU_vStreamBufferDelete - #define xStreamBufferIsFull MPU_xStreamBufferIsFull - #define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty - #define xStreamBufferReset MPU_xStreamBufferReset - #define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable - #define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable - #define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel - #define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate - #define xStreamBufferGenericCreateStatic MPU_xStreamBufferGenericCreateStatic - - - /* Remove the privileged function macro, but keep the PRIVILEGED_DATA - macro so applications can place data in privileged access sections - (useful when using statically allocated objects). */ - #define PRIVILEGED_FUNCTION - #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) - #define FREERTOS_SYSTEM_CALL - - #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ - - /* Ensure API functions go in the privileged execution section. */ - #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions"))) - #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) - #define FREERTOS_SYSTEM_CALL __attribute__((section( "freertos_system_calls"))) - - #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ - -#else /* portUSING_MPU_WRAPPERS */ - - #define PRIVILEGED_FUNCTION - #define PRIVILEGED_DATA - #define FREERTOS_SYSTEM_CALL - #define portUSING_MPU_WRAPPERS 0 - -#endif /* portUSING_MPU_WRAPPERS */ - - -#endif /* MPU_WRAPPERS_H */ - diff --git a/bundles/mesh/inc/os/os_mbuf.h b/bundles/mesh/inc/os/os_mbuf.h deleted file mode 100644 index 76afcd16a..000000000 --- a/bundles/mesh/inc/os/os_mbuf.h +++ /dev/null @@ -1,716 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * @addtogroup OSKernel - * @{ - * @defgroup OSMbuf Chained Memory Buffers - * @{ - */ - - -#ifndef _OS_MBUF_H -#define _OS_MBUF_H - -#include "os/os.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * A mbuf pool from which to allocate mbufs. This contains a pointer to the os - * mempool to allocate mbufs out of, the total number of elements in the pool, - * and the amount of "user" data in a non-packet header mbuf. The total pool - * size, in bytes, should be: - * os_mbuf_count * (omp_databuf_len + sizeof(struct os_mbuf)) - */ -struct os_mbuf_pool { - /** - * Total length of the databuf in each mbuf. This is the size of the - * mempool block, minus the mbuf header - */ - uint16_t omp_databuf_len; - /** - * The memory pool which to allocate mbufs out of - */ - struct os_mempool *omp_pool; - - STAILQ_ENTRY(os_mbuf_pool) omp_next; -}; - - -/** - * A packet header structure that preceeds the mbuf packet headers. - */ -struct os_mbuf_pkthdr { - /** - * Overall length of the packet. - */ - uint16_t omp_len; - /** - * Flags - */ - uint16_t omp_flags; - - STAILQ_ENTRY(os_mbuf_pkthdr) omp_next; -}; - -/** - * Chained memory buffer. - */ -struct os_mbuf { - /** - * Current pointer to data in the structure - */ - uint8_t *om_data; - /** - * Flags associated with this buffer, see OS_MBUF_F_* defintions - */ - uint8_t om_flags; - /** - * Length of packet header - */ - uint8_t om_pkthdr_len; - /** - * Length of data in this buffer - */ - uint16_t om_len; - - /** - * The mbuf pool this mbuf was allocated out of - */ - struct os_mbuf_pool *om_omp; - - SLIST_ENTRY(os_mbuf) om_next; - - /** - * Pointer to the beginning of the data, after this buffer - */ - uint8_t om_databuf[0]; -}; - -/** - * Structure representing a queue of mbufs. - */ -struct os_mqueue { - STAILQ_HEAD(, os_mbuf_pkthdr) mq_head; - /** Event to post when new buffers are available on the queue. */ - struct ble_npl_event mq_ev; -}; - -/* - * Given a flag number, provide the mask for it - * - * @param __n The number of the flag in the mask - */ -#define OS_MBUF_F_MASK(__n) (1 << (__n)) - -/* - * Checks whether a given mbuf is a packet header mbuf - * - * @param __om The mbuf to check - */ -#define OS_MBUF_IS_PKTHDR(__om) \ - ((__om)->om_pkthdr_len >= sizeof (struct os_mbuf_pkthdr)) - -/** Get a packet header pointer given an mbuf pointer */ -#define OS_MBUF_PKTHDR(__om) ((struct os_mbuf_pkthdr *) \ - ((uint8_t *)&(__om)->om_data + sizeof(struct os_mbuf))) - -/** Given a mbuf packet header pointer, return a pointer to the mbuf */ -#define OS_MBUF_PKTHDR_TO_MBUF(__hdr) \ - (struct os_mbuf *)((uint8_t *)(__hdr) - sizeof(struct os_mbuf)) - -/** - * Gets the length of an entire mbuf chain. The specified mbuf must have a - * packet header. - */ -#define OS_MBUF_PKTLEN(__om) (OS_MBUF_PKTHDR(__om)->omp_len) - -/** - * Access the data of a mbuf, and cast it to type - * - * @param __om The mbuf to access, and cast - * @param __type The type to cast it to - */ -#define OS_MBUF_DATA(__om, __type) \ - (__type) ((__om)->om_data) - -/** - * Access the "user header" in the head of an mbuf chain. - * - * @param om Pointer to the head of an mbuf chain. - */ -#define OS_MBUF_USRHDR(om) \ - (void *)((uint8_t *)om + sizeof (struct os_mbuf) + \ - sizeof (struct os_mbuf_pkthdr)) - -/** - * Retrieves the length of the user header in an mbuf. - * - * @param om Pointer to the mbuf to query. - */ -#define OS_MBUF_USRHDR_LEN(om) \ - ((om)->om_pkthdr_len - sizeof (struct os_mbuf_pkthdr)) - - -/** @cond INTERNAL_HIDDEN */ - -/* - * Called by OS_MBUF_LEADINGSPACE() macro - */ -static inline uint16_t -_os_mbuf_leadingspace(struct os_mbuf *om) -{ -// uint16_t startoff; - uint16_t startoff; -// uint16_t leadingspace; - uint16_t leadingspace; - - startoff = 0; - if (OS_MBUF_IS_PKTHDR(om)) { - startoff = om->om_pkthdr_len; - } - - leadingspace = (uint16_t) (OS_MBUF_DATA(om, uint8_t *) - - ((uint8_t *) &om->om_databuf[0] + startoff)); - - return (leadingspace); -} - -/** @endcond */ - -/** - * Returns the leading space (space at the beginning) of the mbuf. - * Works on both packet header, and regular mbufs, as it accounts - * for the additional space allocated to the packet header. - * - * @param __omp Is the mbuf pool (which contains packet header length.) - * @param __om Is the mbuf in that pool to get the leadingspace for - * - * @return Amount of leading space available in the mbuf - */ -#define OS_MBUF_LEADINGSPACE(__om) _os_mbuf_leadingspace(__om) - - -/** @cond INTERNAL_HIDDEN */ - -/* Called by OS_MBUF_TRAILINGSPACE() macro. */ -static inline uint16_t -_os_mbuf_trailingspace(struct os_mbuf *om) -{ - struct os_mbuf_pool *omp; - - omp = om->om_omp; - - return (&om->om_databuf[0] + omp->omp_databuf_len) - - (om->om_data + om->om_len); -} - -/** @endcond */ - -/** - * Returns the trailing space (space at the end) of the mbuf. - * Works on both packet header and regular mbufs. - * - * @param __omp The mbuf pool for this mbuf - * @param __om Is the mbuf in that pool to get trailing space for - * - * @return The amount of trailing space available in the mbuf - */ -#define OS_MBUF_TRAILINGSPACE(__om) _os_mbuf_trailingspace(__om) - - -/** - * Initializes an mqueue. An mqueue is a queue of mbufs that ties to a - * particular task's event queue. Mqueues form a helper API around a common - * paradigm: wait on an event queue until at least one packet is available, - * then process a queue of packets. - * - * When mbufs are available on the queue, an event OS_EVENT_T_MQUEUE_DATA - * will be posted to the task's mbuf queue. - * - * @param mq The mqueue to initialize - * @param ev_cb The callback to associate with the mqeueue - * event. Typically, this callback pulls each - * packet off the mqueue and processes them. - * @param arg The argument to associate with the mqueue event. - * - * @return 0 on success, non-zero on failure. - */ -// int os_mqueue_init(struct os_mqueue *mq, ble_npl_event_fn *ev_cb, void *arg); -typedef int (*f_os_mqueue_init)(struct os_mqueue *mq, ble_npl_event_fn *ev_cb, void *arg); -#define os_mqueue_init ((f_os_mqueue_init)(0x000285bf)) - - -/** - * Remove and return a single mbuf from the mbuf queue. Does not block. - * - * @param mq The mbuf queue to pull an element off of. - * - * @return The next mbuf in the queue, or NULL if queue has no mbufs. - */ -// struct os_mbuf *os_mqueue_get(struct os_mqueue *); -typedef struct os_mbuf * (*f_os_mqueue_get)(struct os_mqueue *); -#define os_mqueue_get ((f_os_mqueue_get)(0x00028599)) - - -/** - * Adds a packet (i.e. packet header mbuf) to an mqueue. The event associated - * with the mqueue gets posted to the specified eventq. - * - * @param mq The mbuf queue to append the mbuf to. - * @param evq The event queue to post an event to. - * @param m The mbuf to append to the mbuf queue. - * - * @return 0 on success, non-zero on failure. - */ -// int os_mqueue_put(struct os_mqueue *, struct ble_npl_eventq *, struct os_mbuf *); -typedef int (*f_os_mqueue_put)(struct os_mqueue *, struct ble_npl_eventq *, struct os_mbuf *); -#define os_mqueue_put ((f_os_mqueue_put)(0x000285d1)) - - -/** - * MSYS is a system level mbuf registry. Allows the system to share - * packet buffers amongst the various networking stacks that can be running - * simultaeneously. - * - * Mbuf pools are created in the system initialization code, and then when - * a mbuf is allocated out of msys, it will try and find the best fit based - * upon estimated mbuf size. - * - * os_msys_register() registers a mbuf pool with MSYS, and allows MSYS to - * allocate mbufs out of it. - * - * @param new_pool The pool to register with MSYS - * - * @return 0 on success, non-zero on failure - */ -// int os_msys_register(struct os_mbuf_pool *); -typedef int (*f_os_msys_register)(struct os_mbuf_pool *); -#define os_msys_register ((f_os_msys_register)(0x000286b9)) - - -/** - * Allocate a mbuf from msys. Based upon the data size requested, - * os_msys_get() will choose the mbuf pool that has the best fit. - * - * @param dsize The estimated size of the data being stored in the mbuf - * @param leadingspace The amount of leadingspace to allocate in the mbuf - * - * @return A freshly allocated mbuf on success, NULL on failure. - */ -// struct os_mbuf *os_msys_get(uint16_t dsize, uint16_t leadingspace); -typedef struct os_mbuf * (*f_os_msys_get)(uint16_t dsize, uint16_t leadingspace); -#define os_msys_get ((f_os_msys_get)(0x00028625)) - - -/** - * De-registers all mbuf pools from msys. - */ -// void os_msys_reset(void); -typedef void (*f_os_msys_reset)(void); -#define os_msys_reset ((f_os_msys_reset)(0x000286f5)) - - -/** - * Allocate a packet header structure from the MSYS pool. See - * os_msys_register() for a description of MSYS. - * - * @param dsize The estimated size of the data being stored in the mbuf - * @param user_hdr_len The length to allocate for the packet header structure - * - * @return A freshly allocated mbuf on success, NULL on failure. - */ -// struct os_mbuf *os_msys_get_pkthdr(uint16_t dsize, uint16_t user_hdr_len); -typedef struct os_mbuf * (*f_os_msys_get_pkthdr)(uint16_t dsize, uint16_t user_hdr_len); -#define os_msys_get_pkthdr ((f_os_msys_get_pkthdr)(0x0002863d)) - - -/** - * Count the number of blocks in all the mbuf pools that are allocated. - * - * @return total number of blocks allocated in Msys - */ -// int os_msys_count(void); -typedef int (*f_os_msys_count)(void); -#define os_msys_count ((f_os_msys_count)(0x00028609)) - - -/** - * Return the number of free blocks in Msys - * - * @return Number of free blocks available in Msys - */ -// int os_msys_num_free(void); -typedef int (*f_os_msys_num_free)(void); -#define os_msys_num_free ((f_os_msys_num_free)(0x0002869d)) - - -/** - * Initialize a pool of mbufs. - * - * @param omp The mbuf pool to initialize - * @param mp The memory pool that will hold this mbuf pool - * @param buf_len The length of the buffer itself. - * @param nbufs The number of buffers in the pool - * - * @return 0 on success, error code on failure. - */ -// int os_mbuf_pool_init(struct os_mbuf_pool *, struct os_mempool *mp, -// uint16_t, uint16_t); -typedef int (*f_os_mbuf_pool_init)(struct os_mbuf_pool *, struct os_mempool *mp, uint16_t, uint16_t); -#define os_mbuf_pool_init ((f_os_mbuf_pool_init)(0x00028307)) - - -/** - * Get an mbuf from the mbuf pool. The mbuf is allocated, and initialized - * prior to being returned. - * - * @param omp The mbuf pool to return the packet from - * @param leadingspace The amount of leadingspace to put before the data - * section by default. - * - * @return An initialized mbuf on success, and NULL on failure. - */ -// struct os_mbuf *os_mbuf_get(struct os_mbuf_pool *omp, uint16_t); -typedef struct os_mbuf * (*f_os_mbuf_get)(struct os_mbuf_pool *omp, uint16_t); -#define os_mbuf_get ((f_os_mbuf_get)(0x0002828d)) - - -/** - * Allocate a new packet header mbuf out of the os_mbuf_pool. - * - * @param omp The mbuf pool to allocate out of - * @param user_pkthdr_len The packet header length to reserve for the caller. - * - * @return A freshly allocated mbuf on success, NULL on failure. - */ -// struct os_mbuf *os_mbuf_get_pkthdr(struct os_mbuf_pool *omp, -// uint8_t pkthdr_len); -typedef struct os_mbuf * (*f_os_mbuf_get_pkthdr)(struct os_mbuf_pool *omp, uint8_t pkthdr_len); -#define os_mbuf_get_pkthdr ((f_os_mbuf_get_pkthdr)(0x000282b9)) - - -/** - * Duplicate a chain of mbufs. Return the start of the duplicated chain. - * - * @param omp The mbuf pool to duplicate out of - * @param om The mbuf chain to duplicate - * - * @return A pointer to the new chain of mbufs - */ -// struct os_mbuf *os_mbuf_dup(struct os_mbuf *m); -typedef struct os_mbuf * (*f_os_mbuf_dup)(struct os_mbuf *m); -#define os_mbuf_dup ((f_os_mbuf_dup)(0x0002819f)) - - -/** - * Locates the specified absolute offset within an mbuf chain. The offset - * can be one past than the total length of the chain, but no greater. - * - * @param om The start of the mbuf chain to seek within. - * @param off The absolute address to find. - * @param out_off On success, this points to the relative offset - * within the returned mbuf. - * - * @return The mbuf containing the specified offset on - * success. - * NULL if the specified offset is out of bounds. - */ -// struct os_mbuf *os_mbuf_off(const struct os_mbuf *om, int off, -// uint16_t *out_off); -typedef struct os_mbuf * (*f_os_mbuf_off)(const struct os_mbuf *om, int off, uint16_t *out_off); -#define os_mbuf_off ((f_os_mbuf_off)(0x000282e9)) - - - -/* - * Copy data from an mbuf chain starting "off" bytes from the beginning, - * continuing for "len" bytes, into the indicated buffer. - * - * @param m The mbuf chain to copy from - * @param off The offset into the mbuf chain to begin copying from - * @param len The length of the data to copy - * @param dst The destination buffer to copy into - * - * @return 0 on success; - * -1 if the mbuf does not contain enough data. - */ -// int os_mbuf_copydata(const struct os_mbuf *m, int off, int len, void *dst); -typedef int (*f_os_mbuf_copydata)(const struct os_mbuf *m, int off, int len, void *dst); -#define os_mbuf_copydata ((f_os_mbuf_copydata)(0x000280c9)) - - -/** - * Append data onto a mbuf - * - * @param om The mbuf to append the data onto - * @param data The data to append onto the mbuf - * @param len The length of the data to append - * - * @return 0 on success, and an error code on failure - */ -// int os_mbuf_append(struct os_mbuf *m, const void *, uint16_t); -typedef int (*f_os_mbuf_append)(struct os_mbuf *m, const void *, uint16_t); -#define os_mbuf_append ((f_os_mbuf_append)(0x00027e81)) - - -/** - * Reads data from one mbuf and appends it to another. On error, the specified - * data range may be partially appended. Neither mbuf is required to contain - * an mbuf packet header. - * - * @param dst The mbuf to append to. - * @param src The mbuf to copy data from. - * @param src_off The absolute offset within the source mbuf - * chain to read from. - * @param len The number of bytes to append. - * - * @return 0 on success; - * OS_EINVAL if the specified range extends beyond - * the end of the source mbuf chain. - */ -// int os_mbuf_appendfrom(struct os_mbuf *dst, const struct os_mbuf *src, -// uint16_t src_off, uint16_t len); -typedef int (*f_os_mbuf_appendfrom)(struct os_mbuf *dst, const struct os_mbuf *src, uint16_t src_off, uint16_t len); -#define os_mbuf_appendfrom ((f_os_mbuf_appendfrom)(0x00027f19)) - - -/** - * Release a mbuf back to the pool - * - * @param omp The Mbuf pool to release back to - * @param om The Mbuf to release back to the pool - * - * @return 0 on success, -1 on failure - */ -// int os_mbuf_free(struct os_mbuf *mb); -typedef int (*f_os_mbuf_free)(struct os_mbuf *mb); -#define os_mbuf_free ((f_os_mbuf_free)(0x0002825f)) - - -/** - * Free a chain of mbufs - * - * @param omp The mbuf pool to free the chain of mbufs into - * @param om The starting mbuf of the chain to free back into the pool - * - * @return 0 on success, -1 on failure - */ -// int os_mbuf_free_chain(struct os_mbuf *om); -typedef int (*f_os_mbuf_free_chain)(struct os_mbuf *om); -#define os_mbuf_free_chain ((f_os_mbuf_free_chain)(0x00028277)) - - -/** - * Adjust the length of a mbuf, trimming either from the head or the tail - * of the mbuf. - * - * @param mp The mbuf chain to adjust - * @param req_len The length to trim from the mbuf. If positive, trims - * from the head of the mbuf, if negative, trims from the - * tail of the mbuf. - */ -// void os_mbuf_adj(struct os_mbuf *mp, int req_len); -typedef void (*f_os_mbuf_adj)(struct os_mbuf *mp, int req_len); -#define os_mbuf_adj ((f_os_mbuf_adj)(0x00027de9)) - - - -/** - * Performs a memory compare of the specified region of an mbuf chain against a - * flat buffer. - * - * @param om The start of the mbuf chain to compare. - * @param off The offset within the mbuf chain to start the - * comparison. - * @param data The flat buffer to compare. - * @param len The length of the flat buffer. - * - * @return 0 if both memory regions are identical; - * A memcmp return code if there is a mismatch; - * INT_MAX if the mbuf is too short. - */ -// int os_mbuf_cmpf(const struct os_mbuf *om, int off, const void *data, int len); -typedef int (*f_os_mbuf_cmpf)(const struct os_mbuf *om, int off, const void *data, int len); -#define os_mbuf_cmpf ((f_os_mbuf_cmpf)(0x00027f6f)) - - -/** - * Compares the contents of two mbuf chains. The ranges of the two chains to - * be compared are specified via the two offset parameters and the len - * parameter. Neither mbuf chain is required to contain a packet header. - * - * @param om1 The first mbuf chain to compare. - * @param offset1 The absolute offset within om1 at which to - * start the comparison. - * @param om2 The second mbuf chain to compare. - * @param offset2 The absolute offset within om2 at which to - * start the comparison. - * @param len The number of bytes to compare. - * - * @return 0 if both mbuf segments are identical; - * A memcmp() return code if the segment contents - * differ; - * INT_MAX if a specified range extends beyond the - * end of its corresponding mbuf chain. - */ -// int os_mbuf_cmpm(const struct os_mbuf *om1, uint16_t offset1, -// const struct os_mbuf *om2, uint16_t offset2, -// uint16_t len); -typedef int (*f_os_mbuf_cmpm)(const struct os_mbuf *om1, uint16_t offset1, const struct os_mbuf *om2, uint16_t offset2, uint16_t len); -#define os_mbuf_cmpm ((f_os_mbuf_cmpm)(0x00027fcf)) - - -/** - * Increases the length of an mbuf chain by adding data to the front. If there - * is insufficient room in the leading mbuf, additional mbufs are allocated and - * prepended as necessary. If this function fails to allocate an mbuf, the - * entire chain is freed. - * - * The specified mbuf chain does not need to contain a packet header. - * - * @param omp The mbuf pool to allocate from. - * @param om The head of the mbuf chain. - * @param len The number of bytes to prepend. - * - * @return The new head of the chain on success; - * NULL on failure. - */ -// struct os_mbuf *os_mbuf_prepend(struct os_mbuf *om, int len); -typedef struct os_mbuf * (*f_os_mbuf_prepend)(struct os_mbuf *om, int len); -#define os_mbuf_prepend ((f_os_mbuf_prepend)(0x00028311)) - - -/** - * Prepends a chunk of empty data to the specified mbuf chain and ensures the - * chunk is contiguous. If either operation fails, the specified mbuf chain is - * freed and NULL is returned. - * - * @param om The mbuf chain to prepend to. - * @param len The number of bytes to prepend and pullup. - * - * @return The modified mbuf on success; - * NULL on failure (and the mbuf chain is freed). - */ -// struct os_mbuf *os_mbuf_prepend_pullup(struct os_mbuf *om, uint16_t len); -typedef struct os_mbuf * (*f_os_mbuf_prepend_pullup)(struct os_mbuf *om, uint16_t len); -#define os_mbuf_prepend_pullup ((f_os_mbuf_prepend_pullup)(0x00028393)) - - -/** - * Copies the contents of a flat buffer into an mbuf chain, starting at the - * specified destination offset. If the mbuf is too small for the source data, - * it is extended as necessary. If the destination mbuf contains a packet - * header, the header length is updated. - * - * @param omp The mbuf pool to allocate from. - * @param om The mbuf chain to copy into. - * @param off The offset within the chain to copy to. - * @param src The source buffer to copy from. - * @param len The number of bytes to copy. - * - * @return 0 on success; nonzero on failure. - */ -// int os_mbuf_copyinto(struct os_mbuf *om, int off, const void *src, int len); -typedef int (*f_os_mbuf_copyinto)(struct os_mbuf *om, int off, const void *src, int len); -#define os_mbuf_copyinto ((f_os_mbuf_copyinto)(0x00028121)) - - -/** - * Attaches a second mbuf chain onto the end of the first. If the first chain - * contains a packet header, the header's length is updated. If the second - * chain has a packet header, its header is cleared. - * - * @param first The mbuf chain being attached to. - * @param second The mbuf chain that gets attached. - */ -// void os_mbuf_concat(struct os_mbuf *first, struct os_mbuf *second); -typedef void (*f_os_mbuf_concat)(struct os_mbuf *first, struct os_mbuf *second); -#define os_mbuf_concat ((f_os_mbuf_concat)(0x0002808d)) - - - -/** - * Increases the length of an mbuf chain by the specified amount. If there is - * not sufficient room in the last buffer, a new buffer is allocated and - * appended to the chain. It is an error to request more data than can fit in - * a single buffer. - * - * @param omp - * @param om The head of the chain to extend. - * @param len The number of bytes to extend by. - * - * @return A pointer to the new data on success; - * NULL on failure. - */ -// void *os_mbuf_extend(struct os_mbuf *om, uint16_t len); -typedef void * (*f_os_mbuf_extend)(struct os_mbuf *om, uint16_t len); -#define os_mbuf_extend ((f_os_mbuf_extend)(0x0002820f)) - - -/** - * Rearrange a mbuf chain so that len bytes are contiguous, - * and in the data area of an mbuf (so that OS_MBUF_DATA() will - * work on a structure of size len.) Returns the resulting - * mbuf chain on success, free's it and returns NULL on failure. - * - * If there is room, it will add up to "max_protohdr - len" - * extra bytes to the contiguous region, in an attempt to avoid being - * called next time. - * - * @param omp The mbuf pool to take the mbufs out of - * @param om The mbuf chain to make contiguous - * @param len The number of bytes in the chain to make contiguous - * - * @return The contiguous mbuf chain on success, NULL on failure. - */ -// struct os_mbuf *os_mbuf_pullup(struct os_mbuf *om, uint16_t len); -typedef struct os_mbuf * (*f_os_mbuf_pullup)(struct os_mbuf *om, uint16_t len); -#define os_mbuf_pullup ((f_os_mbuf_pullup)(0x000283ab)) - - - -/** - * Removes and frees empty mbufs from the front of a chain. If the chain - * contains a packet header, it is preserved. - * - * @param om The mbuf chain to trim. - * - * @return The head of the trimmed mbuf chain. - */ -// struct os_mbuf *os_mbuf_trim_front(struct os_mbuf *om); -typedef struct os_mbuf * (*f_os_mbuf_trim_front)(struct os_mbuf *om); -#define os_mbuf_trim_front ((f_os_mbuf_trim_front)(0x00028477)) - - -#ifdef __cplusplus -} -#endif - -#endif /* _OS_MBUF_H */ - - -/** - * @} OSMbuf - * @} OSKernel - */ diff --git a/bundles/mesh/inc/os/portable.h b/bundles/mesh/inc/os/portable.h deleted file mode 100644 index c76141e24..000000000 --- a/bundles/mesh/inc/os/portable.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Portable layer API. Each function must be defined for each port. - *----------------------------------------------------------*/ - -#ifndef PORTABLE_H -#define PORTABLE_H - -/* Each FreeRTOS port has a unique portmacro.h header file. Originally a -pre-processor definition was used to ensure the pre-processor found the correct -portmacro.h file for the port being used. That scheme was deprecated in favour -of setting the compiler's include path such that it found the correct -portmacro.h file - removing the need for the constant and allowing the -portmacro.h file to be located anywhere in relation to the port being used. -Purely for reasons of backward compatibility the old method is still valid, but -to make it clear that new projects should not use it, support for the port -specific constants has been moved into the deprecated_definitions.h header -file. */ -#include "deprecated_definitions.h" - -/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h -did not result in a portmacro.h header file being included - and it should be -included here. In this case the path to the correct portmacro.h header file -must be set in the compiler's include path. */ -#ifndef portENTER_CRITICAL - #include "portmacro.h" -#endif - -#if portBYTE_ALIGNMENT == 32 - #define portBYTE_ALIGNMENT_MASK ( 0x001f ) -#endif - -#if portBYTE_ALIGNMENT == 16 - #define portBYTE_ALIGNMENT_MASK ( 0x000f ) -#endif - -#if portBYTE_ALIGNMENT == 8 - #define portBYTE_ALIGNMENT_MASK ( 0x0007 ) -#endif - -#if portBYTE_ALIGNMENT == 4 - #define portBYTE_ALIGNMENT_MASK ( 0x0003 ) -#endif - -#if portBYTE_ALIGNMENT == 2 - #define portBYTE_ALIGNMENT_MASK ( 0x0001 ) -#endif - -#if portBYTE_ALIGNMENT == 1 - #define portBYTE_ALIGNMENT_MASK ( 0x0000 ) -#endif - -#ifndef portBYTE_ALIGNMENT_MASK - #error "Invalid portBYTE_ALIGNMENT definition" -#endif - -#ifndef portNUM_CONFIGURABLE_REGIONS - #define portNUM_CONFIGURABLE_REGIONS 1 -#endif - -#ifndef portHAS_STACK_OVERFLOW_CHECKING - #define portHAS_STACK_OVERFLOW_CHECKING 0 -#endif - -#ifndef portARCH_NAME - #define portARCH_NAME NULL -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include "mpu_wrappers.h" - -/* - * Setup the stack of a new task so it is ready to be placed under the - * scheduler control. The registers have to be placed on the stack in - * the order that the port expects to find them. - * - */ -#if( portUSING_MPU_WRAPPERS == 1 ) - #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; - #else - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; - #endif -#else - #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; - #else - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; - #endif -#endif - -/* Used by heap_5.c. */ -typedef struct HeapRegion -{ - uint8_t *pucStartAddress; - size_t xSizeInBytes; -} HeapRegion_t; - -/* - * Used to define multiple heap regions for use by heap_5.c. This function - * must be called before any calls to pvPortMalloc() - not creating a task, - * queue, semaphore, mutex, software timer, event group, etc. will result in - * pvPortMalloc being called. - * - * pxHeapRegions passes in an array of HeapRegion_t structures - each of which - * defines a region of memory that can be used as the heap. The array is - * terminated by a HeapRegions_t structure that has a size of 0. The region - * with the lowest start address must appear first in the array. - */ -// void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - - -/* - * Map to the memory management routines required for the port. - */ -void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION; -void vPortFree( void *pv ) PRIVILEGED_FUNCTION; -// void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Setup the hardware ready for the scheduler to take control. This generally - * sets up a tick interrupt and sets timers for the correct tick frequency. - */ -BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION; - -/* - * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so - * the hardware is left in its original condition after the scheduler stops - * executing. - */ -// void vPortEndScheduler( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * The structures and methods of manipulating the MPU are contained within the - * port layer. - * - * Fills the xMPUSettings structure with the memory region information - * contained in xRegions. - */ -#if( portUSING_MPU_WRAPPERS == 1 ) - struct xMEMORY_REGION; - void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) PRIVILEGED_FUNCTION; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* PORTABLE_H */ - diff --git a/bundles/mesh/inc/os/portable/GCC/ARM_CM3/port.c b/bundles/mesh/inc/os/portable/GCC/ARM_CM3/port.c deleted file mode 100644 index 3c0c8e063..000000000 --- a/bundles/mesh/inc/os/portable/GCC/ARM_CM3/port.c +++ /dev/null @@ -1,717 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value should also ensure backward compatibility. -FreeRTOS.org versions prior to V4.4.0 did not include this definition. */ -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000UL ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* Let the user override the pre-loading of the initial LR with the address of -prvTaskExitError() in case it messes up unwinding of the stack in the -debugger. */ -#ifdef configTASK_RETURN_ADDRESS - #define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS -#else - #define portTASK_RETURN_ADDRESS prvTaskExitError -#endif - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortPendSVHandler( void ) __attribute__ (( naked )); -void xPortSysTickHandler( void ); -void vPortSVCHandler( void ) __attribute__ (( naked )); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -static void prvPortStartFirstTask( void ) __attribute__ (( naked )); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * The number of SysTick increments that make up one tick period. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ -volatile uint32_t ulDummy = 0UL; - - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - while( ulDummy == 0 ) - { - /* This file calls prvTaskExitError() after the scheduler has been - started to remove a compiler warning about the function being defined - but never called. ulDummy is used purely to quieten other warnings - about code appearing after this function is called - making ulDummy - volatile makes the compiler think the function could return and - therefore not output an 'unreachable code' warning for code that appears - after it. */ - } -} -/*-----------------------------------------------------------*/ - -void vPortSVCHandler( void ) -{ - __asm volatile ( - " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " isb \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " orr r14, #0xd \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n" - ); -} -/*-----------------------------------------------------------*/ - -static void prvPortStartFirstTask( void ) -{ - __asm volatile( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc 0 \n" /* System call to start first task. */ - " nop \n" - ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. - See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - #ifdef __NVIC_PRIO_BITS - { - /* Check the CMSIS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == __NVIC_PRIO_BITS ); - } - #endif - - #ifdef configPRIO_BITS - { - /* Check the FreeRTOS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); - } - #endif - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - prvPortStartFirstTask(); - - /* Should never get here as the tasks will now be executing! Call the task - exit error function to prevent compiler warnings about a static function - not being called in the case that the application writer overrides this - functionality by defining configTASK_RETURN_ADDRESS. Call - vTaskSwitchContext() so link time optimisation does not remove the - symbol. */ - vTaskSwitchContext(); - prvTaskExitError(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void xPortPendSVHandler( void ) -{ - /* This is a naked function. */ - - __asm volatile - ( - " mrs r0, psp \n" - " isb \n" - " \n" - " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */ - " ldr r2, [r3] \n" - " \n" - " stmdb r0!, {r4-r11} \n" /* Save the remaining registers. */ - " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */ - " \n" - " stmdb sp!, {r3, r14} \n" - " mov r0, %0 \n" - " msr basepri, r0 \n" - " bl vTaskSwitchContext \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldmia sp!, {r3, r14} \n" - " \n" /* Restore the context, including the critical nesting count. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers. */ - " msr psp, r0 \n" - " isb \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst: .word pxCurrentTCB \n" - ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) - ); -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known. */ - portDISABLE_INTERRUPTS(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portENABLE_INTERRUPTS(); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE == 1 ) - - __attribute__((weak)) void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __asm volatile( "cpsid i" ::: "memory" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above the cpsid instruction() - above. */ - __asm volatile( "cpsie i" ::: "memory" ); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __asm volatile( "dsb" ::: "memory" ); - __asm volatile( "wfi" ); - __asm volatile( "isb" ); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Re-enable interrupts to allow the interrupt that brought the MCU - out of sleep mode to execute immediately. see comments above - __disable_interrupt() call above. */ - __asm volatile( "cpsie i" ::: "memory" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* Disable interrupts again because the clock is about to be stopped - and interrupts that execute while the clock is stopped will increase - any slippage between the time maintained by the RTOS and calendar - time. */ - __asm volatile( "cpsid i" ::: "memory" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* Disable the SysTick clock without reading the - portNVIC_SYSTICK_CTRL_REG register to ensure the - portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set. Again, - the time the SysTick is stopped for is accounted for as best it can - be, but using the tickless mode will inevitably result in some tiny - drift of the time maintained by the kernel with respect to calendar - time*/ - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT ); - - /* Determine if the SysTick clock has already counted to zero and - been set back to the current reload value (the reload back being - correct for the entire expected idle time) or if the SysTick is yet - to count to zero (in which case an interrupt other than the SysTick - must have brought the system out of sleep mode). */ - if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt is already pending, and the SysTick count - reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* As the pending tick will be processed as soon as this - function exits, the tick value maintained by the tick is stepped - forward by one less than the time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Exit with interrpts enabled. */ - __asm volatile( "cpsie i" ::: "memory" ); - } - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -__attribute__(( weak )) void vPortSetupTimerInterrupt( void ) -{ - /* Calculate the constants required to configure the tick interrupt. */ - #if( configUSE_TICKLESS_IDLE == 1 ) - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Stop and clear the SysTick. */ - portNVIC_SYSTICK_CTRL_REG = 0UL; - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredictable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/mesh/inc/os/portable/GCC/ARM_CM3/portmacro.h b/bundles/mesh/inc/os/portable/GCC/ARM_CM3/portmacro.h deleted file mode 100644 index f1becb381..000000000 --- a/bundles/mesh/inc/os/portable/GCC/ARM_CM3/portmacro.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else - typedef uint32_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffffffffUL - - /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do - not need to be guarded with a critical section. */ - #define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 -/*-----------------------------------------------------------*/ - -/* Scheduler utilities. */ -#define portYIELD() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - \ - /* Barriers are normally not required but do ensure the code is completely \ - within the specified behaviour for the architecture. */ \ - __asm volatile( "dsb" ::: "memory" ); \ - __asm volatile( "isb" ); \ -} - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD() -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); -#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x) -#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() -#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() - -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -/* Tickless idle/low power functionality. */ -#ifndef portSUPPRESS_TICKS_AND_SLEEP - extern void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ); - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vPortSuppressTicksAndSleep( xExpectedIdleTime ) -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 - - /* Generic helper function. */ - __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap ) - { - uint8_t ucReturn; - - __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) : "memory" ); - return ucReturn; - } - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) ucPortCountLeadingZeros( ( uxReadyPriorities ) ) ) - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -#define portINLINE __inline - -#ifndef portFORCE_INLINE - #define portFORCE_INLINE inline __attribute__(( always_inline)) -#endif - -portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void ) -{ -uint32_t ulCurrentInterrupt; -BaseType_t xReturn; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" ); - - if( ulCurrentInterrupt == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortRaiseBASEPRI( void ) -{ -uint32_t ulNewBASEPRI; - - __asm volatile - ( - " mov %0, %1 \n" \ - " msr basepri, %0 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory" - ); -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void ) -{ -uint32_t ulOriginalBASEPRI, ulNewBASEPRI; - - __asm volatile - ( - " mrs %0, basepri \n" \ - " mov %1, %2 \n" \ - " msr basepri, %1 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory" - ); - - /* This return will not be reached but is necessary to prevent compiler - warnings. */ - return ulOriginalBASEPRI; -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) -{ - __asm volatile - ( - " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory" - ); -} -/*-----------------------------------------------------------*/ - -#define portMEMORY_BARRIER() __asm volatile( "" ::: "memory" ) - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/bundles/mesh/inc/os/portable/IAR/ARM_CM3/port.c b/bundles/mesh/inc/os/portable/IAR/ARM_CM3/port.c deleted file mode 100644 index bdbfdb7cc..000000000 --- a/bundles/mesh/inc/os/portable/IAR/ARM_CM3/port.c +++ /dev/null @@ -1,619 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* IAR includes. */ -#include - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -#if( configMAX_SYSCALL_INTERRUPT_PRIORITY == 0 ) - #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000 ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value 255 should also ensure backward compatibility. -FreeRTOS.org versions prior to V4.3.0 did not include this definition. */ -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortSysTickHandler( void ); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -extern void vPortStartFirstTask( void ); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * The number of SysTick increments that make up one tick period. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - for( ;; ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. - See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - #ifdef __NVIC_PRIO_BITS - { - /* Check the CMSIS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == __NVIC_PRIO_BITS ); - } - #endif - - #ifdef configPRIO_BITS - { - /* Check the FreeRTOS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); - } - #endif - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - vPortStartFirstTask(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known. */ - portDISABLE_INTERRUPTS(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portENABLE_INTERRUPTS(); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE == 1 ) - - __weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __disable_interrupt(); - __DSB(); - __ISB(); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above __disable_interrupt() - call above. */ - __enable_interrupt(); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __DSB(); - __WFI(); - __ISB(); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Re-enable interrupts to allow the interrupt that brought the MCU - out of sleep mode to execute immediately. see comments above - __disable_interrupt() call above. */ - __enable_interrupt(); - __DSB(); - __ISB(); - - /* Disable interrupts again because the clock is about to be stopped - and interrupts that execute while the clock is stopped will increase - any slippage between the time maintained by the RTOS and calendar - time. */ - __disable_interrupt(); - __DSB(); - __ISB(); - - /* Disable the SysTick clock without reading the - portNVIC_SYSTICK_CTRL_REG register to ensure the - portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set. Again, - the time the SysTick is stopped for is accounted for as best it can - be, but using the tickless mode will inevitably result in some tiny - drift of the time maintained by the kernel with respect to calendar - time*/ - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT ); - - /* Determine if the SysTick clock has already counted to zero and - been set back to the current reload value (the reload back being - correct for the entire expected idle time) or if the SysTick is yet - to count to zero (in which case an interrupt other than the SysTick - must have brought the system out of sleep mode). */ - if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt is already pending, and the SysTick count - reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* As the pending tick will be processed as soon as this - function exits, the tick value maintained by the tick is stepped - forward by one less than the time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Exit with interrpts enabled. */ - __enable_interrupt(); - } - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -__weak void vPortSetupTimerInterrupt( void ) -{ - /* Calculate the constants required to configure the tick interrupt. */ - #if( configUSE_TICKLESS_IDLE == 1 ) - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Stop and clear the SysTick. */ - portNVIC_SYSTICK_CTRL_REG = 0UL; - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredictable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/mesh/inc/os/portable/IAR/ARM_CM3/portasm.s b/bundles/mesh/inc/os/portable/IAR/ARM_CM3/portasm.s deleted file mode 100644 index fbc278a65..000000000 --- a/bundles/mesh/inc/os/portable/IAR/ARM_CM3/portasm.s +++ /dev/null @@ -1,103 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#include - - RSEG CODE:CODE(2) - thumb - - EXTERN pxCurrentTCB - EXTERN vTaskSwitchContext - - PUBLIC xPortPendSVHandler - PUBLIC vPortSVCHandler - PUBLIC vPortStartFirstTask - - - -/*-----------------------------------------------------------*/ - -xPortPendSVHandler: - mrs r0, psp - isb - ldr r3, =pxCurrentTCB /* Get the location of the current TCB. */ - ldr r2, [r3] - - stmdb r0!, {r4-r11} /* Save the remaining registers. */ - str r0, [r2] /* Save the new top of stack into the first member of the TCB. */ - - stmdb sp!, {r3, r14} - mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY - msr basepri, r0 - dsb - isb - bl vTaskSwitchContext - mov r0, #0 - msr basepri, r0 - ldmia sp!, {r3, r14} - - ldr r1, [r3] - ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ - ldmia r0!, {r4-r11} /* Pop the registers. */ - msr psp, r0 - isb - bx r14 - - -/*-----------------------------------------------------------*/ - -vPortSVCHandler: - /* Get the location of the current TCB. */ - ldr r3, =pxCurrentTCB - ldr r1, [r3] - ldr r0, [r1] - /* Pop the core registers. */ - ldmia r0!, {r4-r11} - msr psp, r0 - isb - mov r0, #0 - msr basepri, r0 - orr r14, r14, #13 - bx r14 - -/*-----------------------------------------------------------*/ - -vPortStartFirstTask - /* Use the NVIC offset register to locate the stack. */ - ldr r0, =0xE000ED08 - ldr r0, [r0] - ldr r0, [r0] - /* Set the msp back to the start of the stack. */ - msr msp, r0 - /* Call SVC to start the first task, ensuring interrupts are enabled. */ - cpsie i - cpsie f - dsb - isb - svc 0 - - END diff --git a/bundles/mesh/inc/os/portable/IAR/ARM_CM3/portmacro.h b/bundles/mesh/inc/os/portable/IAR/ARM_CM3/portmacro.h deleted file mode 100644 index 1d69069c6..000000000 --- a/bundles/mesh/inc/os/portable/IAR/ARM_CM3/portmacro.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* IAR includes. */ -#include - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else - typedef uint32_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffffffffUL - - /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do - not need to be guarded with a critical section. */ - #define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 -/*-----------------------------------------------------------*/ - -/* Compiler directives. */ -#define portWEAK_SYMBOL __attribute__( ( weak ) ) - -/*-----------------------------------------------------------*/ - - -/* Scheduler utilities. */ -#define portYIELD() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - __DSB(); \ - __ISB(); \ -} - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD() -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) - -/*-----------------------------------------------------------*/ - -/* Architecture specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if( configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 ) - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( ( uint32_t ) __CLZ( ( uxReadyPriorities ) ) ) ) - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); - -#define portDISABLE_INTERRUPTS() \ -{ \ - __set_BASEPRI( configMAX_SYSCALL_INTERRUPT_PRIORITY ); \ - __DSB(); \ - __ISB(); \ -} - -#define portENABLE_INTERRUPTS() __set_BASEPRI( 0 ) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() -#define portSET_INTERRUPT_MASK_FROM_ISR() __get_BASEPRI(); portDISABLE_INTERRUPTS() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) __set_BASEPRI( x ) -/*-----------------------------------------------------------*/ - -/* Tickless idle/low power functionality. */ -#ifndef portSUPPRESS_TICKS_AND_SLEEP - extern void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ); - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vPortSuppressTicksAndSleep( xExpectedIdleTime ) -#endif - -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -/*-----------------------------------------------------------*/ - -/* Suppress warnings that are generated by the IAR tools, but cannot be fixed in -the source code because to do so would cause other compilers to generate -warnings. */ -#pragma diag_suppress=Pe191 -#pragma diag_suppress=Pa082 - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/bundles/mesh/inc/os/portable/RVDS/ARM_CM3/port.c b/bundles/mesh/inc/os/portable/RVDS/ARM_CM3/port.c deleted file mode 100644 index bb7f9cc4d..000000000 --- a/bundles/mesh/inc/os/portable/RVDS/ARM_CM3/port.c +++ /dev/null @@ -1,698 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0 - #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* The __weak attribute does not work as you might expect with the Keil tools -so the configOVERRIDE_DEFAULT_TICK_CONFIGURATION constant must be set to 1 if -the application writer wants to provide their own implementation of -vPortSetupTimerInterrupt(). Ensure configOVERRIDE_DEFAULT_TICK_CONFIGURATION -is defined. */ -#ifndef configOVERRIDE_DEFAULT_TICK_CONFIGURATION - #define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 0 -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000 ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortPendSVHandler( void ); -void xPortSysTickHandler( void ); -void vPortSVCHandler( void ); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -static void prvStartFirstTask( void ); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * The number of SysTick increments that make up one tick period. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if ( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( uint8_t * ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */ - - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - for( ;; ); -} -/*-----------------------------------------------------------*/ - -__asm void vPortSVCHandler( void ) -{ - PRESERVE8 - - ldr r3, =pxCurrentTCB /* Restore the context. */ - ldr r1, [r3] /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ - ldmia r0!, {r4-r11} /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - msr psp, r0 /* Restore the task stack pointer. */ - isb - mov r0, #0 - msr basepri, r0 - orr r14, #0xd - bx r14 -} -/*-----------------------------------------------------------*/ - -__asm void prvStartFirstTask( void ) -{ - PRESERVE8 - - /* Use the NVIC offset register to locate the stack. */ - ldr r0, =0xE000ED08 - ldr r0, [r0] - ldr r0, [r0] - - /* Set the msp back to the start of the stack. */ - msr msp, r0 - /* Globally enable interrupts. */ - cpsie i - cpsie f - dsb - isb - /* Call SVC to start the first task. */ - svc 0 - nop - nop -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( uint8_t * ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* The kernel interrupt priority should be set to the lowest - priority. */ - configASSERT( ucMaxPriorityValue == ( configKERNEL_INTERRUPT_PRIORITY & ucMaxPriorityValue ) ); - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - #ifdef __NVIC_PRIO_BITS - { - /* Check the CMSIS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == __NVIC_PRIO_BITS ); - } - #endif - - #ifdef configPRIO_BITS - { - /* Check the FreeRTOS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); - } - #endif - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - prvStartFirstTask(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -__asm void xPortPendSVHandler( void ) -{ - extern uxCriticalNesting; - extern pxCurrentTCB; - extern vTaskSwitchContext; - - PRESERVE8 - - mrs r0, psp - isb - - ldr r3, =pxCurrentTCB /* Get the location of the current TCB. */ - ldr r2, [r3] - - stmdb r0!, {r4-r11} /* Save the remaining registers. */ - str r0, [r2] /* Save the new top of stack into the first member of the TCB. */ - - stmdb sp!, {r3, r14} - mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY - msr basepri, r0 - dsb - isb - bl vTaskSwitchContext - mov r0, #0 - msr basepri, r0 - ldmia sp!, {r3, r14} - - ldr r1, [r3] - ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ - ldmia r0!, {r4-r11} /* Pop the registers and the critical nesting count. */ - msr psp, r0 - isb - bx r14 - nop -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known - therefore the slightly faster vPortRaiseBASEPRI() function is used - in place of portSET_INTERRUPT_MASK_FROM_ISR(). */ - vPortRaiseBASEPRI(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - vPortClearBASEPRIFromISR(); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE == 1 ) - - __weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __disable_irq(); - __dsb( portSY_FULL_READ_WRITE ); - __isb( portSY_FULL_READ_WRITE ); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above __disable_irq() call - above. */ - __enable_irq(); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __dsb( portSY_FULL_READ_WRITE ); - __wfi(); - __isb( portSY_FULL_READ_WRITE ); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Re-enable interrupts to allow the interrupt that brought the MCU - out of sleep mode to execute immediately. see comments above - __disable_interrupt() call above. */ - __enable_irq(); - __dsb( portSY_FULL_READ_WRITE ); - __isb( portSY_FULL_READ_WRITE ); - - /* Disable interrupts again because the clock is about to be stopped - and interrupts that execute while the clock is stopped will increase - any slippage between the time maintained by the RTOS and calendar - time. */ - __disable_irq(); - __dsb( portSY_FULL_READ_WRITE ); - __isb( portSY_FULL_READ_WRITE ); - - /* Disable the SysTick clock without reading the - portNVIC_SYSTICK_CTRL_REG register to ensure the - portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set. Again, - the time the SysTick is stopped for is accounted for as best it can - be, but using the tickless mode will inevitably result in some tiny - drift of the time maintained by the kernel with respect to calendar - time*/ - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT ); - - /* Determine if the SysTick clock has already counted to zero and - been set back to the current reload value (the reload back being - correct for the entire expected idle time) or if the SysTick is yet - to count to zero (in which case an interrupt other than the SysTick - must have brought the system out of sleep mode). */ - if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt is already pending, and the SysTick count - reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* As the pending tick will be processed as soon as this - function exits, the tick value maintained by the tick is stepped - forward by one less than the time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Exit with interrpts enabled. */ - __enable_irq(); - } - } - -#endif /* #if configUSE_TICKLESS_IDLE */ - -/*-----------------------------------------------------------*/ - -/* - * Setup the SysTick timer to generate the tick interrupts at the required - * frequency. - */ -#if( configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0 ) - - void vPortSetupTimerInterrupt( void ) - { - /* Calculate the constants required to configure the tick interrupt. */ - #if( configUSE_TICKLESS_IDLE == 1 ) - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Stop and clear the SysTick. */ - portNVIC_SYSTICK_CTRL_REG = 0UL; - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); - } - -#endif /* configOVERRIDE_DEFAULT_TICK_CONFIGURATION */ -/*-----------------------------------------------------------*/ - -__asm uint32_t vPortGetIPSR( void ) -{ - PRESERVE8 - - mrs r0, ipsr - bx r14 -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - ulCurrentInterrupt = vPortGetIPSR(); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredictable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - diff --git a/bundles/mesh/inc/os/portable/RVDS/ARM_CM3/portmacro.h b/bundles/mesh/inc/os/portable/RVDS/ARM_CM3/portmacro.h deleted file mode 100644 index 65cd27ed9..000000000 --- a/bundles/mesh/inc/os/portable/RVDS/ARM_CM3/portmacro.h +++ /dev/null @@ -1,252 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else - typedef uint32_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffffffffUL - - /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do - not need to be guarded with a critical section. */ - #define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 - -/* Constants used with memory barrier intrinsics. */ -#define portSY_FULL_READ_WRITE ( 15 ) - -/*-----------------------------------------------------------*/ - -/* Scheduler utilities. */ -#define portYIELD() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - \ - /* Barriers are normally not required but do ensure the code is completely \ - within the specified behaviour for the architecture. */ \ - __dsb( portSY_FULL_READ_WRITE ); \ - __isb( portSY_FULL_READ_WRITE ); \ -} -/*-----------------------------------------------------------*/ - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD() -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); - -#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() -#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 ) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() -#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x) - -/*-----------------------------------------------------------*/ - -/* Tickless idle/low power functionality. */ -#ifndef portSUPPRESS_TICKS_AND_SLEEP - extern void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ); - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vPortSuppressTicksAndSleep( xExpectedIdleTime ) -#endif -/*-----------------------------------------------------------*/ - -/* Port specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) __clz( ( uxReadyPriorities ) ) ) - -#endif /* taskRECORD_READY_PRIORITY */ -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -#define portINLINE __inline - -#ifndef portFORCE_INLINE - #define portFORCE_INLINE __forceinline -#endif - -/*-----------------------------------------------------------*/ - -static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI ) -{ - __asm - { - /* Barrier instructions are not used as this function is only used to - lower the BASEPRI value. */ - msr basepri, ulBASEPRI - } -} -/*-----------------------------------------------------------*/ - -static portFORCE_INLINE void vPortRaiseBASEPRI( void ) -{ -uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY; - - __asm - { - /* Set BASEPRI to the max syscall priority to effect a critical - section. */ - msr basepri, ulNewBASEPRI - dsb - isb - } -} -/*-----------------------------------------------------------*/ - -static portFORCE_INLINE void vPortClearBASEPRIFromISR( void ) -{ - __asm - { - /* Set BASEPRI to 0 so no interrupts are masked. This function is only - used to lower the mask in an interrupt, so memory barriers are not - used. */ - msr basepri, #0 - } -} -/*-----------------------------------------------------------*/ - -static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void ) -{ -uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY; - - __asm - { - /* Set BASEPRI to the max syscall priority to effect a critical - section. */ - mrs ulReturn, basepri - msr basepri, ulNewBASEPRI - dsb - isb - } - - return ulReturn; -} -/*-----------------------------------------------------------*/ - -static portFORCE_INLINE BaseType_t xPortIsInsideInterrupt( void ) -{ -uint32_t ulCurrentInterrupt; -BaseType_t xReturn; - - /* Obtain the number of the currently executing interrupt. */ - __asm - { - mrs ulCurrentInterrupt, ipsr - } - - if( ulCurrentInterrupt == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} - - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/bundles/mesh/inc/os/projdefs.h b/bundles/mesh/inc/os/projdefs.h deleted file mode 100644 index e0458619e..000000000 --- a/bundles/mesh/inc/os/projdefs.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef PROJDEFS_H -#define PROJDEFS_H - -/* - * Defines the prototype to which task functions must conform. Defined in this - * file to ensure the type is known before portable.h is included. - */ -typedef void (*TaskFunction_t)( void * ); - -/* Converts a time in milliseconds to a time in ticks. This macro can be -overridden by a macro of the same name defined in FreeRTOSConfig.h in case the -definition here is not suitable for your application. */ -#ifndef pdMS_TO_TICKS - #define pdMS_TO_TICKS( xTimeInMs ) ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) ) -#endif - -#define pdFALSE ( ( BaseType_t ) 0 ) -#define pdTRUE ( ( BaseType_t ) 1 ) - -#define pdPASS ( pdTRUE ) -#define pdFAIL ( pdFALSE ) -#define errQUEUE_EMPTY ( ( BaseType_t ) 0 ) -#define errQUEUE_FULL ( ( BaseType_t ) 0 ) - -/* FreeRTOS error definitions. */ -#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 ) -#define errQUEUE_BLOCKED ( -4 ) -#define errQUEUE_YIELD ( -5 ) - -/* Macros used for basic data corruption checks. */ -#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES - #define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 0 -#endif - -#if( configUSE_16_BIT_TICKS == 1 ) - #define pdINTEGRITY_CHECK_VALUE 0x5a5a -#else - #define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL -#endif - -/* The following errno values are used by FreeRTOS+ components, not FreeRTOS -itself. */ -#define pdFREERTOS_ERRNO_NONE 0 /* No errors */ -#define pdFREERTOS_ERRNO_ENOENT 2 /* No such file or directory */ -#define pdFREERTOS_ERRNO_EINTR 4 /* Interrupted system call */ -#define pdFREERTOS_ERRNO_EIO 5 /* I/O error */ -#define pdFREERTOS_ERRNO_ENXIO 6 /* No such device or address */ -#define pdFREERTOS_ERRNO_EBADF 9 /* Bad file number */ -#define pdFREERTOS_ERRNO_EAGAIN 11 /* No more processes */ -#define pdFREERTOS_ERRNO_EWOULDBLOCK 11 /* Operation would block */ -#define pdFREERTOS_ERRNO_ENOMEM 12 /* Not enough memory */ -#define pdFREERTOS_ERRNO_EACCES 13 /* Permission denied */ -#define pdFREERTOS_ERRNO_EFAULT 14 /* Bad address */ -#define pdFREERTOS_ERRNO_EBUSY 16 /* Mount device busy */ -#define pdFREERTOS_ERRNO_EEXIST 17 /* File exists */ -#define pdFREERTOS_ERRNO_EXDEV 18 /* Cross-device link */ -#define pdFREERTOS_ERRNO_ENODEV 19 /* No such device */ -#define pdFREERTOS_ERRNO_ENOTDIR 20 /* Not a directory */ -#define pdFREERTOS_ERRNO_EISDIR 21 /* Is a directory */ -#define pdFREERTOS_ERRNO_EINVAL 22 /* Invalid argument */ -#define pdFREERTOS_ERRNO_ENOSPC 28 /* No space left on device */ -#define pdFREERTOS_ERRNO_ESPIPE 29 /* Illegal seek */ -#define pdFREERTOS_ERRNO_EROFS 30 /* Read only file system */ -#define pdFREERTOS_ERRNO_EUNATCH 42 /* Protocol driver not attached */ -#define pdFREERTOS_ERRNO_EBADE 50 /* Invalid exchange */ -#define pdFREERTOS_ERRNO_EFTYPE 79 /* Inappropriate file type or format */ -#define pdFREERTOS_ERRNO_ENMFILE 89 /* No more files */ -#define pdFREERTOS_ERRNO_ENOTEMPTY 90 /* Directory not empty */ -#define pdFREERTOS_ERRNO_ENAMETOOLONG 91 /* File or path name too long */ -#define pdFREERTOS_ERRNO_EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define pdFREERTOS_ERRNO_ENOBUFS 105 /* No buffer space available */ -#define pdFREERTOS_ERRNO_ENOPROTOOPT 109 /* Protocol not available */ -#define pdFREERTOS_ERRNO_EADDRINUSE 112 /* Address already in use */ -#define pdFREERTOS_ERRNO_ETIMEDOUT 116 /* Connection timed out */ -#define pdFREERTOS_ERRNO_EINPROGRESS 119 /* Connection already in progress */ -#define pdFREERTOS_ERRNO_EALREADY 120 /* Socket already connected */ -#define pdFREERTOS_ERRNO_EADDRNOTAVAIL 125 /* Address not available */ -#define pdFREERTOS_ERRNO_EISCONN 127 /* Socket is already connected */ -#define pdFREERTOS_ERRNO_ENOTCONN 128 /* Socket is not connected */ -#define pdFREERTOS_ERRNO_ENOMEDIUM 135 /* No medium inserted */ -#define pdFREERTOS_ERRNO_EILSEQ 138 /* An invalid UTF-16 sequence was encountered. */ -#define pdFREERTOS_ERRNO_ECANCELED 140 /* Operation canceled. */ - -/* The following endian values are used by FreeRTOS+ components, not FreeRTOS -itself. */ -#define pdFREERTOS_LITTLE_ENDIAN 0 -#define pdFREERTOS_BIG_ENDIAN 1 - -/* Re-defining endian values for generic naming. */ -#define pdLITTLE_ENDIAN pdFREERTOS_LITTLE_ENDIAN -#define pdBIG_ENDIAN pdFREERTOS_BIG_ENDIAN - - -#endif /* PROJDEFS_H */ - - - diff --git a/bundles/mesh/inc/os/queue.h b/bundles/mesh/inc/os/queue.h deleted file mode 100644 index 44b5d5f64..000000000 --- a/bundles/mesh/inc/os/queue.h +++ /dev/null @@ -1,1707 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef QUEUE_H -#define QUEUE_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h" must appear in source files before "include queue.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include "task.h" - -/** - * Type by which queues are referenced. For example, a call to xQueueCreate() - * returns an QueueHandle_t variable that can then be used as a parameter to - * xQueueSend(), xQueueReceive(), etc. - */ -struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */ -typedef struct QueueDefinition * QueueHandle_t; - -/** - * Type by which queue sets are referenced. For example, a call to - * xQueueCreateSet() returns an xQueueSet variable that can then be used as a - * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc. - */ -typedef struct QueueDefinition * QueueSetHandle_t; - -/** - * Queue sets can contain both queues and semaphores, so the - * QueueSetMemberHandle_t is defined as a type to be used where a parameter or - * return value can be either an QueueHandle_t or an SemaphoreHandle_t. - */ -typedef struct QueueDefinition * QueueSetMemberHandle_t; - -/* For internal use only. */ -#define queueSEND_TO_BACK ( ( BaseType_t ) 0 ) -#define queueSEND_TO_FRONT ( ( BaseType_t ) 1 ) -#define queueOVERWRITE ( ( BaseType_t ) 2 ) - -/* For internal use only. These definitions *must* match those in queue.c. */ -#define queueQUEUE_TYPE_BASE ( ( uint8_t ) 0U ) -#define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U ) -#define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U ) -#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( uint8_t ) 2U ) -#define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) -#define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( uint8_t ) 4U ) - -/** - * queue. h - *
- QueueHandle_t xQueueCreate(
-							  UBaseType_t uxQueueLength,
-							  UBaseType_t uxItemSize
-						  );
- * 
- * - * Creates a new queue instance, and returns a handle by which the new queue - * can be referenced. - * - * Internally, within the FreeRTOS implementation, queues use two blocks of - * memory. The first block is used to hold the queue's data structures. The - * second block is used to hold items placed into the queue. If a queue is - * created using xQueueCreate() then both blocks of memory are automatically - * dynamically allocated inside the xQueueCreate() function. (see - * http://www.freertos.org/a00111.html). If a queue is created using - * xQueueCreateStatic() then the application writer must provide the memory that - * will get used by the queue. xQueueCreateStatic() therefore allows a queue to - * be created without using any dynamic memory allocation. - * - * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html - * - * @param uxQueueLength The maximum number of items that the queue can contain. - * - * @param uxItemSize The number of bytes each item in the queue will require. - * Items are queued by copy, not by reference, so this is the number of bytes - * that will be copied for each posted item. Each item on the queue must be - * the same size. - * - * @return If the queue is successfully create then a handle to the newly - * created queue is returned. If the queue cannot be created then 0 is - * returned. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- };
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-	if( xQueue1 == 0 )
-	{
-		// Queue was not created and must not be used.
-	}
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue2 == 0 )
-	{
-		// Queue was not created and must not be used.
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueCreate xQueueCreate - * \ingroup QueueManagement - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) ) -#endif - -/** - * queue. h - *
- QueueHandle_t xQueueCreateStatic(
-							  UBaseType_t uxQueueLength,
-							  UBaseType_t uxItemSize,
-							  uint8_t *pucQueueStorageBuffer,
-							  StaticQueue_t *pxQueueBuffer
-						  );
- * 
- * - * Creates a new queue instance, and returns a handle by which the new queue - * can be referenced. - * - * Internally, within the FreeRTOS implementation, queues use two blocks of - * memory. The first block is used to hold the queue's data structures. The - * second block is used to hold items placed into the queue. If a queue is - * created using xQueueCreate() then both blocks of memory are automatically - * dynamically allocated inside the xQueueCreate() function. (see - * http://www.freertos.org/a00111.html). If a queue is created using - * xQueueCreateStatic() then the application writer must provide the memory that - * will get used by the queue. xQueueCreateStatic() therefore allows a queue to - * be created without using any dynamic memory allocation. - * - * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html - * - * @param uxQueueLength The maximum number of items that the queue can contain. - * - * @param uxItemSize The number of bytes each item in the queue will require. - * Items are queued by copy, not by reference, so this is the number of bytes - * that will be copied for each posted item. Each item on the queue must be - * the same size. - * - * @param pucQueueStorageBuffer If uxItemSize is not zero then - * pucQueueStorageBuffer must point to a uint8_t array that is at least large - * enough to hold the maximum number of items that can be in the queue at any - * one time - which is ( uxQueueLength * uxItemsSize ) bytes. If uxItemSize is - * zero then pucQueueStorageBuffer can be NULL. - * - * @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which - * will be used to hold the queue's data structure. - * - * @return If the queue is created then a handle to the created queue is - * returned. If pxQueueBuffer is NULL then NULL is returned. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- };
-
- #define QUEUE_LENGTH 10
- #define ITEM_SIZE sizeof( uint32_t )
-
- // xQueueBuffer will hold the queue structure.
- StaticQueue_t xQueueBuffer;
-
- // ucQueueStorage will hold the items posted to the queue.  Must be at least
- // [(queue length) * ( queue item size)] bytes long.
- uint8_t ucQueueStorage[ QUEUE_LENGTH * ITEM_SIZE ];
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( QUEUE_LENGTH, // The number of items the queue can hold.
-							ITEM_SIZE	  // The size of each item in the queue
-							&( ucQueueStorage[ 0 ] ), // The buffer that will hold the items in the queue.
-							&xQueueBuffer ); // The buffer that will hold the queue structure.
-
-	// The queue is guaranteed to be created successfully as no dynamic memory
-	// allocation is used.  Therefore xQueue1 is now a handle to a valid queue.
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueCreateStatic xQueueCreateStatic - * \ingroup QueueManagement - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * queue. h - *
- BaseType_t xQueueSendToToFront(
-								   QueueHandle_t	xQueue,
-								   const void		*pvItemToQueue,
-								   TickType_t		xTicksToWait
-							   );
- * 
- * - * Post an item to the front of a queue. The item is queued by copy, not by - * reference. This function must not be called from an interrupt service - * routine. See xQueueSendFromISR () for an alternative which may be used - * in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the - * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT ) - -/** - * queue. h - *
- BaseType_t xQueueSendToBack(
-								   QueueHandle_t	xQueue,
-								   const void		*pvItemToQueue,
-								   TickType_t		xTicksToWait
-							   );
- * 
- * - * This is a macro that calls xQueueGenericSend(). - * - * Post an item to the back of a queue. The item is queued by copy, not by - * reference. This function must not be called from an interrupt service - * routine. See xQueueSendFromISR () for an alternative which may be used - * in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the queue - * is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueSend(
-							  QueueHandle_t xQueue,
-							  const void * pvItemToQueue,
-							  TickType_t xTicksToWait
-						 );
- * 
- * - * This is a macro that calls xQueueGenericSend(). It is included for - * backward compatibility with versions of FreeRTOS.org that did not - * include the xQueueSendToFront() and xQueueSendToBack() macros. It is - * equivalent to xQueueSendToBack(). - * - * Post an item on a queue. The item is queued by copy, not by reference. - * This function must not be called from an interrupt service routine. - * See xQueueSendFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the - * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueOverwrite(
-							  QueueHandle_t xQueue,
-							  const void * pvItemToQueue
-						 );
- * 
- * - * Only for use with queues that have a length of one - so the queue is either - * empty or full. - * - * Post an item on a queue. If the queue is already full then overwrite the - * value held in the queue. The item is queued by copy, not by reference. - * - * This function must not be called from an interrupt service routine. - * See xQueueOverwriteFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle of the queue to which the data is being sent. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @return xQueueOverwrite() is a macro that calls xQueueGenericSend(), and - * therefore has the same return values as xQueueSendToFront(). However, pdPASS - * is the only value that can be returned because xQueueOverwrite() will write - * to the queue even when the queue is already full. - * - * Example usage: -
-
- void vFunction( void *pvParameters )
- {
- QueueHandle_t xQueue;
- uint32_t ulVarToSend, ulValReceived;
-
-	// Create a queue to hold one uint32_t value.  It is strongly
-	// recommended *not* to use xQueueOverwrite() on queues that can
-	// contain more than one value, and doing so will trigger an assertion
-	// if configASSERT() is defined.
-	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
-
-	// Write the value 10 to the queue using xQueueOverwrite().
-	ulVarToSend = 10;
-	xQueueOverwrite( xQueue, &ulVarToSend );
-
-	// Peeking the queue should now return 10, but leave the value 10 in
-	// the queue.  A block time of zero is used as it is known that the
-	// queue holds a value.
-	ulValReceived = 0;
-	xQueuePeek( xQueue, &ulValReceived, 0 );
-
-	if( ulValReceived != 10 )
-	{
-		// Error unless the item was removed by a different task.
-	}
-
-	// The queue is still full.  Use xQueueOverwrite() to overwrite the
-	// value held in the queue with 100.
-	ulVarToSend = 100;
-	xQueueOverwrite( xQueue, &ulVarToSend );
-
-	// This time read from the queue, leaving the queue empty once more.
-	// A block time of 0 is used again.
-	xQueueReceive( xQueue, &ulValReceived, 0 );
-
-	// The value read should be the last value written, even though the
-	// queue was already full when the value was written.
-	if( ulValReceived != 100 )
-	{
-		// Error!
-	}
-
-	// ...
-}
- 
- * \defgroup xQueueOverwrite xQueueOverwrite - * \ingroup QueueManagement - */ -#define xQueueOverwrite( xQueue, pvItemToQueue ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE ) - - -/** - * queue. h - *
- BaseType_t xQueueGenericSend(
-									QueueHandle_t xQueue,
-									const void * pvItemToQueue,
-									TickType_t xTicksToWait
-									BaseType_t xCopyPosition
-								);
- * 
- * - * It is preferred that the macros xQueueSend(), xQueueSendToFront() and - * xQueueSendToBack() are used in place of calling this function directly. - * - * Post an item on a queue. The item is queued by copy, not by reference. - * This function must not be called from an interrupt service routine. - * See xQueueSendFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the - * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the - * item at the back of the queue, or queueSEND_TO_FRONT to place the item - * at the front of the queue (for high priority messages). - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10, queueSEND_TO_BACK ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0, queueSEND_TO_BACK );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
- BaseType_t xQueuePeek(
-							 QueueHandle_t xQueue,
-							 void * const pvBuffer,
-							 TickType_t xTicksToWait
-						 );
- * - * Receive an item from a queue without removing the item from the queue. - * The item is received by copy so a buffer of adequate size must be - * provided. The number of bytes copied into the buffer was defined when - * the queue was created. - * - * Successfully received items remain on the queue so will be returned again - * by the next call, or a call to xQueueReceive(). - * - * This macro must not be used in an interrupt service routine. See - * xQueuePeekFromISR() for an alternative that can be called from an interrupt - * service routine. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * xQueuePeek() will return immediately if xTicksToWait is 0 and the queue - * is empty. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- QueueHandle_t xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Send a pointer to a struct AMessage object.  Don't block if the
-	// queue is already full.
-	pxMessage = & xMessage;
-	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to peek the data from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-	if( xQueue != 0 )
-	{
-		// Peek a message on the created queue.  Block for 10 ticks if a
-		// message is not immediately available.
-		if( xQueuePeek( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
-		{
-			// pcRxedMessage now points to the struct AMessage variable posted
-			// by vATask, but the item still remains on the queue.
-		}
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueuePeek xQueuePeek - * \ingroup QueueManagement - */ -// BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * queue. h - *
- BaseType_t xQueuePeekFromISR(
-									QueueHandle_t xQueue,
-									void *pvBuffer,
-								);
- * - * A version of xQueuePeek() that can be called from an interrupt service - * routine (ISR). - * - * Receive an item from a queue without removing the item from the queue. - * The item is received by copy so a buffer of adequate size must be - * provided. The number of bytes copied into the buffer was defined when - * the queue was created. - * - * Successfully received items remain on the queue so will be returned again - * by the next call, or a call to xQueueReceive(). - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * \defgroup xQueuePeekFromISR xQueuePeekFromISR - * \ingroup QueueManagement - */ -// BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * queue. h - *
- BaseType_t xQueueReceive(
-								 QueueHandle_t xQueue,
-								 void *pvBuffer,
-								 TickType_t xTicksToWait
-							);
- * - * Receive an item from a queue. The item is received by copy so a buffer of - * adequate size must be provided. The number of bytes copied into the buffer - * was defined when the queue was created. - * - * Successfully received items are removed from the queue. - * - * This function must not be used in an interrupt service routine. See - * xQueueReceiveFromISR for an alternative that can. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. xQueueReceive() will return immediately if xTicksToWait - * is zero and the queue is empty. The time is defined in tick periods so the - * constant portTICK_PERIOD_MS should be used to convert to real time if this is - * required. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- QueueHandle_t xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Send a pointer to a struct AMessage object.  Don't block if the
-	// queue is already full.
-	pxMessage = & xMessage;
-	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to receive from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-	if( xQueue != 0 )
-	{
-		// Receive a message on the created queue.  Block for 10 ticks if a
-		// message is not immediately available.
-		if( xQueueReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
-		{
-			// pcRxedMessage now points to the struct AMessage variable posted
-			// by vATask.
-		}
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );
- * - * Return the number of messages stored in a queue. - * - * @param xQueue A handle to the queue being queried. - * - * @return The number of messages available in the queue. - * - * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting - * \ingroup QueueManagement - */ -// UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * queue. h - *
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );
- * - * Return the number of free spaces available in a queue. This is equal to the - * number of items that can be sent to the queue before the queue becomes full - * if no items are removed. - * - * @param xQueue A handle to the queue being queried. - * - * @return The number of spaces available in the queue. - * - * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting - * \ingroup QueueManagement - */ -// UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * queue. h - *
void vQueueDelete( QueueHandle_t xQueue );
- * - * Delete a queue - freeing all the memory allocated for storing of items - * placed on the queue. - * - * @param xQueue A handle to the queue to be deleted. - * - * \defgroup vQueueDelete vQueueDelete - * \ingroup QueueManagement - */ -// void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * queue. h - *
- BaseType_t xQueueSendToFrontFromISR(
-										 QueueHandle_t xQueue,
-										 const void *pvItemToQueue,
-										 BaseType_t *pxHigherPriorityTaskWoken
-									  );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). - * - * Post an item to the front of a queue. It is safe to use this macro from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueSendToFrontFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueSendToFromFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPrioritTaskWoken;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWoken = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post the byte.
-		xQueueSendToFrontFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.
-	if( xHigherPriorityTaskWoken )
-	{
-		taskYIELD ();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT ) - - -/** - * queue. h - *
- BaseType_t xQueueSendToBackFromISR(
-										 QueueHandle_t xQueue,
-										 const void *pvItemToQueue,
-										 BaseType_t *pxHigherPriorityTaskWoken
-									  );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). - * - * Post an item to the back of a queue. It is safe to use this macro from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueSendToBackFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueSendToBackFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPriorityTaskWoken;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWoken = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post the byte.
-		xQueueSendToBackFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.
-	if( xHigherPriorityTaskWoken )
-	{
-		taskYIELD ();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueOverwriteFromISR(
-							  QueueHandle_t xQueue,
-							  const void * pvItemToQueue,
-							  BaseType_t *pxHigherPriorityTaskWoken
-						 );
- * 
- * - * A version of xQueueOverwrite() that can be used in an interrupt service - * routine (ISR). - * - * Only for use with queues that can hold a single item - so the queue is either - * empty or full. - * - * Post an item on a queue. If the queue is already full then overwrite the - * value held in the queue. The item is queued by copy, not by reference. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueOverwriteFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueOverwriteFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return xQueueOverwriteFromISR() is a macro that calls - * xQueueGenericSendFromISR(), and therefore has the same return values as - * xQueueSendToFrontFromISR(). However, pdPASS is the only value that can be - * returned because xQueueOverwriteFromISR() will write to the queue even when - * the queue is already full. - * - * Example usage: -
-
- QueueHandle_t xQueue;
-
- void vFunction( void *pvParameters )
- {
- 	// Create a queue to hold one uint32_t value.  It is strongly
-	// recommended *not* to use xQueueOverwriteFromISR() on queues that can
-	// contain more than one value, and doing so will trigger an assertion
-	// if configASSERT() is defined.
-	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
-}
-
-void vAnInterruptHandler( void )
-{
-// xHigherPriorityTaskWoken must be set to pdFALSE before it is used.
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;
-uint32_t ulVarToSend, ulValReceived;
-
-	// Write the value 10 to the queue using xQueueOverwriteFromISR().
-	ulVarToSend = 10;
-	xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );
-
-	// The queue is full, but calling xQueueOverwriteFromISR() again will still
-	// pass because the value held in the queue will be overwritten with the
-	// new value.
-	ulVarToSend = 100;
-	xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );
-
-	// Reading from the queue will now return 100.
-
-	// ...
-
-	if( xHigherPrioritytaskWoken == pdTRUE )
-	{
-		// Writing to the queue caused a task to unblock and the unblocked task
-		// has a priority higher than or equal to the priority of the currently
-		// executing task (the task this interrupt interrupted).  Perform a context
-		// switch so this interrupt returns directly to the unblocked task.
-		portYIELD_FROM_ISR(); // or portEND_SWITCHING_ISR() depending on the port.
-	}
-}
- 
- * \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR - * \ingroup QueueManagement - */ -#define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE ) - -/** - * queue. h - *
- BaseType_t xQueueSendFromISR(
-									 QueueHandle_t xQueue,
-									 const void *pvItemToQueue,
-									 BaseType_t *pxHigherPriorityTaskWoken
-								);
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). It is included - * for backward compatibility with versions of FreeRTOS.org that did not - * include the xQueueSendToBackFromISR() and xQueueSendToFrontFromISR() - * macros. - * - * Post an item to the back of a queue. It is safe to use this function from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueSendFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueSendFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPriorityTaskWoken;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWoken = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post the byte.
-		xQueueSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.
-	if( xHigherPriorityTaskWoken )
-	{
-		// Actual macro used here is port specific.
-		portYIELD_FROM_ISR ();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueGenericSendFromISR(
-										   QueueHandle_t		xQueue,
-										   const	void	*pvItemToQueue,
-										   BaseType_t	*pxHigherPriorityTaskWoken,
-										   BaseType_t	xCopyPosition
-									   );
- 
- * - * It is preferred that the macros xQueueSendFromISR(), - * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place - * of calling this function directly. xQueueGiveFromISR() is an - * equivalent for use by semaphores that don't actually copy any data. - * - * Post an item on a queue. It is safe to use this function from within an - * interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueGenericSendFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueGenericSendFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the - * item at the back of the queue, or queueSEND_TO_FRONT to place the item - * at the front of the queue (for high priority messages). - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPriorityTaskWokenByPost;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWokenByPost = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post each byte.
-		xQueueGenericSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWokenByPost, queueSEND_TO_BACK );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.  Note that the
-	// name of the yield function required is port specific.
-	if( xHigherPriorityTaskWokenByPost )
-	{
-		taskYIELD_YIELD_FROM_ISR();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
- BaseType_t xQueueReceiveFromISR(
-									   QueueHandle_t	xQueue,
-									   void	*pvBuffer,
-									   BaseType_t *pxTaskWoken
-								   );
- * 
- * - * Receive an item from a queue. It is safe to use this function from within an - * interrupt service routine. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param pxTaskWoken A task may be blocked waiting for space to become - * available on the queue. If xQueueReceiveFromISR causes such a task to - * unblock *pxTaskWoken will get set to pdTRUE, otherwise *pxTaskWoken will - * remain unchanged. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
-
- QueueHandle_t xQueue;
-
- // Function to create a queue and post some values.
- void vAFunction( void *pvParameters )
- {
- char cValueToPost;
- const TickType_t xTicksToWait = ( TickType_t )0xff;
-
-	// Create a queue capable of containing 10 characters.
-	xQueue = xQueueCreate( 10, sizeof( char ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Post some characters that will be used within an ISR.  If the queue
-	// is full then this task will block for xTicksToWait ticks.
-	cValueToPost = 'a';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
-	cValueToPost = 'b';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
-
-	// ... keep posting characters ... this task may block when the queue
-	// becomes full.
-
-	cValueToPost = 'c';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
- }
-
- // ISR that outputs all the characters received on the queue.
- void vISR_Routine( void )
- {
- BaseType_t xTaskWokenByReceive = pdFALSE;
- char cRxedChar;
-
-	while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )
-	{
-		// A character was received.  Output the character now.
-		vOutputCharacter( cRxedChar );
-
-		// If removing the character from the queue woke the task that was
-		// posting onto the queue cTaskWokenByReceive will have been set to
-		// pdTRUE.  No matter how many times this loop iterates only one
-		// task will be woken.
-	}
-
-	if( cTaskWokenByPost != ( char ) pdFALSE;
-	{
-		taskYIELD ();
-	}
- }
- 
- * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR - * \ingroup QueueManagement - */ -BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/* - * Utilities to query queues that are safe to use from an ISR. These utilities - * should be used only from witin an ISR, or within a critical section. - */ -BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * The functions defined above are for passing data to and from tasks. The - * functions below are the equivalents for passing data to and from - * co-routines. - * - * These functions are called from the co-routine macro implementation and - * should not be called directly from application code. Instead use the macro - * wrappers defined within croutine.h. - */ -// BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken ); -// WARNING: ^^^ this API is not available in this release - -// BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken ); -// WARNING: ^^^ this API is not available in this release - -// BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait ); -// WARNING: ^^^ this API is not available in this release - -// BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait ); -// WARNING: ^^^ this API is not available in this release - - -/* - * For internal use only. Use xSemaphoreCreateMutex(), - * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling - * these functions directly. - */ -// QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; -// QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * For internal use only. Use xSemaphoreTakeMutexRecursive() or - * xSemaphoreGiveMutexRecursive() instead of calling these functions directly. - */ -// BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Reset a queue back to its original empty state. The return value is now - * obsolete and is always set to pdPASS. - */ -#define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE ) - -/* - * The registry is provided as a means for kernel aware debuggers to - * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add - * a queue, semaphore or mutex handle to the registry if you want the handle - * to be available to a kernel aware debugger. If you are not using a kernel - * aware debugger then this function can be ignored. - * - * configQUEUE_REGISTRY_SIZE defines the maximum number of handles the - * registry can hold. configQUEUE_REGISTRY_SIZE must be greater than 0 - * within FreeRTOSConfig.h for the registry to be available. Its value - * does not effect the number of queues, semaphores and mutexes that can be - * created - just the number that the registry can hold. - * - * @param xQueue The handle of the queue being added to the registry. This - * is the handle returned by a call to xQueueCreate(). Semaphore and mutex - * handles can also be passed in here. - * - * @param pcName The name to be associated with the handle. This is the - * name that the kernel aware debugger will display. The queue registry only - * stores a pointer to the string - so the string must be persistent (global or - * preferably in ROM/Flash), not on the stack. - */ -#if( configQUEUE_REGISTRY_SIZE > 0 ) - void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif - -/* - * The registry is provided as a means for kernel aware debuggers to - * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add - * a queue, semaphore or mutex handle to the registry if you want the handle - * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to - * remove the queue, semaphore or mutex from the register. If you are not using - * a kernel aware debugger then this function can be ignored. - * - * @param xQueue The handle of the queue being removed from the registry. - */ -#if( configQUEUE_REGISTRY_SIZE > 0 ) - void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -#endif - -/* - * The queue registry is provided as a means for kernel aware debuggers to - * locate queues, semaphores and mutexes. Call pcQueueGetName() to look - * up and return the name of a queue in the queue registry from the queue's - * handle. - * - * @param xQueue The handle of the queue the name of which will be returned. - * @return If the queue is in the registry then a pointer to the name of the - * queue is returned. If the queue is not in the registry then NULL is - * returned. - */ -#if( configQUEUE_REGISTRY_SIZE > 0 ) - const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif - -/* - * Generic version of the function used to creaet a queue using dynamic memory - * allocation. This is called by other functions and macros that create other - * RTOS objects that use the queue structure as their base. - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -#endif - -/* - * Generic version of the function used to creaet a queue using dynamic memory - * allocation. This is called by other functions and macros that create other - * RTOS objects that use the queue structure as their base. - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -#endif - -/* - * Queue sets provide a mechanism to allow a task to block (pend) on a read - * operation from multiple queues or semaphores simultaneously. - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * A queue set must be explicitly created using a call to xQueueCreateSet() - * before it can be used. Once created, standard FreeRTOS queues and semaphores - * can be added to the set using calls to xQueueAddToSet(). - * xQueueSelectFromSet() is then used to determine which, if any, of the queues - * or semaphores contained in the set is in a state where a queue read or - * semaphore take operation would be successful. - * - * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html - * for reasons why queue sets are very rarely needed in practice as there are - * simpler methods of blocking on multiple objects. - * - * Note 2: Blocking on a queue set that contains a mutex will not cause the - * mutex holder to inherit the priority of the blocked task. - * - * Note 3: An additional 4 bytes of RAM is required for each space in a every - * queue added to a queue set. Therefore counting semaphores that have a high - * maximum count value should not be added to a queue set. - * - * Note 4: A receive (in the case of a queue) or take (in the case of a - * semaphore) operation must not be performed on a member of a queue set unless - * a call to xQueueSelectFromSet() has first returned a handle to that set member. - * - * @param uxEventQueueLength Queue sets store events that occur on - * the queues and semaphores contained in the set. uxEventQueueLength specifies - * the maximum number of events that can be queued at once. To be absolutely - * certain that events are not lost uxEventQueueLength should be set to the - * total sum of the length of the queues added to the set, where binary - * semaphores and mutexes have a length of 1, and counting semaphores have a - * length set by their maximum count value. Examples: - * + If a queue set is to hold a queue of length 5, another queue of length 12, - * and a binary semaphore, then uxEventQueueLength should be set to - * (5 + 12 + 1), or 18. - * + If a queue set is to hold three binary semaphores then uxEventQueueLength - * should be set to (1 + 1 + 1 ), or 3. - * + If a queue set is to hold a counting semaphore that has a maximum count of - * 5, and a counting semaphore that has a maximum count of 3, then - * uxEventQueueLength should be set to (5 + 3), or 8. - * - * @return If the queue set is created successfully then a handle to the created - * queue set is returned. Otherwise NULL is returned. - */ -// QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Adds a queue or semaphore to a queue set that was previously created by a - * call to xQueueCreateSet(). - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * Note 1: A receive (in the case of a queue) or take (in the case of a - * semaphore) operation must not be performed on a member of a queue set unless - * a call to xQueueSelectFromSet() has first returned a handle to that set member. - * - * @param xQueueOrSemaphore The handle of the queue or semaphore being added to - * the queue set (cast to an QueueSetMemberHandle_t type). - * - * @param xQueueSet The handle of the queue set to which the queue or semaphore - * is being added. - * - * @return If the queue or semaphore was successfully added to the queue set - * then pdPASS is returned. If the queue could not be successfully added to the - * queue set because it is already a member of a different queue set then pdFAIL - * is returned. - */ -// BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Removes a queue or semaphore from a queue set. A queue or semaphore can only - * be removed from a set if the queue or semaphore is empty. - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * @param xQueueOrSemaphore The handle of the queue or semaphore being removed - * from the queue set (cast to an QueueSetMemberHandle_t type). - * - * @param xQueueSet The handle of the queue set in which the queue or semaphore - * is included. - * - * @return If the queue or semaphore was successfully removed from the queue set - * then pdPASS is returned. If the queue was not in the queue set, or the - * queue (or semaphore) was not empty, then pdFAIL is returned. - */ -// BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * xQueueSelectFromSet() selects from the members of a queue set a queue or - * semaphore that either contains data (in the case of a queue) or is available - * to take (in the case of a semaphore). xQueueSelectFromSet() effectively - * allows a task to block (pend) on a read operation on all the queues and - * semaphores in a queue set simultaneously. - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html - * for reasons why queue sets are very rarely needed in practice as there are - * simpler methods of blocking on multiple objects. - * - * Note 2: Blocking on a queue set that contains a mutex will not cause the - * mutex holder to inherit the priority of the blocked task. - * - * Note 3: A receive (in the case of a queue) or take (in the case of a - * semaphore) operation must not be performed on a member of a queue set unless - * a call to xQueueSelectFromSet() has first returned a handle to that set member. - * - * @param xQueueSet The queue set on which the task will (potentially) block. - * - * @param xTicksToWait The maximum time, in ticks, that the calling task will - * remain in the Blocked state (with other tasks executing) to wait for a member - * of the queue set to be ready for a successful queue read or semaphore take - * operation. - * - * @return xQueueSelectFromSet() will return the handle of a queue (cast to - * a QueueSetMemberHandle_t type) contained in the queue set that contains data, - * or the handle of a semaphore (cast to a QueueSetMemberHandle_t type) contained - * in the queue set that is available, or NULL if no such queue or semaphore - * exists before before the specified block time expires. - */ -// QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * A version of xQueueSelectFromSet() that can be used from an ISR. - */ -// QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* Not public API functions. */ -void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION; -// void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - - -#ifdef __cplusplus -} -#endif - -#endif /* QUEUE_H */ - diff --git a/bundles/mesh/inc/os/semphr.h b/bundles/mesh/inc/os/semphr.h deleted file mode 100644 index 2c106eac0..000000000 --- a/bundles/mesh/inc/os/semphr.h +++ /dev/null @@ -1,1140 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef SEMAPHORE_H -#define SEMAPHORE_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h" must appear in source files before "include semphr.h" -#endif - -#include "queue.h" - -typedef QueueHandle_t SemaphoreHandle_t; - -#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U ) -#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U ) -#define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U ) - - -/** - * semphr. h - *
vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore )
- * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * This old vSemaphoreCreateBinary() macro is now deprecated in favour of the - * xSemaphoreCreateBinary() function. Note that binary semaphores created using - * the vSemaphoreCreateBinary() macro are created in a state such that the - * first call to 'take' the semaphore would pass, whereas binary semaphores - * created using xSemaphoreCreateBinary() are created in a state such that the - * the semaphore must first be 'given' before it can be 'taken'. - * - * Macro that implements a semaphore by using the existing queue mechanism. - * The queue length is 1 as this is a binary semaphore. The data size is 0 - * as we don't want to actually store any data - we just want to know if the - * queue is empty or full. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @param xSemaphore Handle to the created semaphore. Should be of type SemaphoreHandle_t. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().
-    // This is a macro so pass the variable in directly.
-    vSemaphoreCreateBinary( xSemaphore );
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define vSemaphoreCreateBinary( xSemaphore ) \ - { \ - ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ - if( ( xSemaphore ) != NULL ) \ - { \ - ( void ) xSemaphoreGive( ( xSemaphore ) ); \ - } \ - } -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateBinary( void )
- * - * Creates a new binary semaphore instance, and returns a handle by which the - * new semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, binary semaphores use a block - * of memory, in which the semaphore structure is stored. If a binary semaphore - * is created using xSemaphoreCreateBinary() then the required memory is - * automatically dynamically allocated inside the xSemaphoreCreateBinary() - * function. (see http://www.freertos.org/a00111.html). If a binary semaphore - * is created using xSemaphoreCreateBinaryStatic() then the application writer - * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a - * binary semaphore to be created without using any dynamic memory allocation. - * - * The old vSemaphoreCreateBinary() macro is now deprecated in favour of this - * xSemaphoreCreateBinary() function. Note that binary semaphores created using - * the vSemaphoreCreateBinary() macro are created in a state such that the - * first call to 'take' the semaphore would pass, whereas binary semaphores - * created using xSemaphoreCreateBinary() are created in a state such that the - * the semaphore must first be 'given' before it can be 'taken'. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @return Handle to the created semaphore, or NULL if the memory required to - * hold the semaphore's data structures could not be allocated. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateBinary();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateBinary xSemaphoreCreateBinary - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer )
- * - * Creates a new binary semaphore instance, and returns a handle by which the - * new semaphore can be referenced. - * - * NOTE: In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, binary semaphores use a block - * of memory, in which the semaphore structure is stored. If a binary semaphore - * is created using xSemaphoreCreateBinary() then the required memory is - * automatically dynamically allocated inside the xSemaphoreCreateBinary() - * function. (see http://www.freertos.org/a00111.html). If a binary semaphore - * is created using xSemaphoreCreateBinaryStatic() then the application writer - * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a - * binary semaphore to be created without using any dynamic memory allocation. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the semaphore's data structure, removing the - * need for the memory to be allocated dynamically. - * - * @return If the semaphore is created then a handle to the created semaphore is - * returned. If pxSemaphoreBuffer is NULL then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
- StaticSemaphore_t xSemaphoreBuffer;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
-    // The semaphore's data structures will be placed in the xSemaphoreBuffer
-    // variable, the address of which is passed into the function.  The
-    // function's parameter is not NULL, so the function will not attempt any
-    // dynamic memory allocation, and therefore the function will not return
-    // return NULL.
-    xSemaphore = xSemaphoreCreateBinary( &xSemaphoreBuffer );
-
-    // Rest of task code goes here.
- }
- 
- * \defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic - * \ingroup Semaphores - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateBinaryStatic( pxStaticSemaphore ) xQueueGenericCreateStatic( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticSemaphore, queueQUEUE_TYPE_BINARY_SEMAPHORE ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
xSemaphoreTake(
- *                   SemaphoreHandle_t xSemaphore,
- *                   TickType_t xBlockTime
- *               )
- * - * Macro to obtain a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting(). - * - * @param xSemaphore A handle to the semaphore being taken - obtained when - * the semaphore was created. - * - * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_PERIOD_MS can be used to convert this to a - * real time. A block time of zero can be used to poll the semaphore. A block - * time of portMAX_DELAY can be used to block indefinitely (provided - * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). - * - * @return pdTRUE if the semaphore was obtained. pdFALSE - * if xBlockTime expired without the semaphore becoming available. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- // A task that creates a semaphore.
- void vATask( void * pvParameters )
- {
-    // Create the semaphore to guard a shared resource.
-    xSemaphore = xSemaphoreCreateBinary();
- }
-
- // A task that uses the semaphore.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xSemaphore != NULL )
-    {
-        // See if we can obtain the semaphore.  If the semaphore is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the semaphore and can now access the
-            // shared resource.
-
-            // ...
-
-            // We have finished accessing the shared resource.  Release the
-            // semaphore.
-            xSemaphoreGive( xSemaphore );
-        }
-        else
-        {
-            // We could not obtain the semaphore and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreTake xSemaphoreTake - * \ingroup Semaphores - */ -#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) ) - -/** - * semphr. h - * xSemaphoreTakeRecursive( - * SemaphoreHandle_t xMutex, - * TickType_t xBlockTime - * ) - * - * Macro to recursively obtain, or 'take', a mutex type semaphore. - * The mutex must have previously been created using a call to - * xSemaphoreCreateRecursiveMutex(); - * - * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this - * macro to be available. - * - * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * @param xMutex A handle to the mutex being obtained. This is the - * handle returned by xSemaphoreCreateRecursiveMutex(); - * - * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_PERIOD_MS can be used to convert this to a - * real time. A block time of zero can be used to poll the semaphore. If - * the task already owns the semaphore then xSemaphoreTakeRecursive() will - * return immediately no matter what the value of xBlockTime. - * - * @return pdTRUE if the semaphore was obtained. pdFALSE if xBlockTime - * expired without the semaphore becoming available. - * - * Example usage: -
- SemaphoreHandle_t xMutex = NULL;
-
- // A task that creates a mutex.
- void vATask( void * pvParameters )
- {
-    // Create the mutex to guard a shared resource.
-    xMutex = xSemaphoreCreateRecursiveMutex();
- }
-
- // A task that uses the mutex.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xMutex != NULL )
-    {
-        // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTakeRecursive( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the mutex and can now access the
-            // shared resource.
-
-            // ...
-            // For some reason due to the nature of the code further calls to
-            // xSemaphoreTakeRecursive() are made on the same mutex.  In real
-            // code these would not be just sequential calls as this would make
-            // no sense.  Instead the calls are likely to be buried inside
-            // a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-
-            // The mutex has now been 'taken' three times, so will not be
-            // available to another task until it has also been given back
-            // three times.  Again it is unlikely that real code would have
-            // these calls sequentially, but instead buried in a more complex
-            // call structure.  This is just for illustrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-            xSemaphoreGiveRecursive( xMutex );
-            xSemaphoreGiveRecursive( xMutex );
-
-            // Now the mutex can be taken by other tasks.
-        }
-        else
-        {
-            // We could not obtain the mutex and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive - * \ingroup Semaphores - */ -#if( configUSE_RECURSIVE_MUTEXES == 1 ) - #define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) ) -#endif - -/** - * semphr. h - *
xSemaphoreGive( SemaphoreHandle_t xSemaphore )
- * - * Macro to release a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake(). - * - * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for - * an alternative which can be used from an ISR. - * - * This macro must also not be used on semaphores created using - * xSemaphoreCreateRecursiveMutex(). - * - * @param xSemaphore A handle to the semaphore being released. This is the - * handle returned when the semaphore was created. - * - * @return pdTRUE if the semaphore was released. pdFALSE if an error occurred. - * Semaphores are implemented using queues. An error can occur if there is - * no space on the queue to post a message - indicating that the - * semaphore was not first obtained correctly. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Create the semaphore to guard a shared resource.
-    xSemaphore = vSemaphoreCreateBinary();
-
-    if( xSemaphore != NULL )
-    {
-        if( xSemaphoreGive( xSemaphore ) != pdTRUE )
-        {
-            // We would expect this call to fail because we cannot give
-            // a semaphore without first "taking" it!
-        }
-
-        // Obtain the semaphore - don't block if the semaphore is not
-        // immediately available.
-        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 0 ) )
-        {
-            // We now have the semaphore and can access the shared resource.
-
-            // ...
-
-            // We have finished accessing the shared resource so can free the
-            // semaphore.
-            if( xSemaphoreGive( xSemaphore ) != pdTRUE )
-            {
-                // We would not expect this call to fail because we must have
-                // obtained the semaphore to get here.
-            }
-        }
-    }
- }
- 
- * \defgroup xSemaphoreGive xSemaphoreGive - * \ingroup Semaphores - */ -#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) - -/** - * semphr. h - *
xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )
- * - * Macro to recursively release, or 'give', a mutex type semaphore. - * The mutex must have previously been created using a call to - * xSemaphoreCreateRecursiveMutex(); - * - * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this - * macro to be available. - * - * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * @param xMutex A handle to the mutex being released, or 'given'. This is the - * handle returned by xSemaphoreCreateMutex(); - * - * @return pdTRUE if the semaphore was given. - * - * Example usage: -
- SemaphoreHandle_t xMutex = NULL;
-
- // A task that creates a mutex.
- void vATask( void * pvParameters )
- {
-    // Create the mutex to guard a shared resource.
-    xMutex = xSemaphoreCreateRecursiveMutex();
- }
-
- // A task that uses the mutex.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xMutex != NULL )
-    {
-        // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the mutex and can now access the
-            // shared resource.
-
-            // ...
-            // For some reason due to the nature of the code further calls to
-			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
-			// code these would not be just sequential calls as this would make
-			// no sense.  Instead the calls are likely to be buried inside
-			// a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-
-            // The mutex has now been 'taken' three times, so will not be
-			// available to another task until it has also been given back
-			// three times.  Again it is unlikely that real code would have
-			// these calls sequentially, it would be more likely that the calls
-			// to xSemaphoreGiveRecursive() would be called as a call stack
-			// unwound.  This is just for demonstrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-
-			// Now the mutex can be taken by other tasks.
-        }
-        else
-        {
-            // We could not obtain the mutex and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive - * \ingroup Semaphores - */ -#if( configUSE_RECURSIVE_MUTEXES == 1 ) - #define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( ( xMutex ) ) -#endif - -/** - * semphr. h - *
- xSemaphoreGiveFromISR(
-                          SemaphoreHandle_t xSemaphore,
-                          BaseType_t *pxHigherPriorityTaskWoken
-                      )
- * - * Macro to release a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting(). - * - * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) - * must not be used with this macro. - * - * This macro can be used from an ISR. - * - * @param xSemaphore A handle to the semaphore being released. This is the - * handle returned when the semaphore was created. - * - * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xSemaphoreGiveFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the semaphore was successfully given, otherwise errQUEUE_FULL. - * - * Example usage: -
- \#define LONG_TIME 0xffff
- \#define TICKS_TO_WAIT	10
- SemaphoreHandle_t xSemaphore = NULL;
-
- // Repetitive task.
- void vATask( void * pvParameters )
- {
-    for( ;; )
-    {
-        // We want this task to run every 10 ticks of a timer.  The semaphore
-        // was created before this task was started.
-
-        // Block waiting for the semaphore to become available.
-        if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
-        {
-            // It is time to execute.
-
-            // ...
-
-            // We have finished our task.  Return to the top of the loop where
-            // we will block on the semaphore until it is time to execute
-            // again.  Note when using the semaphore for synchronisation with an
-			// ISR in this manner there is no need to 'give' the semaphore back.
-        }
-    }
- }
-
- // Timer ISR
- void vTimerISR( void * pvParameters )
- {
- static uint8_t ucLocalTickCount = 0;
- static BaseType_t xHigherPriorityTaskWoken;
-
-    // A timer tick has occurred.
-
-    // ... Do other time functions.
-
-    // Is it time for vATask () to run?
-	xHigherPriorityTaskWoken = pdFALSE;
-    ucLocalTickCount++;
-    if( ucLocalTickCount >= TICKS_TO_WAIT )
-    {
-        // Unblock the task by releasing the semaphore.
-        xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );
-
-        // Reset the count so we release the semaphore again in 10 ticks time.
-        ucLocalTickCount = 0;
-    }
-
-    if( xHigherPriorityTaskWoken != pdFALSE )
-    {
-        // We can force a context switch here.  Context switching from an
-        // ISR uses port specific syntax.  Check the demo task for your port
-        // to find the syntax required.
-    }
- }
- 
- * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR - * \ingroup Semaphores - */ -#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) ) - -/** - * semphr. h - *
- xSemaphoreTakeFromISR(
-                          SemaphoreHandle_t xSemaphore,
-                          BaseType_t *pxHigherPriorityTaskWoken
-                      )
- * - * Macro to take a semaphore from an ISR. The semaphore must have - * previously been created with a call to xSemaphoreCreateBinary() or - * xSemaphoreCreateCounting(). - * - * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) - * must not be used with this macro. - * - * This macro can be used from an ISR, however taking a semaphore from an ISR - * is not a common operation. It is likely to only be useful when taking a - * counting semaphore when an interrupt is obtaining an object from a resource - * pool (when the semaphore count indicates the number of resources available). - * - * @param xSemaphore A handle to the semaphore being taken. This is the - * handle returned when the semaphore was created. - * - * @param pxHigherPriorityTaskWoken xSemaphoreTakeFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if taking the semaphore caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xSemaphoreTakeFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the semaphore was successfully taken, otherwise - * pdFALSE - */ -#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) ) - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateMutex( void )
- * - * Creates a new mutex type semaphore instance, and returns a handle by which - * the new mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, mutex semaphores use a block - * of memory, in which the mutex structure is stored. If a mutex is created - * using xSemaphoreCreateMutex() then the required memory is automatically - * dynamically allocated inside the xSemaphoreCreateMutex() function. (see - * http://www.freertos.org/a00111.html). If a mutex is created using - * xSemaphoreCreateMutexStatic() then the application writer must provided the - * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created - * without using any dynamic memory allocation. - * - * Mutexes created using this function can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros must not be used. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @return If the mutex was successfully created then a handle to the created - * semaphore is returned. If there was not enough heap to allocate the mutex - * data structures then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateMutex();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateMutex xSemaphoreCreateMutex - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateMutexStatic( StaticSemaphore_t *pxMutexBuffer )
- * - * Creates a new mutex type semaphore instance, and returns a handle by which - * the new mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, mutex semaphores use a block - * of memory, in which the mutex structure is stored. If a mutex is created - * using xSemaphoreCreateMutex() then the required memory is automatically - * dynamically allocated inside the xSemaphoreCreateMutex() function. (see - * http://www.freertos.org/a00111.html). If a mutex is created using - * xSemaphoreCreateMutexStatic() then the application writer must provided the - * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created - * without using any dynamic memory allocation. - * - * Mutexes created using this function can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros must not be used. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, - * which will be used to hold the mutex's data structure, removing the need for - * the memory to be allocated dynamically. - * - * @return If the mutex was successfully created then a handle to the created - * mutex is returned. If pxMutexBuffer was NULL then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xMutexBuffer;
-
- void vATask( void * pvParameters )
- {
-    // A mutex cannot be used before it has been created.  xMutexBuffer is
-    // into xSemaphoreCreateMutexStatic() so no dynamic memory allocation is
-    // attempted.
-    xSemaphore = xSemaphoreCreateMutexStatic( &xMutexBuffer );
-
-    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
-    // so there is no need to check it.
- }
- 
- * \defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic - * \ingroup Semaphores - */ - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateMutexStatic( pxMutexBuffer ) xQueueCreateMutexStatic( queueQUEUE_TYPE_MUTEX, ( pxMutexBuffer ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )
- * - * Creates a new recursive mutex type semaphore instance, and returns a handle - * by which the new recursive mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, recursive mutexs use a block - * of memory, in which the mutex structure is stored. If a recursive mutex is - * created using xSemaphoreCreateRecursiveMutex() then the required memory is - * automatically dynamically allocated inside the - * xSemaphoreCreateRecursiveMutex() function. (see - * http://www.freertos.org/a00111.html). If a recursive mutex is created using - * xSemaphoreCreateRecursiveMutexStatic() then the application writer must - * provide the memory that will get used by the mutex. - * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to - * be created without using any dynamic memory allocation. - * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros must not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @return xSemaphore Handle to the created mutex semaphore. Should be of type - * SemaphoreHandle_t. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateRecursiveMutex();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex - * \ingroup Semaphores - */ -#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) - #define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic( StaticSemaphore_t *pxMutexBuffer )
- * - * Creates a new recursive mutex type semaphore instance, and returns a handle - * by which the new recursive mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, recursive mutexs use a block - * of memory, in which the mutex structure is stored. If a recursive mutex is - * created using xSemaphoreCreateRecursiveMutex() then the required memory is - * automatically dynamically allocated inside the - * xSemaphoreCreateRecursiveMutex() function. (see - * http://www.freertos.org/a00111.html). If a recursive mutex is created using - * xSemaphoreCreateRecursiveMutexStatic() then the application writer must - * provide the memory that will get used by the mutex. - * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to - * be created without using any dynamic memory allocation. - * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros must not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the recursive mutex's data structure, - * removing the need for the memory to be allocated dynamically. - * - * @return If the recursive mutex was successfully created then a handle to the - * created recursive mutex is returned. If pxMutexBuffer was NULL then NULL is - * returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xMutexBuffer;
-
- void vATask( void * pvParameters )
- {
-    // A recursive semaphore cannot be used before it is created.  Here a
-    // recursive mutex is created using xSemaphoreCreateRecursiveMutexStatic().
-    // The address of xMutexBuffer is passed into the function, and will hold
-    // the mutexes data structures - so no dynamic memory allocation will be
-    // attempted.
-    xSemaphore = xSemaphoreCreateRecursiveMutexStatic( &xMutexBuffer );
-
-    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
-    // so there is no need to check it.
- }
- 
- * \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic - * \ingroup Semaphores - */ -#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) - #define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount )
- * - * Creates a new counting semaphore instance, and returns a handle by which the - * new counting semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a counting semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, counting semaphores use a - * block of memory, in which the counting semaphore structure is stored. If a - * counting semaphore is created using xSemaphoreCreateCounting() then the - * required memory is automatically dynamically allocated inside the - * xSemaphoreCreateCounting() function. (see - * http://www.freertos.org/a00111.html). If a counting semaphore is created - * using xSemaphoreCreateCountingStatic() then the application writer can - * instead optionally provide the memory that will get used by the counting - * semaphore. xSemaphoreCreateCountingStatic() therefore allows a counting - * semaphore to be created without using any dynamic memory allocation. - * - * Counting semaphores are typically used for two things: - * - * 1) Counting events. - * - * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the - * initial count value to be zero. - * - * 2) Resource management. - * - * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a - * semaphore - decrementing the semaphore count value. When the count value - * reaches zero there are no free resources. When a task finishes with the - * resource it 'gives' the semaphore back - incrementing the semaphore count - * value. In this case it is desirable for the initial count value to be - * equal to the maximum count value, indicating that all resources are free. - * - * @param uxMaxCount The maximum count value that can be reached. When the - * semaphore reaches this value it can no longer be 'given'. - * - * @param uxInitialCount The count value assigned to the semaphore when it is - * created. - * - * @return Handle to the created semaphore. Null if the semaphore could not be - * created. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
-
- void vATask( void * pvParameters )
- {
- SemaphoreHandle_t xSemaphore = NULL;
-
-    // Semaphore cannot be used before a call to xSemaphoreCreateCounting().
-    // The max value to which the semaphore can count should be 10, and the
-    // initial value assigned to the count should be 0.
-    xSemaphore = xSemaphoreCreateCounting( 10, 0 );
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount, StaticSemaphore_t *pxSemaphoreBuffer )
- * - * Creates a new counting semaphore instance, and returns a handle by which the - * new counting semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a counting semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, counting semaphores use a - * block of memory, in which the counting semaphore structure is stored. If a - * counting semaphore is created using xSemaphoreCreateCounting() then the - * required memory is automatically dynamically allocated inside the - * xSemaphoreCreateCounting() function. (see - * http://www.freertos.org/a00111.html). If a counting semaphore is created - * using xSemaphoreCreateCountingStatic() then the application writer must - * provide the memory. xSemaphoreCreateCountingStatic() therefore allows a - * counting semaphore to be created without using any dynamic memory allocation. - * - * Counting semaphores are typically used for two things: - * - * 1) Counting events. - * - * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the - * initial count value to be zero. - * - * 2) Resource management. - * - * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a - * semaphore - decrementing the semaphore count value. When the count value - * reaches zero there are no free resources. When a task finishes with the - * resource it 'gives' the semaphore back - incrementing the semaphore count - * value. In this case it is desirable for the initial count value to be - * equal to the maximum count value, indicating that all resources are free. - * - * @param uxMaxCount The maximum count value that can be reached. When the - * semaphore reaches this value it can no longer be 'given'. - * - * @param uxInitialCount The count value assigned to the semaphore when it is - * created. - * - * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the semaphore's data structure, removing the - * need for the memory to be allocated dynamically. - * - * @return If the counting semaphore was successfully created then a handle to - * the created counting semaphore is returned. If pxSemaphoreBuffer was NULL - * then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xSemaphoreBuffer;
-
- void vATask( void * pvParameters )
- {
- SemaphoreHandle_t xSemaphore = NULL;
-
-    // Counting semaphore cannot be used before they have been created.  Create
-    // a counting semaphore using xSemaphoreCreateCountingStatic().  The max
-    // value to which the semaphore can count is 10, and the initial value
-    // assigned to the count will be 0.  The address of xSemaphoreBuffer is
-    // passed in and will be used to hold the semaphore structure, so no dynamic
-    // memory allocation will be used.
-    xSemaphore = xSemaphoreCreateCounting( 10, 0, &xSemaphoreBuffer );
-
-    // No memory allocation was attempted so xSemaphore cannot be NULL, so there
-    // is no need to check its value.
- }
- 
- * \defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic - * \ingroup Semaphores - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateCountingStatic( uxMaxCount, uxInitialCount, pxSemaphoreBuffer ) xQueueCreateCountingSemaphoreStatic( ( uxMaxCount ), ( uxInitialCount ), ( pxSemaphoreBuffer ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );
- * - * Delete a semaphore. This function must be used with care. For example, - * do not delete a mutex type semaphore if the mutex is held by a task. - * - * @param xSemaphore A handle to the semaphore to be deleted. - * - * \defgroup vSemaphoreDelete vSemaphoreDelete - * \ingroup Semaphores - */ -#define vSemaphoreDelete( xSemaphore ) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) ) - -/** - * semphr.h - *
TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );
- * - * If xMutex is indeed a mutex type semaphore, return the current mutex holder. - * If xMutex is not a mutex type semaphore, or the mutex is available (not held - * by a task), return NULL. - * - * Note: This is a good way of determining if the calling task is the mutex - * holder, but not a good way of determining the identity of the mutex holder as - * the holder may change between the function exiting and the returned value - * being tested. - */ -#define xSemaphoreGetMutexHolder( xSemaphore ) xQueueGetMutexHolder( ( xSemaphore ) ) - -/** - * semphr.h - *
TaskHandle_t xSemaphoreGetMutexHolderFromISR( SemaphoreHandle_t xMutex );
- * - * If xMutex is indeed a mutex type semaphore, return the current mutex holder. - * If xMutex is not a mutex type semaphore, or the mutex is available (not held - * by a task), return NULL. - * - */ -#define xSemaphoreGetMutexHolderFromISR( xSemaphore ) xQueueGetMutexHolderFromISR( ( xSemaphore ) ) - -/** - * semphr.h - *
UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );
- * - * If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns - * its current count value. If the semaphore is a binary semaphore then - * uxSemaphoreGetCount() returns 1 if the semaphore is available, and 0 if the - * semaphore is not available. - * - */ -#define uxSemaphoreGetCount( xSemaphore ) uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) ) - -#endif /* SEMAPHORE_H */ - - diff --git a/bundles/mesh/inc/os/task.h b/bundles/mesh/inc/os/task.h deleted file mode 100644 index 4f45fc747..000000000 --- a/bundles/mesh/inc/os/task.h +++ /dev/null @@ -1,2495 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef INC_TASK_H -#define INC_TASK_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h must appear in source files before include task.h" -#endif - -#include "list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * MACROS AND DEFINITIONS - *----------------------------------------------------------*/ - -#define tskKERNEL_VERSION_NUMBER "V10.2.0" -#define tskKERNEL_VERSION_MAJOR 10 -#define tskKERNEL_VERSION_MINOR 2 -#define tskKERNEL_VERSION_BUILD 0 - -/* MPU region parameters passed in ulParameters - * of MemoryRegion_t struct. */ -#define tskMPU_REGION_READ_ONLY ( 1UL << 0UL ) -#define tskMPU_REGION_READ_WRITE ( 1UL << 1UL ) -#define tskMPU_REGION_EXECUTE_NEVER ( 1UL << 2UL ) -#define tskMPU_REGION_NORMAL_MEMORY ( 1UL << 3UL ) -#define tskMPU_REGION_DEVICE_MEMORY ( 1UL << 4UL ) - -/** - * task. h - * - * Type by which tasks are referenced. For example, a call to xTaskCreate - * returns (via a pointer parameter) an TaskHandle_t variable that can then - * be used as a parameter to vTaskDelete to delete the task. - * - * \defgroup TaskHandle_t TaskHandle_t - * \ingroup Tasks - */ -struct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */ -typedef struct tskTaskControlBlock* TaskHandle_t; - -/* - * Defines the prototype to which the application task hook function must - * conform. - */ -typedef BaseType_t (*TaskHookFunction_t)( void * ); - -/* Task states returned by eTaskGetState. */ -typedef enum -{ - eRunning = 0, /* A task is querying the state of itself, so must be running. */ - eReady, /* The task being queried is in a read or pending ready list. */ - eBlocked, /* The task being queried is in the Blocked state. */ - eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ - eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */ - eInvalid /* Used as an 'invalid state' value. */ -} eTaskState; - -/* Actions that can be performed when vTaskNotify() is called. */ -typedef enum -{ - eNoAction = 0, /* Notify the task without updating its notify value. */ - eSetBits, /* Set bits in the task's notification value. */ - eIncrement, /* Increment the task's notification value. */ - eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ - eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */ -} eNotifyAction; - -/* - * Used internally only. - */ -typedef struct xTIME_OUT -{ - BaseType_t xOverflowCount; - TickType_t xTimeOnEntering; -} TimeOut_t; - -/* - * Defines the memory ranges allocated to the task when an MPU is used. - */ -typedef struct xMEMORY_REGION -{ - void *pvBaseAddress; - uint32_t ulLengthInBytes; - uint32_t ulParameters; -} MemoryRegion_t; - -/* - * Parameters required to create an MPU protected task. - */ -typedef struct xTASK_PARAMETERS -{ - TaskFunction_t pvTaskCode; - const char * const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - configSTACK_DEPTH_TYPE usStackDepth; - void *pvParameters; - UBaseType_t uxPriority; - StackType_t *puxStackBuffer; - MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ]; - #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - StaticTask_t * const pxTaskBuffer; - #endif -} TaskParameters_t; - -/* Used with the uxTaskGetSystemState() function to return the state of each task -in the system. */ -typedef struct xTASK_STATUS -{ - TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */ - const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - UBaseType_t xTaskNumber; /* A number unique to the task. */ - eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */ - UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ - UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ - uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ - StackType_t *pxStackBase; /* Points to the lowest address of the task's stack area. */ - configSTACK_DEPTH_TYPE usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ -} TaskStatus_t; - -/* Possible return values for eTaskConfirmSleepModeStatus(). */ -typedef enum -{ - eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */ - eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */ - eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */ -} eSleepModeStatus; - -/** - * Defines the priority used by the idle task. This must not be modified. - * - * \ingroup TaskUtils - */ -#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U ) - -/** - * task. h - * - * Macro for forcing a context switch. - * - * \defgroup taskYIELD taskYIELD - * \ingroup SchedulerControl - */ -#define taskYIELD() portYIELD() - -/** - * task. h - * - * Macro to mark the start of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * - * NOTE: This may alter the stack (depending on the portable implementation) - * so must be used with care! - * - * \defgroup taskENTER_CRITICAL taskENTER_CRITICAL - * \ingroup SchedulerControl - */ -#define taskENTER_CRITICAL() portENTER_CRITICAL() -#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() - -/** - * task. h - * - * Macro to mark the end of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * - * NOTE: This may alter the stack (depending on the portable implementation) - * so must be used with care! - * - * \defgroup taskEXIT_CRITICAL taskEXIT_CRITICAL - * \ingroup SchedulerControl - */ -#define taskEXIT_CRITICAL() portEXIT_CRITICAL() -#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x ) -/** - * task. h - * - * Macro to disable all maskable interrupts. - * - * \defgroup taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS - * \ingroup SchedulerControl - */ -#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS() - -/** - * task. h - * - * Macro to enable microcontroller interrupts. - * - * \defgroup taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS - * \ingroup SchedulerControl - */ -#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS() - -/* Definitions returned by xTaskGetSchedulerState(). taskSCHEDULER_SUSPENDED is -0 to generate more optimal code when configASSERT() is defined as the constant -is used in assert() statements. */ -#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 ) -#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 ) -#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 ) - - -/*----------------------------------------------------------- - * TASK CREATION API - *----------------------------------------------------------*/ - -/** - * task. h - *
- BaseType_t xTaskCreate(
-							  TaskFunction_t pvTaskCode,
-							  const char * const pcName,
-							  configSTACK_DEPTH_TYPE usStackDepth,
-							  void *pvParameters,
-							  UBaseType_t uxPriority,
-							  TaskHandle_t *pvCreatedTask
-						  );
- * - * Create a new task and add it to the list of tasks that are ready to run. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreate() then both blocks of memory are automatically dynamically - * allocated inside the xTaskCreate() function. (see - * http://www.freertos.org/a00111.html). If a task is created using - * xTaskCreateStatic() then the application writer must provide the required - * memory. xTaskCreateStatic() therefore allows a task to be created without - * using any dynamic memory allocation. - * - * See xTaskCreateStatic() for a version that does not use any dynamic memory - * allocation. - * - * xTaskCreate() can only be used to create a task that has unrestricted - * access to the entire microcontroller memory map. Systems that include MPU - * support can alternatively create an MPU constrained task using - * xTaskCreateRestricted(). - * - * @param pvTaskCode Pointer to the task entry function. Tasks - * must be implemented to never return (i.e. continuous loop). - * - * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. Max length defined by configMAX_TASK_NAME_LEN - default - * is 16. - * - * @param usStackDepth The size of the task stack specified as the number of - * variables the stack can hold - not the number of bytes. For example, if - * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes - * will be allocated for stack storage. - * - * @param pvParameters Pointer that will be used as the parameter for the task - * being created. - * - * @param uxPriority The priority at which the task should run. Systems that - * include MPU support can optionally create tasks in a privileged (system) - * mode by setting bit portPRIVILEGE_BIT of the priority parameter. For - * example, to create a privileged task at priority 2 the uxPriority parameter - * should be set to ( 2 | portPRIVILEGE_BIT ). - * - * @param pvCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h - * - * Example usage: -
- // Task to be created.
- void vTaskCode( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-	 }
- }
-
- // Function that creates a task.
- void vOtherFunction( void )
- {
- static uint8_t ucParameterToPass;
- TaskHandle_t xHandle = NULL;
-
-	 // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass
-	 // must exist for the lifetime of the task, so in this case is declared static.  If it was just an
-	 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
-	 // the new task attempts to access it.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
-     configASSERT( xHandle );
-
-	 // Use the handle to delete the task.
-     if( xHandle != NULL )
-     {
-	     vTaskDelete( xHandle );
-     }
- }
-   
- * \defgroup xTaskCreate xTaskCreate - * \ingroup Tasks - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const configSTACK_DEPTH_TYPE usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif - -/** - * task. h - *
- TaskHandle_t xTaskCreateStatic( TaskFunction_t pvTaskCode,
-								 const char * const pcName,
-								 uint32_t ulStackDepth,
-								 void *pvParameters,
-								 UBaseType_t uxPriority,
-								 StackType_t *pxStackBuffer,
-								 StaticTask_t *pxTaskBuffer );
- * - * Create a new task and add it to the list of tasks that are ready to run. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreate() then both blocks of memory are automatically dynamically - * allocated inside the xTaskCreate() function. (see - * http://www.freertos.org/a00111.html). If a task is created using - * xTaskCreateStatic() then the application writer must provide the required - * memory. xTaskCreateStatic() therefore allows a task to be created without - * using any dynamic memory allocation. - * - * @param pvTaskCode Pointer to the task entry function. Tasks - * must be implemented to never return (i.e. continuous loop). - * - * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. The maximum length of the string is defined by - * configMAX_TASK_NAME_LEN in FreeRTOSConfig.h. - * - * @param ulStackDepth The size of the task stack specified as the number of - * variables the stack can hold - not the number of bytes. For example, if - * the stack is 32-bits wide and ulStackDepth is defined as 100 then 400 bytes - * will be allocated for stack storage. - * - * @param pvParameters Pointer that will be used as the parameter for the task - * being created. - * - * @param uxPriority The priority at which the task will run. - * - * @param pxStackBuffer Must point to a StackType_t array that has at least - * ulStackDepth indexes - the array will then be used as the task's stack, - * removing the need for the stack to be allocated dynamically. - * - * @param pxTaskBuffer Must point to a variable of type StaticTask_t, which will - * then be used to hold the task's data structures, removing the need for the - * memory to be allocated dynamically. - * - * @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will - * be created and a handle to the created task is returned. If either - * pxStackBuffer or pxTaskBuffer are NULL then the task will not be created and - * NULL is returned. - * - * Example usage: -
-
-    // Dimensions the buffer that the task being created will use as its stack.
-    // NOTE:  This is the number of words the stack will hold, not the number of
-    // bytes.  For example, if each stack item is 32-bits, and this is set to 100,
-    // then 400 bytes (100 * 32-bits) will be allocated.
-    #define STACK_SIZE 200
-
-    // Structure that will hold the TCB of the task being created.
-    StaticTask_t xTaskBuffer;
-
-    // Buffer that the task being created will use as its stack.  Note this is
-    // an array of StackType_t variables.  The size of StackType_t is dependent on
-    // the RTOS port.
-    StackType_t xStack[ STACK_SIZE ];
-
-    // Function that implements the task being created.
-    void vTaskCode( void * pvParameters )
-    {
-        // The parameter value is expected to be 1 as 1 is passed in the
-        // pvParameters value in the call to xTaskCreateStatic().
-        configASSERT( ( uint32_t ) pvParameters == 1UL );
-
-        for( ;; )
-        {
-            // Task code goes here.
-        }
-    }
-
-    // Function that creates a task.
-    void vOtherFunction( void )
-    {
-        TaskHandle_t xHandle = NULL;
-
-        // Create the task without using any dynamic memory allocation.
-        xHandle = xTaskCreateStatic(
-                      vTaskCode,       // Function that implements the task.
-                      "NAME",          // Text name for the task.
-                      STACK_SIZE,      // Stack size in words, not bytes.
-                      ( void * ) 1,    // Parameter passed into the task.
-                      tskIDLE_PRIORITY,// Priority at which the task is created.
-                      xStack,          // Array to use as the task's stack.
-                      &xTaskBuffer );  // Variable to hold the task's data structure.
-
-        // puxStackBuffer and pxTaskBuffer were not NULL, so the task will have
-        // been created, and xHandle will be the task's handle.  Use the handle
-        // to suspend the task.
-        vTaskSuspend( xHandle );
-    }
-   
- * \defgroup xTaskCreateStatic xTaskCreateStatic - * \ingroup Tasks - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - StackType_t * const puxStackBuffer, - StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION; -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * task. h - *
- BaseType_t xTaskCreateRestricted( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );
- * - * Only available when configSUPPORT_DYNAMIC_ALLOCATION is set to 1. - * - * xTaskCreateRestricted() should only be used in systems that include an MPU - * implementation. - * - * Create a new task and add it to the list of tasks that are ready to run. - * The function parameters define the memory regions and associated access - * permissions allocated to the task. - * - * See xTaskCreateRestrictedStatic() for a version that does not use any - * dynamic memory allocation. - * - * @param pxTaskDefinition Pointer to a structure that contains a member - * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API - * documentation) plus an optional stack buffer and the memory region - * definitions. - * - * @param pxCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h - * - * Example usage: -
-// Create an TaskParameters_t structure that defines the task to be created.
-static const TaskParameters_t xCheckTaskParameters =
-{
-	vATask,		// pvTaskCode - the function that implements the task.
-	"ATask",	// pcName - just a text name for the task to assist debugging.
-	100,		// usStackDepth	- the stack size DEFINED IN WORDS.
-	NULL,		// pvParameters - passed into the task function as the function parameters.
-	( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
-	cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
-
-	// xRegions - Allocate up to three separate memory regions for access by
-	// the task, with appropriate access permissions.  Different processors have
-	// different memory alignment requirements - refer to the FreeRTOS documentation
-	// for full information.
-	{
-		// Base address					Length	Parameters
-        { cReadWriteArray,				32,		portMPU_REGION_READ_WRITE },
-        { cReadOnlyArray,				32,		portMPU_REGION_READ_ONLY },
-        { cPrivilegedOnlyAccessArray,	128,	portMPU_REGION_PRIVILEGED_READ_WRITE }
-	}
-};
-
-int main( void )
-{
-TaskHandle_t xHandle;
-
-	// Create a task from the const structure defined above.  The task handle
-	// is requested (the second parameter is not NULL) but in this case just for
-	// demonstration purposes as its not actually used.
-	xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
-
-	// Start the scheduler.
-	vTaskStartScheduler();
-
-	// Will only get here if there was insufficient memory to create the idle
-	// and/or timer task.
-	for( ;; );
-}
-   
- * \defgroup xTaskCreateRestricted xTaskCreateRestricted - * \ingroup Tasks - */ -#if( portUSING_MPU_WRAPPERS == 1 ) - BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif - -/** - * task. h - *
- BaseType_t xTaskCreateRestrictedStatic( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );
- * - * Only available when configSUPPORT_STATIC_ALLOCATION is set to 1. - * - * xTaskCreateRestrictedStatic() should only be used in systems that include an - * MPU implementation. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreateRestricted() then the stack is provided by the application writer, - * and the memory used to hold the task's data structure is automatically - * dynamically allocated inside the xTaskCreateRestricted() function. If a task - * is created using xTaskCreateRestrictedStatic() then the application writer - * must provide the memory used to hold the task's data structures too. - * xTaskCreateRestrictedStatic() therefore allows a memory protected task to be - * created without using any dynamic memory allocation. - * - * @param pxTaskDefinition Pointer to a structure that contains a member - * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API - * documentation) plus an optional stack buffer and the memory region - * definitions. If configSUPPORT_STATIC_ALLOCATION is set to 1 the structure - * contains an additional member, which is used to point to a variable of type - * StaticTask_t - which is then used to hold the task's data structure. - * - * @param pxCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h - * - * Example usage: -
-// Create an TaskParameters_t structure that defines the task to be created.
-// The StaticTask_t variable is only included in the structure when
-// configSUPPORT_STATIC_ALLOCATION is set to 1.  The PRIVILEGED_DATA macro can
-// be used to force the variable into the RTOS kernel's privileged data area.
-static PRIVILEGED_DATA StaticTask_t xTaskBuffer;
-static const TaskParameters_t xCheckTaskParameters =
-{
-	vATask,		// pvTaskCode - the function that implements the task.
-	"ATask",	// pcName - just a text name for the task to assist debugging.
-	100,		// usStackDepth	- the stack size DEFINED IN WORDS.
-	NULL,		// pvParameters - passed into the task function as the function parameters.
-	( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
-	cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
-
-	// xRegions - Allocate up to three separate memory regions for access by
-	// the task, with appropriate access permissions.  Different processors have
-	// different memory alignment requirements - refer to the FreeRTOS documentation
-	// for full information.
-	{
-		// Base address					Length	Parameters
-        { cReadWriteArray,				32,		portMPU_REGION_READ_WRITE },
-        { cReadOnlyArray,				32,		portMPU_REGION_READ_ONLY },
-        { cPrivilegedOnlyAccessArray,	128,	portMPU_REGION_PRIVILEGED_READ_WRITE }
-	}
-
-	&xTaskBuffer; // Holds the task's data structure.
-};
-
-int main( void )
-{
-TaskHandle_t xHandle;
-
-	// Create a task from the const structure defined above.  The task handle
-	// is requested (the second parameter is not NULL) but in this case just for
-	// demonstration purposes as its not actually used.
-	xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
-
-	// Start the scheduler.
-	vTaskStartScheduler();
-
-	// Will only get here if there was insufficient memory to create the idle
-	// and/or timer task.
-	for( ;; );
-}
-   
- * \defgroup xTaskCreateRestrictedStatic xTaskCreateRestrictedStatic - * \ingroup Tasks - */ -#if( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif - -/** - * task. h - *
- void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions );
- * - * Memory regions are assigned to a restricted task when the task is created by - * a call to xTaskCreateRestricted(). These regions can be redefined using - * vTaskAllocateMPURegions(). - * - * @param xTask The handle of the task being updated. - * - * @param xRegions A pointer to an MemoryRegion_t structure that contains the - * new memory region definitions. - * - * Example usage: -
-// Define an array of MemoryRegion_t structures that configures an MPU region
-// allowing read/write access for 1024 bytes starting at the beginning of the
-// ucOneKByte array.  The other two of the maximum 3 definable regions are
-// unused so set to zero.
-static const MemoryRegion_t xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
-{
-	// Base address		Length		Parameters
-	{ ucOneKByte,		1024,		portMPU_REGION_READ_WRITE },
-	{ 0,				0,			0 },
-	{ 0,				0,			0 }
-};
-
-void vATask( void *pvParameters )
-{
-	// This task was created such that it has access to certain regions of
-	// memory as defined by the MPU configuration.  At some point it is
-	// desired that these MPU regions are replaced with that defined in the
-	// xAltRegions const struct above.  Use a call to vTaskAllocateMPURegions()
-	// for this purpose.  NULL is used as the task handle to indicate that this
-	// function should modify the MPU regions of the calling task.
-	vTaskAllocateMPURegions( NULL, xAltRegions );
-
-	// Now the task can continue its function, but from this point on can only
-	// access its stack and the ucOneKByte array (unless any other statically
-	// defined or shared regions have been declared elsewhere).
-}
-   
- * \defgroup xTaskCreateRestricted xTaskCreateRestricted - * \ingroup Tasks - */ -// void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskDelete( TaskHandle_t xTask );
- * - * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Remove a task from the RTOS real time kernel's management. The task being - * deleted will be removed from all ready, blocked, suspended and event lists. - * - * NOTE: The idle task is responsible for freeing the kernel allocated - * memory from tasks that have been deleted. It is therefore important that - * the idle task is not starved of microcontroller processing time if your - * application makes any calls to vTaskDelete (). Memory allocated by the - * task code is not automatically freed, and should be freed before the task - * is deleted. - * - * See the demo application file death.c for sample code that utilises - * vTaskDelete (). - * - * @param xTask The handle of the task to be deleted. Passing NULL will - * cause the calling task to be deleted. - * - * Example usage: -
- void vOtherFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create the task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // Use the handle to delete the task.
-	 vTaskDelete( xHandle );
- }
-   
- * \defgroup vTaskDelete vTaskDelete - * \ingroup Tasks - */ -// void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/*----------------------------------------------------------- - * TASK CONTROL API - *----------------------------------------------------------*/ - -/** - * task. h - *
void vTaskDelay( const TickType_t xTicksToDelay );
- * - * Delay a task for a given number of ticks. The actual time that the - * task remains blocked depends on the tick rate. The constant - * portTICK_PERIOD_MS can be used to calculate real time from the tick - * rate - with the resolution of one tick period. - * - * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * - * vTaskDelay() specifies a time at which the task wishes to unblock relative to - * the time at which vTaskDelay() is called. For example, specifying a block - * period of 100 ticks will cause the task to unblock 100 ticks after - * vTaskDelay() is called. vTaskDelay() does not therefore provide a good method - * of controlling the frequency of a periodic task as the path taken through the - * code, as well as other task and interrupt activity, will effect the frequency - * at which vTaskDelay() gets called and therefore the time at which the task - * next executes. See vTaskDelayUntil() for an alternative API function designed - * to facilitate fixed frequency execution. It does this by specifying an - * absolute time (rather than a relative time) at which the calling task should - * unblock. - * - * @param xTicksToDelay The amount of time, in tick periods, that - * the calling task should block. - * - * Example usage: - - void vTaskFunction( void * pvParameters ) - { - // Block for 500ms. - const TickType_t xDelay = 500 / portTICK_PERIOD_MS; - - for( ;; ) - { - // Simply toggle the LED every 500ms, blocking between each toggle. - vToggleLED(); - vTaskDelay( xDelay ); - } - } - - * \defgroup vTaskDelay vTaskDelay - * \ingroup TaskCtrl - */ -void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );
- * - * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Delay a task until a specified time. This function can be used by periodic - * tasks to ensure a constant execution frequency. - * - * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will - * cause a task to block for the specified number of ticks from the time vTaskDelay () is - * called. It is therefore difficult to use vTaskDelay () by itself to generate a fixed - * execution frequency as the time between a task starting to execute and that task - * calling vTaskDelay () may not be fixed [the task may take a different path though the - * code between calls, or may get interrupted or preempted a different number of times - * each time it executes]. - * - * Whereas vTaskDelay () specifies a wake time relative to the time at which the function - * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to - * unblock. - * - * The constant portTICK_PERIOD_MS can be used to calculate real time from the tick - * rate - with the resolution of one tick period. - * - * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the - * task was last unblocked. The variable must be initialised with the current time - * prior to its first use (see the example below). Following this the variable is - * automatically updated within vTaskDelayUntil (). - * - * @param xTimeIncrement The cycle time period. The task will be unblocked at - * time *pxPreviousWakeTime + xTimeIncrement. Calling vTaskDelayUntil with the - * same xTimeIncrement parameter value will cause the task to execute with - * a fixed interface period. - * - * Example usage: -
- // Perform an action every 10 ticks.
- void vTaskFunction( void * pvParameters )
- {
- TickType_t xLastWakeTime;
- const TickType_t xFrequency = 10;
-
-	 // Initialise the xLastWakeTime variable with the current time.
-	 xLastWakeTime = xTaskGetTickCount ();
-	 for( ;; )
-	 {
-		 // Wait for the next cycle.
-		 vTaskDelayUntil( &xLastWakeTime, xFrequency );
-
-		 // Perform action here.
-	 }
- }
-   
- * \defgroup vTaskDelayUntil vTaskDelayUntil - * \ingroup TaskCtrl - */ -// void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
BaseType_t xTaskAbortDelay( TaskHandle_t xTask );
- * - * INCLUDE_xTaskAbortDelay must be defined as 1 in FreeRTOSConfig.h for this - * function to be available. - * - * A task will enter the Blocked state when it is waiting for an event. The - * event it is waiting for can be a temporal event (waiting for a time), such - * as when vTaskDelay() is called, or an event on an object, such as when - * xQueueReceive() or ulTaskNotifyTake() is called. If the handle of a task - * that is in the Blocked state is used in a call to xTaskAbortDelay() then the - * task will leave the Blocked state, and return from whichever function call - * placed the task into the Blocked state. - * - * @param xTask The handle of the task to remove from the Blocked state. - * - * @return If the task referenced by xTask was not in the Blocked state then - * pdFAIL is returned. Otherwise pdPASS is returned. - * - * \defgroup xTaskAbortDelay xTaskAbortDelay - * \ingroup TaskCtrl - */ -// BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );
- * - * INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Obtain the priority of any task. - * - * @param xTask Handle of the task to be queried. Passing a NULL - * handle results in the priority of the calling task being returned. - * - * @return The priority of xTask. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to obtain the priority of the created task.
-	 // It was created with tskIDLE_PRIORITY, but may have changed
-	 // it itself.
-	 if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )
-	 {
-		 // The task has changed it's priority.
-	 }
-
-	 // ...
-
-	 // Is our priority higher than the created task?
-	 if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )
-	 {
-		 // Our priority (obtained using NULL handle) is higher.
-	 }
- }
-   
- * \defgroup uxTaskPriorityGet uxTaskPriorityGet - * \ingroup TaskCtrl - */ -// UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask );
- * - * A version of uxTaskPriorityGet() that can be used from an ISR. - */ -// UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
eTaskState eTaskGetState( TaskHandle_t xTask );
- * - * INCLUDE_eTaskGetState must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Obtain the state of any task. States are encoded by the eTaskState - * enumerated type. - * - * @param xTask Handle of the task to be queried. - * - * @return The state of xTask at the time the function was called. Note the - * state of the task might change between the function being called, and the - * functions return value being tested by the calling task. - */ -// eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );
- * - * configUSE_TRACE_FACILITY must be defined as 1 for this function to be - * available. See the configuration section for more information. - * - * Populates a TaskStatus_t structure with information about a task. - * - * @param xTask Handle of the task being queried. If xTask is NULL then - * information will be returned about the calling task. - * - * @param pxTaskStatus A pointer to the TaskStatus_t structure that will be - * filled with information about the task referenced by the handle passed using - * the xTask parameter. - * - * @xGetFreeStackSpace The TaskStatus_t structure contains a member to report - * the stack high water mark of the task being queried. Calculating the stack - * high water mark takes a relatively long time, and can make the system - * temporarily unresponsive - so the xGetFreeStackSpace parameter is provided to - * allow the high water mark checking to be skipped. The high watermark value - * will only be written to the TaskStatus_t structure if xGetFreeStackSpace is - * not set to pdFALSE; - * - * @param eState The TaskStatus_t structure contains a member to report the - * state of the task being queried. Obtaining the task state is not as fast as - * a simple assignment - so the eState parameter is provided to allow the state - * information to be omitted from the TaskStatus_t structure. To obtain state - * information then set eState to eInvalid - otherwise the value passed in - * eState will be reported as the task state in the TaskStatus_t structure. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
- TaskStatus_t xTaskDetails;
-
-    // Obtain the handle of a task from its name.
-    xHandle = xTaskGetHandle( "Task_Name" );
-
-    // Check the handle is not NULL.
-    configASSERT( xHandle );
-
-    // Use the handle to obtain further information about the task.
-    vTaskGetInfo( xHandle,
-                  &xTaskDetails,
-                  pdTRUE, // Include the high water mark in xTaskDetails.
-                  eInvalid ); // Include the task state in xTaskDetails.
- }
-   
- * \defgroup vTaskGetInfo vTaskGetInfo - * \ingroup TaskCtrl - */ -// void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
- * - * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Set the priority of any task. - * - * A context switch will occur before the function returns if the priority - * being set is higher than the currently executing task. - * - * @param xTask Handle to the task for which the priority is being set. - * Passing a NULL handle results in the priority of the calling task being set. - * - * @param uxNewPriority The priority to which the task will be set. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to raise the priority of the created task.
-	 vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );
-
-	 // ...
-
-	 // Use a NULL handle to raise our priority to the same value.
-	 vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );
- }
-   
- * \defgroup vTaskPrioritySet vTaskPrioritySet - * \ingroup TaskCtrl - */ -// void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
- * - * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Suspend any task. When suspended a task will never get any microcontroller - * processing time, no matter what its priority. - * - * Calls to vTaskSuspend are not accumulative - - * i.e. calling vTaskSuspend () twice on the same task still only requires one - * call to vTaskResume () to ready the suspended task. - * - * @param xTaskToSuspend Handle to the task being suspended. Passing a NULL - * handle will cause the calling task to be suspended. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to suspend the created task.
-	 vTaskSuspend( xHandle );
-
-	 // ...
-
-	 // The created task will not run during this period, unless
-	 // another task calls vTaskResume( xHandle ).
-
-	 //...
-
-
-	 // Suspend ourselves.
-	 vTaskSuspend( NULL );
-
-	 // We cannot get here unless another task calls vTaskResume
-	 // with our handle as the parameter.
- }
-   
- * \defgroup vTaskSuspend vTaskSuspend - * \ingroup TaskCtrl - */ -// void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskResume( TaskHandle_t xTaskToResume );
- * - * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Resumes a suspended task. - * - * A task that has been suspended by one or more calls to vTaskSuspend () - * will be made available for running again by a single call to - * vTaskResume (). - * - * @param xTaskToResume Handle to the task being readied. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to suspend the created task.
-	 vTaskSuspend( xHandle );
-
-	 // ...
-
-	 // The created task will not run during this period, unless
-	 // another task calls vTaskResume( xHandle ).
-
-	 //...
-
-
-	 // Resume the suspended task ourselves.
-	 vTaskResume( xHandle );
-
-	 // The created task will once again get microcontroller processing
-	 // time in accordance with its priority within the system.
- }
-   
- * \defgroup vTaskResume vTaskResume - * \ingroup TaskCtrl - */ -// void vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void xTaskResumeFromISR( TaskHandle_t xTaskToResume );
- * - * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be - * available. See the configuration section for more information. - * - * An implementation of vTaskResume() that can be called from within an ISR. - * - * A task that has been suspended by one or more calls to vTaskSuspend () - * will be made available for running again by a single call to - * xTaskResumeFromISR (). - * - * xTaskResumeFromISR() should not be used to synchronise a task with an - * interrupt if there is a chance that the interrupt could arrive prior to the - * task being suspended - as this can lead to interrupts being missed. Use of a - * semaphore as a synchronisation mechanism would avoid this eventuality. - * - * @param xTaskToResume Handle to the task being readied. - * - * @return pdTRUE if resuming the task should result in a context switch, - * otherwise pdFALSE. This is used by the ISR to determine if a context switch - * may be required following the ISR. - * - * \defgroup vTaskResumeFromISR vTaskResumeFromISR - * \ingroup TaskCtrl - */ -// BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/*----------------------------------------------------------- - * SCHEDULER CONTROL - *----------------------------------------------------------*/ - -/** - * task. h - *
void vTaskStartScheduler( void );
- * - * Starts the real time kernel tick processing. After calling the kernel - * has control over which tasks are executed and when. - * - * See the demo application file main.c for an example of creating - * tasks and starting the kernel. - * - * Example usage: -
- void vAFunction( void )
- {
-	 // Create at least one task before starting the kernel.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
-
-	 // Start the real time kernel with preemption.
-	 vTaskStartScheduler ();
-
-	 // Will not get here unless a task calls vTaskEndScheduler ()
- }
-   
- * - * \defgroup vTaskStartScheduler vTaskStartScheduler - * \ingroup SchedulerControl - */ -void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskEndScheduler( void );
- * - * NOTE: At the time of writing only the x86 real mode port, which runs on a PC - * in place of DOS, implements this function. - * - * Stops the real time kernel tick. All created tasks will be automatically - * deleted and multitasking (either preemptive or cooperative) will - * stop. Execution then resumes from the point where vTaskStartScheduler () - * was called, as if vTaskStartScheduler () had just returned. - * - * See the demo application file main. c in the demo/PC directory for an - * example that uses vTaskEndScheduler (). - * - * vTaskEndScheduler () requires an exit function to be defined within the - * portable layer (see vPortEndScheduler () in port. c for the PC port). This - * performs hardware specific operations such as stopping the kernel tick. - * - * vTaskEndScheduler () will cause all of the resources allocated by the - * kernel to be freed - but will not free resources allocated by application - * tasks. - * - * Example usage: -
- void vTaskCode( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-
-		 // At some point we want to end the real time kernel processing
-		 // so call ...
-		 vTaskEndScheduler ();
-	 }
- }
-
- void vAFunction( void )
- {
-	 // Create at least one task before starting the kernel.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
-
-	 // Start the real time kernel with preemption.
-	 vTaskStartScheduler ();
-
-	 // Will only get here when the vTaskCode () task has called
-	 // vTaskEndScheduler ().  When we get here we are back to single task
-	 // execution.
- }
-   
- * - * \defgroup vTaskEndScheduler vTaskEndScheduler - * \ingroup SchedulerControl - */ -// void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskSuspendAll( void );
- * - * Suspends the scheduler without disabling interrupts. Context switches will - * not occur while the scheduler is suspended. - * - * After calling vTaskSuspendAll () the calling task will continue to execute - * without risk of being swapped out until a call to xTaskResumeAll () has been - * made. - * - * API functions that have the potential to cause a context switch (for example, - * vTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler - * is suspended. - * - * Example usage: -
- void vTask1( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-
-		 // ...
-
-		 // At some point the task wants to perform a long operation during
-		 // which it does not want to get swapped out.  It cannot use
-		 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
-		 // operation may cause interrupts to be missed - including the
-		 // ticks.
-
-		 // Prevent the real time kernel swapping out the task.
-		 vTaskSuspendAll ();
-
-		 // Perform the operation here.  There is no need to use critical
-		 // sections as we have all the microcontroller processing time.
-		 // During this time interrupts will still operate and the kernel
-		 // tick count will be maintained.
-
-		 // ...
-
-		 // The operation is complete.  Restart the kernel.
-		 xTaskResumeAll ();
-	 }
- }
-   
- * \defgroup vTaskSuspendAll vTaskSuspendAll - * \ingroup SchedulerControl - */ -void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskResumeAll( void );
- * - * Resumes scheduler activity after it was suspended by a call to - * vTaskSuspendAll(). - * - * xTaskResumeAll() only resumes the scheduler. It does not unsuspend tasks - * that were previously suspended by a call to vTaskSuspend(). - * - * @return If resuming the scheduler caused a context switch then pdTRUE is - * returned, otherwise pdFALSE is returned. - * - * Example usage: -
- void vTask1( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-
-		 // ...
-
-		 // At some point the task wants to perform a long operation during
-		 // which it does not want to get swapped out.  It cannot use
-		 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
-		 // operation may cause interrupts to be missed - including the
-		 // ticks.
-
-		 // Prevent the real time kernel swapping out the task.
-		 vTaskSuspendAll ();
-
-		 // Perform the operation here.  There is no need to use critical
-		 // sections as we have all the microcontroller processing time.
-		 // During this time interrupts will still operate and the real
-		 // time kernel tick count will be maintained.
-
-		 // ...
-
-		 // The operation is complete.  Restart the kernel.  We want to force
-		 // a context switch - but there is no point if resuming the scheduler
-		 // caused a context switch already.
-		 if( !xTaskResumeAll () )
-		 {
-			  taskYIELD ();
-		 }
-	 }
- }
-   
- * \defgroup xTaskResumeAll xTaskResumeAll - * \ingroup SchedulerControl - */ -BaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION; - -/*----------------------------------------------------------- - * TASK UTILITIES - *----------------------------------------------------------*/ - -/** - * task. h - *
TickType_t xTaskGetTickCount( void );
- * - * @return The count of ticks since vTaskStartScheduler was called. - * - * \defgroup xTaskGetTickCount xTaskGetTickCount - * \ingroup TaskUtils - */ -TickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
TickType_t xTaskGetTickCountFromISR( void );
- * - * @return The count of ticks since vTaskStartScheduler was called. - * - * This is a version of xTaskGetTickCount() that is safe to be called from an - * ISR - provided that TickType_t is the natural word size of the - * microcontroller being used or interrupt nesting is either not supported or - * not being used. - * - * \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR - * \ingroup TaskUtils - */ -TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
uint16_t uxTaskGetNumberOfTasks( void );
- * - * @return The number of tasks that the real time kernel is currently managing. - * This includes all ready, blocked and suspended tasks. A task that - * has been deleted but not yet freed by the idle task will also be - * included in the count. - * - * \defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks - * \ingroup TaskUtils - */ -// UBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
char *pcTaskGetName( TaskHandle_t xTaskToQuery );
- * - * @return The text (human readable) name of the task referenced by the handle - * xTaskToQuery. A task can query its own name by either passing in its own - * handle, or by setting xTaskToQuery to NULL. - * - * \defgroup pcTaskGetName pcTaskGetName - * \ingroup TaskUtils - */ -// char *pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );
- * - * NOTE: This function takes a relatively long time to complete and should be - * used sparingly. - * - * @return The handle of the task that has the human readable name pcNameToQuery. - * NULL is returned if no matching name is found. INCLUDE_xTaskGetHandle - * must be set to 1 in FreeRTOSConfig.h for pcTaskGetHandle() to be available. - * - * \defgroup pcTaskGetHandle pcTaskGetHandle - * \ingroup TaskUtils - */ -// TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -// WARNING: ^^^ this API is not available in this release - - -/** - * task.h - *
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
- * - * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for - * this function to be available. - * - * Returns the high water mark of the stack associated with xTask. That is, - * the minimum free stack space there has been (in words, so on a 32 bit machine - * a value of 1 means 4 bytes) since the task started. The smaller the returned - * number the closer the task has come to overflowing its stack. - * - * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the - * same except for their return type. Using configSTACK_DEPTH_TYPE allows the - * user to determine the return type. It gets around the problem of the value - * overflowing on 8-bit types without breaking backward compatibility for - * applications that expect an 8-bit return type. - * - * @param xTask Handle of the task associated with the stack to be checked. - * Set xTask to NULL to check the stack of the calling task. - * - * @return The smallest amount of free stack space there has been (in words, so - * actual spaces on the stack rather than bytes) since the task referenced by - * xTask was created. - */ -// UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task.h - *
configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask );
- * - * INCLUDE_uxTaskGetStackHighWaterMark2 must be set to 1 in FreeRTOSConfig.h for - * this function to be available. - * - * Returns the high water mark of the stack associated with xTask. That is, - * the minimum free stack space there has been (in words, so on a 32 bit machine - * a value of 1 means 4 bytes) since the task started. The smaller the returned - * number the closer the task has come to overflowing its stack. - * - * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the - * same except for their return type. Using configSTACK_DEPTH_TYPE allows the - * user to determine the return type. It gets around the problem of the value - * overflowing on 8-bit types without breaking backward compatibility for - * applications that expect an 8-bit return type. - * - * @param xTask Handle of the task associated with the stack to be checked. - * Set xTask to NULL to check the stack of the calling task. - * - * @return The smallest amount of free stack space there has been (in words, so - * actual spaces on the stack rather than bytes) since the task referenced by - * xTask was created. - */ -// configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* When using trace macros it is sometimes necessary to include task.h before -FreeRTOS.h. When this is done TaskHookFunction_t will not yet have been defined, -so the following two prototypes will cause a compilation error. This can be -fixed by simply guarding against the inclusion of these two prototypes unless -they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration -constant. */ -#ifdef configUSE_APPLICATION_TASK_TAG - #if configUSE_APPLICATION_TASK_TAG == 1 - /** - * task.h - *
void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );
- * - * Sets pxHookFunction to be the task hook function used by the task xTask. - * Passing xTask as NULL has the effect of setting the calling tasks hook - * function. - */ - void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION; - - /** - * task.h - *
void xTaskGetApplicationTaskTag( TaskHandle_t xTask );
- * - * Returns the pxHookFunction value assigned to the task xTask. Do not - * call from an interrupt service routine - call - * xTaskGetApplicationTaskTagFromISR() instead. - */ - TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - - /** - * task.h - *
void xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );
- * - * Returns the pxHookFunction value assigned to the task xTask. Can - * be called from an interrupt service routine. - */ - TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - #endif /* configUSE_APPLICATION_TASK_TAG ==1 */ -#endif /* ifdef configUSE_APPLICATION_TASK_TAG */ - -#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - - /* Each task contains an array of pointers that is dimensioned by the - configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h. The - kernel does not use the pointers itself, so the application writer can use - the pointers for any purpose they wish. The following two functions are - used to set and query a pointer respectively. */ - void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) PRIVILEGED_FUNCTION; - void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) PRIVILEGED_FUNCTION; - -#endif - -/** - * task.h - *
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
- * - * Calls the hook function associated with xTask. Passing xTask as NULL has - * the effect of calling the Running tasks (the calling task) hook function. - * - * pvParameter is passed to the hook function for the task to interpret as it - * wants. The return value is the value returned by the task hook function - * registered by the user. - */ -// BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * xTaskGetIdleTaskHandle() is only available if - * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h. - * - * Simply returns the handle of the idle task. It is not valid to call - * xTaskGetIdleTaskHandle() before the scheduler has been started. - */ -// TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for - * uxTaskGetSystemState() to be available. - * - * uxTaskGetSystemState() populates an TaskStatus_t structure for each task in - * the system. TaskStatus_t structures contain, among other things, members - * for the task handle, task name, task priority, task state, and total amount - * of run time consumed by the task. See the TaskStatus_t structure - * definition in this file for the full member list. - * - * NOTE: This function is intended for debugging use only as its use results in - * the scheduler remaining suspended for an extended period. - * - * @param pxTaskStatusArray A pointer to an array of TaskStatus_t structures. - * The array must contain at least one TaskStatus_t structure for each task - * that is under the control of the RTOS. The number of tasks under the control - * of the RTOS can be determined using the uxTaskGetNumberOfTasks() API function. - * - * @param uxArraySize The size of the array pointed to by the pxTaskStatusArray - * parameter. The size is specified as the number of indexes in the array, or - * the number of TaskStatus_t structures contained in the array, not by the - * number of bytes in the array. - * - * @param pulTotalRunTime If configGENERATE_RUN_TIME_STATS is set to 1 in - * FreeRTOSConfig.h then *pulTotalRunTime is set by uxTaskGetSystemState() to the - * total run time (as defined by the run time stats clock, see - * http://www.freertos.org/rtos-run-time-stats.html) since the target booted. - * pulTotalRunTime can be set to NULL to omit the total run time information. - * - * @return The number of TaskStatus_t structures that were populated by - * uxTaskGetSystemState(). This should equal the number returned by the - * uxTaskGetNumberOfTasks() API function, but will be zero if the value passed - * in the uxArraySize parameter was too small. - * - * Example usage: -
-    // This example demonstrates how a human readable table of run time stats
-	// information is generated from raw data provided by uxTaskGetSystemState().
-	// The human readable table is written to pcWriteBuffer
-	void vTaskGetRunTimeStats( char *pcWriteBuffer )
-	{
-	TaskStatus_t *pxTaskStatusArray;
-	volatile UBaseType_t uxArraySize, x;
-	uint32_t ulTotalRunTime, ulStatsAsPercentage;
-
-		// Make sure the write buffer does not contain a string.
-		*pcWriteBuffer = 0x00;
-
-		// Take a snapshot of the number of tasks in case it changes while this
-		// function is executing.
-		uxArraySize = uxTaskGetNumberOfTasks();
-
-		// Allocate a TaskStatus_t structure for each task.  An array could be
-		// allocated statically at compile time.
-		pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) );
-
-		if( pxTaskStatusArray != NULL )
-		{
-			// Generate raw status information about each task.
-			uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalRunTime );
-
-			// For percentage calculations.
-			ulTotalRunTime /= 100UL;
-
-			// Avoid divide by zero errors.
-			if( ulTotalRunTime > 0 )
-			{
-				// For each populated position in the pxTaskStatusArray array,
-				// format the raw data as human readable ASCII data
-				for( x = 0; x < uxArraySize; x++ )
-				{
-					// What percentage of the total run time has the task used?
-					// This will always be rounded down to the nearest integer.
-					// ulTotalRunTimeDiv100 has already been divided by 100.
-					ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalRunTime;
-
-					if( ulStatsAsPercentage > 0UL )
-					{
-						sprintf( pcWriteBuffer, "%s\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );
-					}
-					else
-					{
-						// If the percentage is zero here then the task has
-						// consumed less than 1% of the total run time.
-						sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );
-					}
-
-					pcWriteBuffer += strlen( ( char * ) pcWriteBuffer );
-				}
-			}
-
-			// The array is no longer needed, free the memory it consumes.
-			vPortFree( pxTaskStatusArray );
-		}
-	}
-	
- */ -// UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskList( char *pcWriteBuffer );
- * - * configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS must - * both be defined as 1 for this function to be available. See the - * configuration section of the FreeRTOS.org website for more information. - * - * NOTE 1: This function will disable interrupts for its duration. It is - * not intended for normal application runtime use but as a debug aid. - * - * Lists all the current tasks, along with their current state and stack - * usage high water mark. - * - * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or - * suspended ('S'). - * - * PLEASE NOTE: - * - * This function is provided for convenience only, and is used by many of the - * demo applications. Do not consider it to be part of the scheduler. - * - * vTaskList() calls uxTaskGetSystemState(), then formats part of the - * uxTaskGetSystemState() output into a human readable table that displays task - * names, states and stack usage. - * - * vTaskList() has a dependency on the sprintf() C library function that might - * bloat the code size, use a lot of stack, and provide different results on - * different platforms. An alternative, tiny, third party, and limited - * functionality implementation of sprintf() is provided in many of the - * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note - * printf-stdarg.c does not provide a full snprintf() implementation!). - * - * It is recommended that production systems call uxTaskGetSystemState() - * directly to get access to raw stats data, rather than indirectly through a - * call to vTaskList(). - * - * @param pcWriteBuffer A buffer into which the above mentioned details - * will be written, in ASCII form. This buffer is assumed to be large - * enough to contain the generated report. Approximately 40 bytes per - * task should be sufficient. - * - * \defgroup vTaskList vTaskList - * \ingroup TaskUtils - */ -// void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
void vTaskGetRunTimeStats( char *pcWriteBuffer );
- * - * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS - * must both be defined as 1 for this function to be available. The application - * must also then provide definitions for - * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() - * to configure a peripheral timer/counter and return the timers current count - * value respectively. The counter should be at least 10 times the frequency of - * the tick count. - * - * NOTE 1: This function will disable interrupts for its duration. It is - * not intended for normal application runtime use but as a debug aid. - * - * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total - * accumulated execution time being stored for each task. The resolution - * of the accumulated time value depends on the frequency of the timer - * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro. - * Calling vTaskGetRunTimeStats() writes the total execution time of each - * task into a buffer, both as an absolute count value and as a percentage - * of the total system execution time. - * - * NOTE 2: - * - * This function is provided for convenience only, and is used by many of the - * demo applications. Do not consider it to be part of the scheduler. - * - * vTaskGetRunTimeStats() calls uxTaskGetSystemState(), then formats part of the - * uxTaskGetSystemState() output into a human readable table that displays the - * amount of time each task has spent in the Running state in both absolute and - * percentage terms. - * - * vTaskGetRunTimeStats() has a dependency on the sprintf() C library function - * that might bloat the code size, use a lot of stack, and provide different - * results on different platforms. An alternative, tiny, third party, and - * limited functionality implementation of sprintf() is provided in many of the - * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note - * printf-stdarg.c does not provide a full snprintf() implementation!). - * - * It is recommended that production systems call uxTaskGetSystemState() directly - * to get access to raw stats data, rather than indirectly through a call to - * vTaskGetRunTimeStats(). - * - * @param pcWriteBuffer A buffer into which the execution times will be - * written, in ASCII form. This buffer is assumed to be large enough to - * contain the generated report. Approximately 40 bytes per task should - * be sufficient. - * - * \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats - * \ingroup TaskUtils - */ -// void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -// WARNING: ^^^ this API is not available in this release - - -/** -* task. h -*
TickType_t xTaskGetIdleRunTimeCounter( void );
-* -* configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS -* must both be defined as 1 for this function to be available. The application -* must also then provide definitions for -* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() -* to configure a peripheral timer/counter and return the timers current count -* value respectively. The counter should be at least 10 times the frequency of -* the tick count. -* -* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total -* accumulated execution time being stored for each task. The resolution -* of the accumulated time value depends on the frequency of the timer -* configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro. -* While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total -* execution time of each task into a buffer, xTaskGetIdleRunTimeCounter() -* returns the total execution time of just the idle task. -* -* @return The total run time of the idle task. This is the amount of time the -* idle task has actually been executing. The unit of time is dependent on the -* frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and -* portGET_RUN_TIME_COUNTER_VALUE() macros. -* -* \defgroup xTaskGetIdleRunTimeCounter xTaskGetIdleRunTimeCounter -* \ingroup TaskUtils -*/ -// TickType_t xTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @param ulValue Data that can be sent with the notification. How the data is - * used depends on the value of the eAction parameter. - * - * @param eAction Specifies how the notification updates the task's notification - * value, if at all. Valid values for eAction are as follows: - * - * eSetBits - - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. - * - * eIncrement - - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. - * - * eSetValueWithOverwrite - - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. - * - * eSetValueWithoutOverwrite - - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. - * - * eNoAction - - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. - * - * pulPreviousNotificationValue - - * Can be used to pass out the subject task's notification value before any - * bits are modified by the notify function. - * - * @return Dependent on the value of eAction. See the description of the - * eAction parameter. - * - * \defgroup xTaskNotify xTaskNotify - * \ingroup TaskNotifications - */ -// BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -#define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL ) -#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) ) - -/** - * task. h - *
BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * A version of xTaskNotify() that can be used from an interrupt service routine - * (ISR). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @param ulValue Data that can be sent with the notification. How the data is - * used depends on the value of the eAction parameter. - * - * @param eAction Specifies how the notification updates the task's notification - * value, if at all. Valid values for eAction are as follows: - * - * eSetBits - - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. - * - * eIncrement - - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. - * - * eSetValueWithOverwrite - - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. - * - * eSetValueWithoutOverwrite - - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. - * - * eNoAction - - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. - * - * @param pxHigherPriorityTaskWoken xTaskNotifyFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the - * task to which the notification was sent to leave the Blocked state, and the - * unblocked task has a priority higher than the currently running task. If - * xTaskNotifyFromISR() sets this value to pdTRUE then a context switch should - * be requested before the interrupt is exited. How a context switch is - * requested from an ISR is dependent on the port - see the documentation page - * for the port in use. - * - * @return Dependent on the value of eAction. See the description of the - * eAction parameter. - * - * \defgroup xTaskNotify xTaskNotify - * \ingroup TaskNotifications - */ -// BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) ) -#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) ) - -/** - * task. h - *
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value - * will be cleared in the calling task's notification value before the task - * checks to see if any notifications are pending, and optionally blocks if no - * notifications are pending. Setting ulBitsToClearOnEntry to ULONG_MAX (if - * limits.h is included) or 0xffffffffUL (if limits.h is not included) will have - * the effect of resetting the task's notification value to 0. Setting - * ulBitsToClearOnEntry to 0 will leave the task's notification value unchanged. - * - * @param ulBitsToClearOnExit If a notification is pending or received before - * the calling task exits the xTaskNotifyWait() function then the task's - * notification value (see the xTaskNotify() API function) is passed out using - * the pulNotificationValue parameter. Then any bits that are set in - * ulBitsToClearOnExit will be cleared in the task's notification value (note - * *pulNotificationValue is set before any bits are cleared). Setting - * ulBitsToClearOnExit to ULONG_MAX (if limits.h is included) or 0xffffffffUL - * (if limits.h is not included) will have the effect of resetting the task's - * notification value to 0 before the function exits. Setting - * ulBitsToClearOnExit to 0 will leave the task's notification value unchanged - * when the function exits (in which case the value passed out in - * pulNotificationValue will match the task's notification value). - * - * @param pulNotificationValue Used to pass the task's notification value out - * of the function. Note the value passed out will not be effected by the - * clearing of any bits caused by ulBitsToClearOnExit being non-zero. - * - * @param xTicksToWait The maximum amount of time that the task should wait in - * the Blocked state for a notification to be received, should a notification - * not already be pending when xTaskNotifyWait() was called. The task - * will not consume any processing time while it is in the Blocked state. This - * is specified in kernel ticks, the macro pdMS_TO_TICSK( value_in_ms ) can be - * used to convert a time specified in milliseconds to a time specified in - * ticks. - * - * @return If a notification was received (including notifications that were - * already pending when xTaskNotifyWait was called) then pdPASS is - * returned. Otherwise pdFAIL is returned. - * - * \defgroup xTaskNotifyWait xTaskNotifyWait - * \ingroup TaskNotifications - */ -// BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro - * to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * xTaskNotifyGive() is a helper macro intended for use when task notifications - * are used as light weight and faster binary or counting semaphore equivalents. - * Actual FreeRTOS semaphores are given using the xSemaphoreGive() API function, - * the equivalent action that instead uses a task notification is - * xTaskNotifyGive(). - * - * When task notifications are being used as a binary or counting semaphore - * equivalent then the task being notified should wait for the notification - * using the ulTaskNotificationTake() API function rather than the - * xTaskNotifyWait() API function. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @return xTaskNotifyGive() is a macro that calls xTaskNotify() with the - * eAction parameter set to eIncrement - so pdPASS is always returned. - * - * \defgroup xTaskNotifyGive xTaskNotifyGive - * \ingroup TaskNotifications - */ -#define xTaskNotifyGive( xTaskToNotify ) xTaskGenericNotify( ( xTaskToNotify ), ( 0 ), eIncrement, NULL ) - -/** - * task. h - *
void vTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken );
- *
- * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro
- * to be available.
- *
- * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
- * "notification value", which is a 32-bit unsigned integer (uint32_t).
- *
- * A version of xTaskNotifyGive() that can be called from an interrupt service
- * routine (ISR).
- *
- * Events can be sent to a task using an intermediary object.  Examples of such
- * objects are queues, semaphores, mutexes and event groups.  Task notifications
- * are a method of sending an event directly to a task without the need for such
- * an intermediary object.
- *
- * A notification sent to a task can optionally perform an action, such as
- * update, overwrite or increment the task's notification value.  In that way
- * task notifications can be used to send data to a task, or be used as light
- * weight and fast binary or counting semaphores.
- *
- * vTaskNotifyGiveFromISR() is intended for use when task notifications are
- * used as light weight and faster binary or counting semaphore equivalents.
- * Actual FreeRTOS semaphores are given from an ISR using the
- * xSemaphoreGiveFromISR() API function, the equivalent action that instead uses
- * a task notification is vTaskNotifyGiveFromISR().
- *
- * When task notifications are being used as a binary or counting semaphore
- * equivalent then the task being notified should wait for the notification
- * using the ulTaskNotificationTake() API function rather than the
- * xTaskNotifyWait() API function.
- *
- * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details.
- *
- * @param xTaskToNotify The handle of the task being notified.  The handle to a
- * task can be returned from the xTaskCreate() API function used to create the
- * task, and the handle of the currently running task can be obtained by calling
- * xTaskGetCurrentTaskHandle().
- *
- * @param pxHigherPriorityTaskWoken  vTaskNotifyGiveFromISR() will set
- * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the
- * task to which the notification was sent to leave the Blocked state, and the
- * unblocked task has a priority higher than the currently running task.  If
- * vTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch
- * should be requested before the interrupt is exited.  How a context switch is
- * requested from an ISR is dependent on the port - see the documentation page
- * for the port in use.
- *
- * \defgroup xTaskNotifyWait xTaskNotifyWait
- * \ingroup TaskNotifications
- */
-// void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
-// WARNING: ^^^ this API is not available in this release
-
-
-/**
- * task. h
- * 
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * ulTaskNotifyTake() is intended for use when a task notification is used as a - * faster and lighter weight binary or counting semaphore alternative. Actual - * FreeRTOS semaphores are taken using the xSemaphoreTake() API function, the - * equivalent action that instead uses a task notification is - * ulTaskNotifyTake(). - * - * When a task is using its notification value as a binary or counting semaphore - * other tasks should send notifications to it using the xTaskNotifyGive() - * macro, or xTaskNotify() function with the eAction parameter set to - * eIncrement. - * - * ulTaskNotifyTake() can either clear the task's notification value to - * zero on exit, in which case the notification value acts like a binary - * semaphore, or decrement the task's notification value on exit, in which case - * the notification value acts like a counting semaphore. - * - * A task can use ulTaskNotifyTake() to [optionally] block to wait for a - * the task's notification value to be non-zero. The task does not consume any - * CPU time while it is in the Blocked state. - * - * Where as xTaskNotifyWait() will return when a notification is pending, - * ulTaskNotifyTake() will return when the task's notification value is - * not zero. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's - * notification value is decremented when the function exits. In this way the - * notification value acts like a counting semaphore. If xClearCountOnExit is - * not pdFALSE then the task's notification value is cleared to zero when the - * function exits. In this way the notification value acts like a binary - * semaphore. - * - * @param xTicksToWait The maximum amount of time that the task should wait in - * the Blocked state for the task's notification value to be greater than zero, - * should the count not already be greater than zero when - * ulTaskNotifyTake() was called. The task will not consume any processing - * time while it is in the Blocked state. This is specified in kernel ticks, - * the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time - * specified in milliseconds to a time specified in ticks. - * - * @return The task's notification count before it is either cleared to zero or - * decremented (see the xClearCountOnExit parameter). - * - * \defgroup ulTaskNotifyTake ulTaskNotifyTake - * \ingroup TaskNotifications - */ -// uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * task. h - *
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );
- * - * If the notification state of the task referenced by the handle xTask is - * eNotified, then set the task's notification state to eNotWaitingNotification. - * The task's notification value is not altered. Set xTask to NULL to clear the - * notification state of the calling task. - * - * @return pdTRUE if the task's notification state was set to - * eNotWaitingNotification, otherwise pdFALSE. - * \defgroup xTaskNotifyStateClear xTaskNotifyStateClear - * \ingroup TaskNotifications - */ -// BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ); -// WARNING: ^^^ this API is not available in this release - - -/*----------------------------------------------------------- - * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES - *----------------------------------------------------------*/ - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY - * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS - * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * Called from the real time kernel tick (either preemptive or cooperative), - * this increments the tick count and checks if any tasks that are blocked - * for a finite period required removing from a blocked list and placing on - * a ready list. If a non-zero value is returned then a context switch is - * required because either: - * + A task was removed from a blocked list because its timeout had expired, - * or - * + Time slicing is in use and there is a task of equal priority to the - * currently running task. - */ -BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION; - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * Removes the calling task from the ready list and places it both - * on the list of tasks waiting for a particular event, and the - * list of delayed tasks. The task will be removed from both lists - * and replaced on the ready list should either the event occur (and - * there be no higher priority tasks waiting on the same event) or - * the delay period expires. - * - * The 'unordered' version replaces the event list item value with the - * xItemValue value, and inserts the list item at the end of the list. - * - * The 'ordered' version uses the existing event list item value (which is the - * owning tasks priority) to insert the list item into the event list is task - * priority order. - * - * @param pxEventList The list containing tasks that are blocked waiting - * for the event to occur. - * - * @param xItemValue The item value to use for the event list item when the - * event list is not ordered by task priority. - * - * @param xTicksToWait The maximum amount of time that the task should wait - * for the event to occur. This is specified in kernel ticks,the constant - * portTICK_PERIOD_MS can be used to convert kernel ticks into a real time - * period. - */ -void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * This function performs nearly the same function as vTaskPlaceOnEventList(). - * The difference being that this function does not permit tasks to block - * indefinitely, whereas vTaskPlaceOnEventList() does. - * - */ -void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * Removes a task from both the specified event list and the list of blocked - * tasks, and places it on a ready queue. - * - * xTaskRemoveFromEventList()/vTaskRemoveFromUnorderedEventList() will be called - * if either an event occurs to unblock a task, or the block timeout period - * expires. - * - * xTaskRemoveFromEventList() is used when the event list is in task priority - * order. It removes the list item from the head of the event list as that will - * have the highest priority owning task of all the tasks on the event list. - * vTaskRemoveFromUnorderedEventList() is used when the event list is not - * ordered and the event list items hold something other than the owning tasks - * priority. In this case the event list item value is updated to the value - * passed in the xItemValue parameter. - * - * @return pdTRUE if the task being removed has a higher priority than the task - * making the call, otherwise pdFALSE. - */ -BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) PRIVILEGED_FUNCTION; -// void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY - * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS - * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * Sets the pointer to the current TCB to the TCB of the highest priority task - * that is ready to run. - */ -portDONT_DISCARD void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION; - -/* - * THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE. THEY ARE USED BY - * THE EVENT BITS MODULE. - */ -// TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Return the handle of the calling task. - */ -// TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Capture the current time status for future reference. - */ -// void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Compare the time status now with that previously captured to see if the - * timeout has expired. - */ -BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) PRIVILEGED_FUNCTION; - -/* - * Shortcut used by the queue implementation to prevent unnecessary call to - * taskYIELD(); - */ -void vTaskMissedYield( void ) PRIVILEGED_FUNCTION; - -/* - * Returns the scheduler state as taskSCHEDULER_RUNNING, - * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED. - */ -BaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION; - -/* - * Raises the priority of the mutex holder to that of the calling task should - * the mutex holder have a priority less than the calling task. - */ -BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; - -/* - * Set the priority of a task back to its proper priority in the case that it - * inherited a higher priority while it was holding a semaphore. - */ -BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; - -/* - * If a higher priority task attempting to obtain a mutex caused a lower - * priority task to inherit the higher priority task's priority - but the higher - * priority task then timed out without obtaining the mutex, then the lower - * priority task will disinherit the priority again - but only down as far as - * the highest priority task that is still waiting for the mutex (if there were - * more than one task waiting for the mutex). - */ -void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask ) PRIVILEGED_FUNCTION; - -/* - * Get the uxTCBNumber assigned to the task referenced by the xTask parameter. - */ -// UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Set the uxTaskNumber of the task referenced by the xTask parameter to - * uxHandle. - */ -// void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/* - * Only available when configUSE_TICKLESS_IDLE is set to 1. - * If tickless mode is being used, or a low power mode is implemented, then - * the tick interrupt will not execute during idle periods. When this is the - * case, the tick count value maintained by the scheduler needs to be kept up - * to date with the actual execution time by being skipped forward by a time - * equal to the idle period. - */ -void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION; - -/* - * Only available when configUSE_TICKLESS_IDLE is set to 1. - * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port - * specific sleep function to determine if it is ok to proceed with the sleep, - * and if it is ok to proceed, if it is ok to sleep indefinitely. - * - * This function is necessary because portSUPPRESS_TICKS_AND_SLEEP() is only - * called with the scheduler suspended, not from within a critical section. It - * is therefore possible for an interrupt to request a context switch between - * portSUPPRESS_TICKS_AND_SLEEP() and the low power mode actually being - * entered. eTaskConfirmSleepModeStatus() should be called from a short - * critical section between the timer being stopped and the sleep mode being - * entered to ensure it is ok to proceed into the sleep mode. - */ -eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION; - -/* - * For internal use only. Increment the mutex held count when a mutex is - * taken and return the handle of the task that has taken the mutex. - */ -TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION; - -/* - * For internal use only. Same as vTaskSetTimeOutState(), but without a critial - * section. - */ -void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; - - -#ifdef __cplusplus -} -#endif -#endif /* INC_TASK_H */ - - - diff --git a/bundles/mesh/inc/os/timers.h b/bundles/mesh/inc/os/timers.h deleted file mode 100644 index 06886dca9..000000000 --- a/bundles/mesh/inc/os/timers.h +++ /dev/null @@ -1,1313 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef TIMERS_H -#define TIMERS_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h must appear in source files before include timers.h" -#endif - -/*lint -save -e537 This headers are only multiply included if the application code -happens to also be including task.h. */ -#include "task.h" -/*lint -restore */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * MACROS AND DEFINITIONS - *----------------------------------------------------------*/ - -/* IDs for commands that can be sent/received on the timer queue. These are to -be used solely through the macros that make up the public software timer API, -as defined below. The commands that are sent from interrupts must use the -highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task -or interrupt version of the queue send function should be used. */ -#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 ) -#define tmrCOMMAND_EXECUTE_CALLBACK ( ( BaseType_t ) -1 ) -#define tmrCOMMAND_START_DONT_TRACE ( ( BaseType_t ) 0 ) -#define tmrCOMMAND_START ( ( BaseType_t ) 1 ) -#define tmrCOMMAND_RESET ( ( BaseType_t ) 2 ) -#define tmrCOMMAND_STOP ( ( BaseType_t ) 3 ) -#define tmrCOMMAND_CHANGE_PERIOD ( ( BaseType_t ) 4 ) -#define tmrCOMMAND_DELETE ( ( BaseType_t ) 5 ) - -#define tmrFIRST_FROM_ISR_COMMAND ( ( BaseType_t ) 6 ) -#define tmrCOMMAND_START_FROM_ISR ( ( BaseType_t ) 6 ) -#define tmrCOMMAND_RESET_FROM_ISR ( ( BaseType_t ) 7 ) -#define tmrCOMMAND_STOP_FROM_ISR ( ( BaseType_t ) 8 ) -#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR ( ( BaseType_t ) 9 ) - - -/** - * Type by which software timers are referenced. For example, a call to - * xTimerCreate() returns an TimerHandle_t variable that can then be used to - * reference the subject timer in calls to other software timer API functions - * (for example, xTimerStart(), xTimerReset(), etc.). - */ -struct tmrTimerControl; /* The old naming convention is used to prevent breaking kernel aware debuggers. */ -typedef struct tmrTimerControl * TimerHandle_t; - -/* - * Defines the prototype to which timer callback functions must conform. - */ -typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer ); - -/* - * Defines the prototype to which functions used with the - * xTimerPendFunctionCallFromISR() function must conform. - */ -typedef void (*PendedFunction_t)( void *, uint32_t ); - -/** - * TimerHandle_t xTimerCreate( const char * const pcTimerName, - * TickType_t xTimerPeriodInTicks, - * UBaseType_t uxAutoReload, - * void * pvTimerID, - * TimerCallbackFunction_t pxCallbackFunction ); - * - * Creates a new software timer instance, and returns a handle by which the - * created software timer can be referenced. - * - * Internally, within the FreeRTOS implementation, software timers use a block - * of memory, in which the timer data structure is stored. If a software timer - * is created using xTimerCreate() then the required memory is automatically - * dynamically allocated inside the xTimerCreate() function. (see - * http://www.freertos.org/a00111.html). If a software timer is created using - * xTimerCreateStatic() then the application writer must provide the memory that - * will get used by the software timer. xTimerCreateStatic() therefore allows a - * software timer to be created without using any dynamic memory allocation. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a - * timer into the active state. - * - * @param pcTimerName A text name that is assigned to the timer. This is done - * purely to assist debugging. The kernel itself only ever references a timer - * by its handle, and never by its name. - * - * @param xTimerPeriodInTicks The timer period. The time is defined in tick - * periods so the constant portTICK_PERIOD_MS can be used to convert a time that - * has been specified in milliseconds. For example, if the timer must expire - * after 100 ticks, then xTimerPeriodInTicks should be set to 100. - * Alternatively, if the timer must expire after 500ms, then xPeriod can be set - * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or - * equal to 1000. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. - * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - * - * @param pvTimerID An identifier that is assigned to the timer being created. - * Typically this would be used in the timer callback function to identify which - * timer expired when the same callback function is assigned to more than one - * timer. - * - * @param pxCallbackFunction The function to call when the timer expires. - * Callback functions must have the prototype defined by TimerCallbackFunction_t, - * which is "void vCallbackFunction( TimerHandle_t xTimer );". - * - * @return If the timer is successfully created then a handle to the newly - * created timer is returned. If the timer cannot be created (because either - * there is insufficient FreeRTOS heap remaining to allocate the timer - * structures, or the timer period was set to 0) then NULL is returned. - * - * Example usage: - * @verbatim - * #define NUM_TIMERS 5 - * - * // An array to hold handles to the created timers. - * TimerHandle_t xTimers[ NUM_TIMERS ]; - * - * // An array to hold a count of the number of times each timer expires. - * int32_t lExpireCounters[ NUM_TIMERS ] = { 0 }; - * - * // Define a callback function that will be used by multiple timer instances. - * // The callback function does nothing but count the number of times the - * // associated timer expires, and stop the timer once the timer has expired - * // 10 times. - * void vTimerCallback( TimerHandle_t pxTimer ) - * { - * int32_t lArrayIndex; - * const int32_t xMaxExpiryCountBeforeStopping = 10; - * - * // Optionally do something if the pxTimer parameter is NULL. - * configASSERT( pxTimer ); - * - * // Which timer expired? - * lArrayIndex = ( int32_t ) pvTimerGetTimerID( pxTimer ); - * - * // Increment the number of times that pxTimer has expired. - * lExpireCounters[ lArrayIndex ] += 1; - * - * // If the timer has expired 10 times then stop it from running. - * if( lExpireCounters[ lArrayIndex ] == xMaxExpiryCountBeforeStopping ) - * { - * // Do not use a block time if calling a timer API function from a - * // timer callback function, as doing so could cause a deadlock! - * xTimerStop( pxTimer, 0 ); - * } - * } - * - * void main( void ) - * { - * int32_t x; - * - * // Create then start some timers. Starting the timers before the scheduler - * // has been started means the timers will start running immediately that - * // the scheduler starts. - * for( x = 0; x < NUM_TIMERS; x++ ) - * { - * xTimers[ x ] = xTimerCreate( "Timer", // Just a text name, not used by the kernel. - * ( 100 * x ), // The timer period in ticks. - * pdTRUE, // The timers will auto-reload themselves when they expire. - * ( void * ) x, // Assign each timer a unique id equal to its array index. - * vTimerCallback // Each timer calls the same callback when it expires. - * ); - * - * if( xTimers[ x ] == NULL ) - * { - * // The timer was not created. - * } - * else - * { - * // Start the timer. No block time is specified, and even if one was - * // it would be ignored because the scheduler has not yet been - * // started. - * if( xTimerStart( xTimers[ x ], 0 ) != pdPASS ) - * { - * // The timer could not be set into the Active state. - * } - * } - * } - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timers running as they have already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION; -#endif - -/** - * TimerHandle_t xTimerCreateStatic(const char * const pcTimerName, - * TickType_t xTimerPeriodInTicks, - * UBaseType_t uxAutoReload, - * void * pvTimerID, - * TimerCallbackFunction_t pxCallbackFunction, - * StaticTimer_t *pxTimerBuffer ); - * - * Creates a new software timer instance, and returns a handle by which the - * created software timer can be referenced. - * - * Internally, within the FreeRTOS implementation, software timers use a block - * of memory, in which the timer data structure is stored. If a software timer - * is created using xTimerCreate() then the required memory is automatically - * dynamically allocated inside the xTimerCreate() function. (see - * http://www.freertos.org/a00111.html). If a software timer is created using - * xTimerCreateStatic() then the application writer must provide the memory that - * will get used by the software timer. xTimerCreateStatic() therefore allows a - * software timer to be created without using any dynamic memory allocation. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a - * timer into the active state. - * - * @param pcTimerName A text name that is assigned to the timer. This is done - * purely to assist debugging. The kernel itself only ever references a timer - * by its handle, and never by its name. - * - * @param xTimerPeriodInTicks The timer period. The time is defined in tick - * periods so the constant portTICK_PERIOD_MS can be used to convert a time that - * has been specified in milliseconds. For example, if the timer must expire - * after 100 ticks, then xTimerPeriodInTicks should be set to 100. - * Alternatively, if the timer must expire after 500ms, then xPeriod can be set - * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or - * equal to 1000. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. - * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - * - * @param pvTimerID An identifier that is assigned to the timer being created. - * Typically this would be used in the timer callback function to identify which - * timer expired when the same callback function is assigned to more than one - * timer. - * - * @param pxCallbackFunction The function to call when the timer expires. - * Callback functions must have the prototype defined by TimerCallbackFunction_t, - * which is "void vCallbackFunction( TimerHandle_t xTimer );". - * - * @param pxTimerBuffer Must point to a variable of type StaticTimer_t, which - * will be then be used to hold the software timer's data structures, removing - * the need for the memory to be allocated dynamically. - * - * @return If the timer is created then a handle to the created timer is - * returned. If pxTimerBuffer was NULL then NULL is returned. - * - * Example usage: - * @verbatim - * - * // The buffer used to hold the software timer's data structure. - * static StaticTimer_t xTimerBuffer; - * - * // A variable that will be incremented by the software timer's callback - * // function. - * UBaseType_t uxVariableToIncrement = 0; - * - * // A software timer callback function that increments a variable passed to - * // it when the software timer was created. After the 5th increment the - * // callback function stops the software timer. - * static void prvTimerCallback( TimerHandle_t xExpiredTimer ) - * { - * UBaseType_t *puxVariableToIncrement; - * BaseType_t xReturned; - * - * // Obtain the address of the variable to increment from the timer ID. - * puxVariableToIncrement = ( UBaseType_t * ) pvTimerGetTimerID( xExpiredTimer ); - * - * // Increment the variable to show the timer callback has executed. - * ( *puxVariableToIncrement )++; - * - * // If this callback has executed the required number of times, stop the - * // timer. - * if( *puxVariableToIncrement == 5 ) - * { - * // This is called from a timer callback so must not block. - * xTimerStop( xExpiredTimer, staticDONT_BLOCK ); - * } - * } - * - * - * void main( void ) - * { - * // Create the software time. xTimerCreateStatic() has an extra parameter - * // than the normal xTimerCreate() API function. The parameter is a pointer - * // to the StaticTimer_t structure that will hold the software timer - * // structure. If the parameter is passed as NULL then the structure will be - * // allocated dynamically, just as if xTimerCreate() had been called. - * xTimer = xTimerCreateStatic( "T1", // Text name for the task. Helps debugging only. Not used by FreeRTOS. - * xTimerPeriod, // The period of the timer in ticks. - * pdTRUE, // This is an auto-reload timer. - * ( void * ) &uxVariableToIncrement, // A variable incremented by the software timer's callback function - * prvTimerCallback, // The function to execute when the timer expires. - * &xTimerBuffer ); // The buffer that will hold the software timer structure. - * - * // The scheduler has not started yet so a block time is not used. - * xReturned = xTimerStart( xTimer, 0 ); - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timers running as they have already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) -// TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -// const TickType_t xTimerPeriodInTicks, -// const UBaseType_t uxAutoReload, -// void * const pvTimerID, -// TimerCallbackFunction_t pxCallbackFunction, -// StaticTimer_t *pxTimerBuffer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * void *pvTimerGetTimerID( TimerHandle_t xTimer ); - * - * Returns the ID assigned to the timer. - * - * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer, and by calling the - * vTimerSetTimerID() API function. - * - * If the same callback function is assigned to multiple timers then the timer - * ID can be used as time specific (timer local) storage. - * - * @param xTimer The timer being queried. - * - * @return The ID assigned to the timer being queried. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - */ -void *pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** - * void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ); - * - * Sets the ID assigned to the timer. - * - * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer. - * - * If the same callback function is assigned to multiple timers then the timer - * ID can be used as time specific (timer local) storage. - * - * @param xTimer The timer being updated. - * - * @param pvNewID The ID to assign to the timer. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - */ -// void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ); - * - * Queries a timer to see if it is active or dormant. - * - * A timer will be dormant if: - * 1) It has been created but not started, or - * 2) It is an expired one-shot timer that has not been restarted. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a timer into the - * active state. - * - * @param xTimer The timer being queried. - * - * @return pdFALSE will be returned if the timer is dormant. A value other than - * pdFALSE will be returned if the timer is active. - * - * Example usage: - * @verbatim - * // This function assumes xTimer has already been created. - * void vAFunction( TimerHandle_t xTimer ) - * { - * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" - * { - * // xTimer is active, do something. - * } - * else - * { - * // xTimer is not active, do something else. - * } - * } - * @endverbatim - */ -// BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ); - * - * Simply returns the handle of the timer service/daemon task. It it not valid - * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started. - */ -// TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerStart() starts a timer that was previously created using the - * xTimerCreate() API function. If the timer had already been started and was - * already in the active state, then xTimerStart() has equivalent functionality - * to the xTimerReset() API function. - * - * Starting a timer ensures the timer is in the active state. If the timer - * is not stopped, deleted, or reset in the mean time, the callback function - * associated with the timer will get called 'n' ticks after xTimerStart() was - * called, where 'n' is the timers defined period. - * - * It is valid to call xTimerStart() before the scheduler has been started, but - * when this is done the timer will not actually start until the scheduler is - * started, and the timers expiry time will be relative to when the scheduler is - * started, not relative to when xTimerStart() was called. - * - * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStart() - * to be available. - * - * @param xTimer The handle of the timer being started/restarted. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the start command to be successfully - * sent to the timer command queue, should the queue already be full when - * xTimerStart() was called. xTicksToWait is ignored if xTimerStart() is called - * before the scheduler is started. - * - * @return pdFAIL will be returned if the start command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system, although the - * timers expiry time is relative to when xTimerStart() is actually called. The - * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - * - */ -#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerStop() stops a timer that was previously started using either of the - * The xTimerStart(), xTimerReset(), xTimerStartFromISR(), xTimerResetFromISR(), - * xTimerChangePeriod() or xTimerChangePeriodFromISR() API functions. - * - * Stopping a timer ensures the timer is not in the active state. - * - * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStop() - * to be available. - * - * @param xTimer The handle of the timer being stopped. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the stop command to be successfully - * sent to the timer command queue, should the queue already be full when - * xTimerStop() was called. xTicksToWait is ignored if xTimerStop() is called - * before the scheduler is started. - * - * @return pdFAIL will be returned if the stop command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - * - */ -#define xTimerStop( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerChangePeriod( TimerHandle_t xTimer, - * TickType_t xNewPeriod, - * TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerChangePeriod() changes the period of a timer that was previously - * created using the xTimerCreate() API function. - * - * xTimerChangePeriod() can be called to change the period of an active or - * dormant state timer. - * - * The configUSE_TIMERS configuration constant must be set to 1 for - * xTimerChangePeriod() to be available. - * - * @param xTimer The handle of the timer that is having its period changed. - * - * @param xNewPeriod The new period for xTimer. Timer periods are specified in - * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time - * that has been specified in milliseconds. For example, if the timer must - * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, - * if the timer must expire after 500ms, then xNewPeriod can be set to - * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than - * or equal to 1000. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the change period command to be - * successfully sent to the timer command queue, should the queue already be - * full when xTimerChangePeriod() was called. xTicksToWait is ignored if - * xTimerChangePeriod() is called before the scheduler is started. - * - * @return pdFAIL will be returned if the change period command could not be - * sent to the timer command queue even after xTicksToWait ticks had passed. - * pdPASS will be returned if the command was successfully sent to the timer - * command queue. When the command is actually processed will depend on the - * priority of the timer service/daemon task relative to other tasks in the - * system. The timer service/daemon task priority is set by the - * configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This function assumes xTimer has already been created. If the timer - * // referenced by xTimer is already active when it is called, then the timer - * // is deleted. If the timer referenced by xTimer is not active when it is - * // called, then the period of the timer is set to 500ms and the timer is - * // started. - * void vAFunction( TimerHandle_t xTimer ) - * { - * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" - * { - * // xTimer is already active - delete it. - * xTimerDelete( xTimer ); - * } - * else - * { - * // xTimer is not active, change its period to 500ms. This will also - * // cause the timer to start. Block for a maximum of 100 ticks if the - * // change period command cannot immediately be sent to the timer - * // command queue. - * if( xTimerChangePeriod( xTimer, 500 / portTICK_PERIOD_MS, 100 ) == pdPASS ) - * { - * // The command was successfully sent. - * } - * else - * { - * // The command could not be sent, even after waiting for 100 ticks - * // to pass. Take appropriate action here. - * } - * } - * } - * @endverbatim - */ - #define xTimerChangePeriod( xTimer, xNewPeriod, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerDelete() deletes a timer that was previously created using the - * xTimerCreate() API function. - * - * The configUSE_TIMERS configuration constant must be set to 1 for - * xTimerDelete() to be available. - * - * @param xTimer The handle of the timer being deleted. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the delete command to be - * successfully sent to the timer command queue, should the queue already be - * full when xTimerDelete() was called. xTicksToWait is ignored if xTimerDelete() - * is called before the scheduler is started. - * - * @return pdFAIL will be returned if the delete command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * - * See the xTimerChangePeriod() API function example usage scenario. - */ -#define xTimerDelete( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerReset() re-starts a timer that was previously created using the - * xTimerCreate() API function. If the timer had already been started and was - * already in the active state, then xTimerReset() will cause the timer to - * re-evaluate its expiry time so that it is relative to when xTimerReset() was - * called. If the timer was in the dormant state then xTimerReset() has - * equivalent functionality to the xTimerStart() API function. - * - * Resetting a timer ensures the timer is in the active state. If the timer - * is not stopped, deleted, or reset in the mean time, the callback function - * associated with the timer will get called 'n' ticks after xTimerReset() was - * called, where 'n' is the timers defined period. - * - * It is valid to call xTimerReset() before the scheduler has been started, but - * when this is done the timer will not actually start until the scheduler is - * started, and the timers expiry time will be relative to when the scheduler is - * started, not relative to when xTimerReset() was called. - * - * The configUSE_TIMERS configuration constant must be set to 1 for xTimerReset() - * to be available. - * - * @param xTimer The handle of the timer being reset/started/restarted. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the reset command to be successfully - * sent to the timer command queue, should the queue already be full when - * xTimerReset() was called. xTicksToWait is ignored if xTimerReset() is called - * before the scheduler is started. - * - * @return pdFAIL will be returned if the reset command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system, although the - * timers expiry time is relative to when xTimerStart() is actually called. The - * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * @verbatim - * // When a key is pressed, an LCD back-light is switched on. If 5 seconds pass - * // without a key being pressed, then the LCD back-light is switched off. In - * // this case, the timer is a one-shot timer. - * - * TimerHandle_t xBacklightTimer = NULL; - * - * // The callback function assigned to the one-shot timer. In this case the - * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) - * { - * // The timer expired, therefore 5 seconds must have passed since a key - * // was pressed. Switch off the LCD back-light. - * vSetBacklightState( BACKLIGHT_OFF ); - * } - * - * // The key press event handler. - * void vKeyPressEventHandler( char cKey ) - * { - * // Ensure the LCD back-light is on, then reset the timer that is - * // responsible for turning the back-light off after 5 seconds of - * // key inactivity. Wait 10 ticks for the command to be successfully sent - * // if it cannot be sent immediately. - * vSetBacklightState( BACKLIGHT_ON ); - * if( xTimerReset( xBacklightTimer, 100 ) != pdPASS ) - * { - * // The reset command was not executed successfully. Take appropriate - * // action here. - * } - * - * // Perform the rest of the key processing here. - * } - * - * void main( void ) - * { - * int32_t x; - * - * // Create then start the one-shot timer that is responsible for turning - * // the back-light off if no keys are pressed within a 5 second period. - * xBacklightTimer = xTimerCreate( "BacklightTimer", // Just a text name, not used by the kernel. - * ( 5000 / portTICK_PERIOD_MS), // The timer period in ticks. - * pdFALSE, // The timer is a one-shot timer. - * 0, // The id is not used by the callback so can take any value. - * vBacklightTimerCallback // The callback function that switches the LCD back-light off. - * ); - * - * if( xBacklightTimer == NULL ) - * { - * // The timer was not created. - * } - * else - * { - * // Start the timer. No block time is specified, and even if one was - * // it would be ignored because the scheduler has not yet been - * // started. - * if( xTimerStart( xBacklightTimer, 0 ) != pdPASS ) - * { - * // The timer could not be set into the Active state. - * } - * } - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timer running as it has already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#define xTimerReset( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerStartFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerStart() that can be called from an interrupt service - * routine. - * - * @param xTimer The handle of the timer being started/restarted. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerStartFromISR() writes a message to the timer - * command queue, so has the potential to transition the timer service/daemon - * task out of the Blocked state. If calling xTimerStartFromISR() causes the - * timer service/daemon task to leave the Blocked state, and the timer service/ - * daemon task has a priority equal to or greater than the currently executing - * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will - * get set to pdTRUE internally within the xTimerStartFromISR() function. If - * xTimerStartFromISR() sets this value to pdTRUE then a context switch should - * be performed before the interrupt exits. - * - * @return pdFAIL will be returned if the start command could not be sent to - * the timer command queue. pdPASS will be returned if the command was - * successfully sent to the timer command queue. When the command is actually - * processed will depend on the priority of the timer service/daemon task - * relative to other tasks in the system, although the timers expiry time is - * relative to when xTimerStartFromISR() is actually called. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xBacklightTimer has already been created. When a - * // key is pressed, an LCD back-light is switched on. If 5 seconds pass - * // without a key being pressed, then the LCD back-light is switched off. In - * // this case, the timer is a one-shot timer, and unlike the example given for - * // the xTimerReset() function, the key press event handler is an interrupt - * // service routine. - * - * // The callback function assigned to the one-shot timer. In this case the - * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) - * { - * // The timer expired, therefore 5 seconds must have passed since a key - * // was pressed. Switch off the LCD back-light. - * vSetBacklightState( BACKLIGHT_OFF ); - * } - * - * // The key press interrupt service routine. - * void vKeyPressEventInterruptHandler( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // Ensure the LCD back-light is on, then restart the timer that is - * // responsible for turning the back-light off after 5 seconds of - * // key inactivity. This is an interrupt service routine so can only - * // call FreeRTOS API functions that end in "FromISR". - * vSetBacklightState( BACKLIGHT_ON ); - * - * // xTimerStartFromISR() or xTimerResetFromISR() could be called here - * // as both cause the timer to re-calculate its expiry time. - * // xHigherPriorityTaskWoken was initialised to pdFALSE when it was - * // declared (in this function). - * if( xTimerStartFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The start command was not executed successfully. Take appropriate - * // action here. - * } - * - * // Perform the rest of the key processing here. - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) - -/** - * BaseType_t xTimerStopFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerStop() that can be called from an interrupt service - * routine. - * - * @param xTimer The handle of the timer being stopped. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerStopFromISR() writes a message to the timer - * command queue, so has the potential to transition the timer service/daemon - * task out of the Blocked state. If calling xTimerStopFromISR() causes the - * timer service/daemon task to leave the Blocked state, and the timer service/ - * daemon task has a priority equal to or greater than the currently executing - * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will - * get set to pdTRUE internally within the xTimerStopFromISR() function. If - * xTimerStopFromISR() sets this value to pdTRUE then a context switch should - * be performed before the interrupt exits. - * - * @return pdFAIL will be returned if the stop command could not be sent to - * the timer command queue. pdPASS will be returned if the command was - * successfully sent to the timer command queue. When the command is actually - * processed will depend on the priority of the timer service/daemon task - * relative to other tasks in the system. The timer service/daemon task - * priority is set by the configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xTimer has already been created and started. When - * // an interrupt occurs, the timer should be simply stopped. - * - * // The interrupt service routine that stops the timer. - * void vAnExampleInterruptServiceRoutine( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // The interrupt has occurred - simply stop the timer. - * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined - * // (within this function). As this is an interrupt service routine, only - * // FreeRTOS API functions that end in "FromISR" can be used. - * if( xTimerStopFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The stop command was not executed successfully. Take appropriate - * // action here. - * } - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP_FROM_ISR, 0, ( pxHigherPriorityTaskWoken ), 0U ) - -/** - * BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer, - * TickType_t xNewPeriod, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerChangePeriod() that can be called from an interrupt - * service routine. - * - * @param xTimer The handle of the timer that is having its period changed. - * - * @param xNewPeriod The new period for xTimer. Timer periods are specified in - * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time - * that has been specified in milliseconds. For example, if the timer must - * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, - * if the timer must expire after 500ms, then xNewPeriod can be set to - * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than - * or equal to 1000. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerChangePeriodFromISR() writes a message to the - * timer command queue, so has the potential to transition the timer service/ - * daemon task out of the Blocked state. If calling xTimerChangePeriodFromISR() - * causes the timer service/daemon task to leave the Blocked state, and the - * timer service/daemon task has a priority equal to or greater than the - * currently executing task (the task that was interrupted), then - * *pxHigherPriorityTaskWoken will get set to pdTRUE internally within the - * xTimerChangePeriodFromISR() function. If xTimerChangePeriodFromISR() sets - * this value to pdTRUE then a context switch should be performed before the - * interrupt exits. - * - * @return pdFAIL will be returned if the command to change the timers period - * could not be sent to the timer command queue. pdPASS will be returned if the - * command was successfully sent to the timer command queue. When the command - * is actually processed will depend on the priority of the timer service/daemon - * task relative to other tasks in the system. The timer service/daemon task - * priority is set by the configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xTimer has already been created and started. When - * // an interrupt occurs, the period of xTimer should be changed to 500ms. - * - * // The interrupt service routine that changes the period of xTimer. - * void vAnExampleInterruptServiceRoutine( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // The interrupt has occurred - change the period of xTimer to 500ms. - * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined - * // (within this function). As this is an interrupt service routine, only - * // FreeRTOS API functions that end in "FromISR" can be used. - * if( xTimerChangePeriodFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The command to change the timers period was not executed - * // successfully. Take appropriate action here. - * } - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U ) - -/** - * BaseType_t xTimerResetFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerReset() that can be called from an interrupt service - * routine. - * - * @param xTimer The handle of the timer that is to be started, reset, or - * restarted. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerResetFromISR() writes a message to the timer - * command queue, so has the potential to transition the timer service/daemon - * task out of the Blocked state. If calling xTimerResetFromISR() causes the - * timer service/daemon task to leave the Blocked state, and the timer service/ - * daemon task has a priority equal to or greater than the currently executing - * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will - * get set to pdTRUE internally within the xTimerResetFromISR() function. If - * xTimerResetFromISR() sets this value to pdTRUE then a context switch should - * be performed before the interrupt exits. - * - * @return pdFAIL will be returned if the reset command could not be sent to - * the timer command queue. pdPASS will be returned if the command was - * successfully sent to the timer command queue. When the command is actually - * processed will depend on the priority of the timer service/daemon task - * relative to other tasks in the system, although the timers expiry time is - * relative to when xTimerResetFromISR() is actually called. The timer service/daemon - * task priority is set by the configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xBacklightTimer has already been created. When a - * // key is pressed, an LCD back-light is switched on. If 5 seconds pass - * // without a key being pressed, then the LCD back-light is switched off. In - * // this case, the timer is a one-shot timer, and unlike the example given for - * // the xTimerReset() function, the key press event handler is an interrupt - * // service routine. - * - * // The callback function assigned to the one-shot timer. In this case the - * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) - * { - * // The timer expired, therefore 5 seconds must have passed since a key - * // was pressed. Switch off the LCD back-light. - * vSetBacklightState( BACKLIGHT_OFF ); - * } - * - * // The key press interrupt service routine. - * void vKeyPressEventInterruptHandler( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // Ensure the LCD back-light is on, then reset the timer that is - * // responsible for turning the back-light off after 5 seconds of - * // key inactivity. This is an interrupt service routine so can only - * // call FreeRTOS API functions that end in "FromISR". - * vSetBacklightState( BACKLIGHT_ON ); - * - * // xTimerStartFromISR() or xTimerResetFromISR() could be called here - * // as both cause the timer to re-calculate its expiry time. - * // xHigherPriorityTaskWoken was initialised to pdFALSE when it was - * // declared (in this function). - * if( xTimerResetFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The reset command was not executed successfully. Take appropriate - * // action here. - * } - * - * // Perform the rest of the key processing here. - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) - - -/** - * BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, - * void *pvParameter1, - * uint32_t ulParameter2, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * - * Used from application interrupt service routines to defer the execution of a - * function to the RTOS daemon task (the timer service task, hence this function - * is implemented in timers.c and is prefixed with 'Timer'). - * - * Ideally an interrupt service routine (ISR) is kept as short as possible, but - * sometimes an ISR either has a lot of processing to do, or needs to perform - * processing that is not deterministic. In these cases - * xTimerPendFunctionCallFromISR() can be used to defer processing of a function - * to the RTOS daemon task. - * - * A mechanism is provided that allows the interrupt to return directly to the - * task that will subsequently execute the pended callback function. This - * allows the callback function to execute contiguously in time with the - * interrupt - just as if the callback had executed in the interrupt itself. - * - * @param xFunctionToPend The function to execute from the timer service/ - * daemon task. The function must conform to the PendedFunction_t - * prototype. - * - * @param pvParameter1 The value of the callback function's first parameter. - * The parameter has a void * type to allow it to be used to pass any type. - * For example, unsigned longs can be cast to a void *, or the void * can be - * used to point to a structure. - * - * @param ulParameter2 The value of the callback function's second parameter. - * - * @param pxHigherPriorityTaskWoken As mentioned above, calling this function - * will result in a message being sent to the timer daemon task. If the - * priority of the timer daemon task (which is set using - * configTIMER_TASK_PRIORITY in FreeRTOSConfig.h) is higher than the priority of - * the currently running task (the task the interrupt interrupted) then - * *pxHigherPriorityTaskWoken will be set to pdTRUE within - * xTimerPendFunctionCallFromISR(), indicating that a context switch should be - * requested before the interrupt exits. For that reason - * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the - * example code below. - * - * @return pdPASS is returned if the message was successfully sent to the - * timer daemon task, otherwise pdFALSE is returned. - * - * Example usage: - * @verbatim - * - * // The callback function that will execute in the context of the daemon task. - * // Note callback functions must all use this same prototype. - * void vProcessInterface( void *pvParameter1, uint32_t ulParameter2 ) - * { - * BaseType_t xInterfaceToService; - * - * // The interface that requires servicing is passed in the second - * // parameter. The first parameter is not used in this case. - * xInterfaceToService = ( BaseType_t ) ulParameter2; - * - * // ...Perform the processing here... - * } - * - * // An ISR that receives data packets from multiple interfaces - * void vAnISR( void ) - * { - * BaseType_t xInterfaceToService, xHigherPriorityTaskWoken; - * - * // Query the hardware to determine which interface needs processing. - * xInterfaceToService = prvCheckInterfaces(); - * - * // The actual processing is to be deferred to a task. Request the - * // vProcessInterface() callback function is executed, passing in the - * // number of the interface that needs processing. The interface to - * // service is passed in the second parameter. The first parameter is - * // not used in this case. - * xHigherPriorityTaskWoken = pdFALSE; - * xTimerPendFunctionCallFromISR( vProcessInterface, NULL, ( uint32_t ) xInterfaceToService, &xHigherPriorityTaskWoken ); - * - * // If xHigherPriorityTaskWoken is now set to pdTRUE then a context - * // switch should be requested. The macro used is port specific and will - * // be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - refer to - * // the documentation page for the port being used. - * portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); - * - * } - * @endverbatim - */ -// BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - - /** - * BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, - * void *pvParameter1, - * uint32_t ulParameter2, - * TickType_t xTicksToWait ); - * - * - * Used to defer the execution of a function to the RTOS daemon task (the timer - * service task, hence this function is implemented in timers.c and is prefixed - * with 'Timer'). - * - * @param xFunctionToPend The function to execute from the timer service/ - * daemon task. The function must conform to the PendedFunction_t - * prototype. - * - * @param pvParameter1 The value of the callback function's first parameter. - * The parameter has a void * type to allow it to be used to pass any type. - * For example, unsigned longs can be cast to a void *, or the void * can be - * used to point to a structure. - * - * @param ulParameter2 The value of the callback function's second parameter. - * - * @param xTicksToWait Calling this function will result in a message being - * sent to the timer daemon task on a queue. xTicksToWait is the amount of - * time the calling task should remain in the Blocked state (so not using any - * processing time) for space to become available on the timer queue if the - * queue is found to be full. - * - * @return pdPASS is returned if the message was successfully sent to the - * timer daemon task, otherwise pdFALSE is returned. - * - */ -// BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * const char * const pcTimerGetName( TimerHandle_t xTimer ); - * - * Returns the name that was assigned to a timer when the timer was created. - * - * @param xTimer The handle of the timer being queried. - * - * @return The name assigned to the timer specified by the xTimer parameter. - */ -// const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -// WARNING: ^^^ this API is not available in this release - - -/** - * void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ); - * - * Updates a timer to be either an autoreload timer, in which case the timer - * automatically resets itself each time it expires, or a one shot timer, in - * which case the timer will only expire once unless it is manually restarted. - * - * @param xTimer The handle of the timer being updated. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the timer's period (see the - * xTimerPeriodInTicks parameter of the xTimerCreate() API function). If - * uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - */ -// void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** - * TickType_t xTimerGetPeriod( TimerHandle_t xTimer ); - * - * Returns the period of a timer. - * - * @param xTimer The handle of the timer being queried. - * - * @return The period of the timer in ticks. - */ -// TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - - -/** -* TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ); -* -* Returns the time in ticks at which the timer will expire. If this is less -* than the current tick count then the expiry time has overflowed from the -* current time. -* -* @param xTimer The handle of the timer being queried. -* -* @return If the timer is running then the time in ticks at which the timer -* will next expire is returned. If the timer is not running then the return -* value is undefined. -*/ -TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/* - * Functions beyond this part are not part of the public API and are intended - * for use by the kernel only. - */ -BaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; -BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -#if( configUSE_TRACE_FACILITY == 1 ) - void vTimerSetTimerNumber( TimerHandle_t xTimer, UBaseType_t uxTimerNumber ) PRIVILEGED_FUNCTION; - UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* TIMERS_H */ - - - diff --git a/bundles/mesh/inc/platform_api.h b/bundles/mesh/inc/platform_api.h deleted file mode 100644 index 3dc0b513f..000000000 --- a/bundles/mesh/inc/platform_api.h +++ /dev/null @@ -1,302 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef _STACK_API_H_ -#define _STACK_API_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct platform_ver_s -{ - unsigned short major; - char minor; - char patch; -} platform_ver_t; - -typedef struct hard_fault_info_s -{ - uint32_t r0; - uint32_t r1; - uint32_t r2; - uint32_t r3; - uint32_t r12; - uint32_t lr; - uint32_t pc; - uint32_t psr; -} hard_fault_info_t; - -typedef struct assertion_info_s -{ - const char *file_name; - int line_no; -} assertion_info_t; - -typedef enum -{ - // platform callback for putc (for logging) - // NOTE: param (void *data) is casted from char * - // example: uint32_t cb_putc(char *c, void *dummy) - PLATFORM_CB_EVT_PUTC, - - // when bluetooth protocol stack ask app to initialize - PLATFORM_CB_EVT_PROFILE_INIT, - - // periphrals need to be re-initialized after deep-sleep, user can handle this event - PLATFORM_CB_EVT_ON_DEEP_SLEEP_WAKEUP, - - // return 0 if deep sleep is not allowed now; else deep sleep is allowed - // e.g. when periphrals still have data to process (UART is tx buffer not empty) - PLATFORM_CB_EVT_QUERY_DEEP_SLEEP_ALLOWED, - - // when hard fault occurs - // NOTE: param (void *data) is casted from hard_fault_info_t * - // example: uint32_t cb_hard_fault(hard_fault_info_t *info, void *dummy) - // if this callback is not defined, CPU enters a dead loop - PLATFORM_CB_EVT_HARD_FAULT, - - // when software assertion fails - // NOTE: param (void *data) is casted from assertion_info_t * - // if this callback is not defined, CPU enters a dead loop - PLATFORM_CB_EVT_ASSERTION, - - // when LLE is initializing - PLATFORM_CB_LLE_INIT, - - // when allocation on heap fails (heap out of memory) - // if this callback is not defined, CPU enters a dead loop - PLATFORM_CB_HEAP_OOM, - - PLATFORM_CB_EVT_MAX -} platform_evt_callback_type_t; - -typedef enum -{ - PLATFORM_CB_IRQ_RTC, - PLATFORM_CB_IRQ_TIMER0, - PLATFORM_CB_IRQ_TIMER1, - PLATFORM_CB_IRQ_TIMER2, - PLATFORM_CB_IRQ_GPIO, - PLATFORM_CB_IRQ_SPI0, - PLATFORM_CB_IRQ_SPI1, - PLATFORM_CB_IRQ_UART0, - PLATFORM_CB_IRQ_UART1, - PLATFORM_CB_IRQ_I2C0, - PLATFORM_CB_IRQ_I2C1, - - PLATFORM_CB_IRQ_MAX -} platform_irq_callback_type_t; - -typedef uint32_t (*f_platform_evt_cb)(void *data, void *user_data); -typedef uint32_t (*f_platform_irq_cb)(void *user_data); - -/** - **************************************************************************************** - * @brief register callback function for platform events - * - * @param[in] type the event - * @param[in] f the callback function - * @param[in] user_data user data that will be passed into callback function `f` - **************************************************************************************** - */ -void platform_set_evt_callback(platform_evt_callback_type_t type, f_platform_evt_cb f, void *user_data); - -/** - **************************************************************************************** - * @brief register callback function for platform interrupt requests - * - * @param[in] type the irq - * @param[in] f the callback function - * @param[in] user_data user data that will be passed into callback function `f` - **************************************************************************************** - */ -void platform_set_irq_callback(platform_irq_callback_type_t type, f_platform_irq_cb f, void *user_data); - -/** - **************************************************************************************** - * @brief Get platform version number - * - * @return version number - **************************************************************************************** - */ -const platform_ver_t *platform_get_version(void); - -/** - **************************************************************************************** - * @brief raise an assertion. This function will raise the assertion event: - * `PLATFORM_CB_EVT_ASSERTION` - * - **************************************************************************************** - */ -void platform_raise_assertion(const char *file_name, int line_no); - -typedef struct -{ - uint32_t bytes_free; // total free bytes - uint32_t bytes_minimum_ever_free; // mininum of bytes_free from startup -} platform_heap_status_t; - -/** - **************************************************************************************** - * @brief Get heap status - * - * @param[out] status heap status - **************************************************************************************** - */ -void platform_get_heap_status(platform_heap_status_t *status); - -/** - **************************************************************************************** - * @brief Reset platform. - * - * Note: when calling this function, the code after it will not be executed. - **************************************************************************************** - */ -void platform_reset(void); - -/** - **************************************************************************************** - * @brief Switch to a secondary app. - * - * @param[in] app_addr app entry addr (i.e. ISR vector address) - **************************************************************************************** - */ -void platform_switch_app(const uint32_t app_addr); - -typedef enum -{ - PLATFORM_CFG_LOG_HCI, // default: disabled - PLATFORM_CFG_POWER_SAVING // default: disabled -} platform_cfg_item_t; - -#define PLATFORM_CFG_ENABLE 1 -#define PLATFORM_CFG_DISABLE 0 - -/** - **************************************************************************************** - * @brief platform configurations. - * - * @param[in] item Configuration item - * @param[in] flag PLATFORM_CFG_ENABLE for enable, PLATFORM_CFG_DISABLE for disable - **************************************************************************************** - */ -void platform_config(const platform_cfg_item_t item, const uint8_t flag); - -/** - **************************************************************************************** - * @brief Shutdown the whole system, and power on again after a duration - * specified by duration_ms. - * Optionally, a portion of SYS memory can be retentioned during shutdown. - * Note that: this function will NOT return except that shutdown procedure fails - * to initiate. - * - * @param[in] duration_ms Duration before power on again (in ms) - * @param[in] p_retention_data Pointer to the start of data to be retentioned - * @param[in] data_size Size of the data to be retentioned - **************************************************************************************** - */ -void platform_shutdown(const uint32_t duration_ms, const void *p_retention_data, const uint32_t data_size); - -/** - **************************************************************************************** - * @brief generate random bytes by using true hardware random-number generator - * - * @param[out] bytes random data output - * @param[in] len byte number of random data - **************************************************************************************** - */ -// void platform_hrng(uint8_t *bytes, const uint32_t len); -// WARNING: ^^^ this API is not available in this release - - -/** - **************************************************************************************** - * @brief the printf function - * - * @param[in] format format string - * @param[in] ... arguments - **************************************************************************************** - */ -void platform_printf(const char *format, ...); - -// NOTE: for debug only -void sysSetPublicDeviceAddr(const unsigned char *addr); - -#ifdef OPTIONAL_RF_CLK -// set rf source -// 0: use external crystal -// 1: use internal clock loopback -void platform_set_rf_clk_source(const uint8_t source); - -void platform_set_rf_init_data(const uint32_t *rf_init_data); - -void platform_set_rf_power_mapping(const int16_t *rf_power_mapping); -#endif - -typedef enum coded_scheme_e -{ - BLE_CODED_S8, - BLE_CODED_S2 -} coded_scheme_t; - -/** - **************************************************************************************** - * @brief set coded scheme of a advertising set - * Note: this function should be called before the advertising set is enabled. - * Default scheme for all advertising sets are S=8 - * - * @param[in] adv_hdl handle of the advertising set - * @param[in] scheme selected scheme - **************************************************************************************** - */ -// void ll_set_adv_coded_scheme(const uint8_t adv_hdl, const coded_scheme_t scheme); -// WARNING: ^^^ this API is not available in this release - - -/** - **************************************************************************************** - * @brief set coded scheme for initiating PDU - * Note: this function should be called before initiating is enabled. - * - * @param[in] scheme selected scheme (default S=8) - **************************************************************************************** - */ -// void ll_set_initiating_coded_scheme(const coded_scheme_t scheme); -// WARNING: ^^^ this API is not available in this release - - -/** - **************************************************************************************** - * @brief Give link layer (slave role) a hint on ce_len of a connection - * - * @param[in] conn_handle handle of an existing connection - * @param[in] min_ce_len information parameter about the minimum length of connection - * event needed for this LE connection. - * Range: 0x0000 – 0xFFFF - * Time = N * 0.625 ms. - * @param[in] max_ce_len information parameter about the maximum length of connection - * event needed for this LE connection. - **************************************************************************************** - */ -// void ll_hint_on_ce_len(const uint16_t conn_handle, const uint16_t min_ce_len, const uint16_t max_ce_len); -// WARNING: ^^^ this API is not available in this release - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bundles/mesh/inc/proxy.h b/bundles/mesh/inc/proxy.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/mesh/inc/sm.h b/bundles/mesh/inc/sm.h deleted file mode 100644 index 5415e9b28..000000000 --- a/bundles/mesh/inc/sm.h +++ /dev/null @@ -1,217 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- - -#ifndef __SM_H -#define __SM_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "compiler.h" -#include "bluetooth.h" -#include "bt_types.h" -#include "btstack_event.h" -#include "btstack_linked_list.h" - -/* API_START */ - -const static __INLINE uint8_t * sm_private_random_addr_update_get_address(const uint8_t *packet){ - return decode_event_offset(packet, uint8_t, 2); -} - -/** - * @brief persistent data for security & privacy - */ -typedef struct sm_persistent -{ - sm_key_t er; - sm_key_t ir; - bd_addr_t identity_addr; // A public device address or static random address used as identity address - // When privacy is not enabled, this should be the public device address or static random address. - // This should not be changed, once changed, paring is lost - bd_addr_type_t identity_addr_type; // Note: only PUBLIC & RANDOM are allowed -} sm_persistent_t; - -// Authorization state -typedef enum { - AUTHORIZATION_UNKNOWN, - AUTHORIZATION_PENDING, - AUTHORIZATION_DECLINED, - AUTHORIZATION_GRANTED -} authorization_state_t; - -/** - * @brief Security configurations - * - * @param[in] io_capability IO Capabilities - * @param[in] request_security Let Peripheral request an encrypted connection right after connecting - * Not used normally. Bonding is triggered by access to protected attributes in ATT Server - * @param[in] persistent persistent data for security & privacy - */ -void sm_config(const io_capability_t io_capability, - int request_security, - const sm_persistent_t *persistent); - -/** - * @brief add an sm event handler - * - * @param callback_handler the handler - */ -void sm_add_event_handler(btstack_packet_callback_registration_t * callback_handler); - -/** - * @brief Enable private random address generation - * When a new random address is generated, an SM_EVENT_PRIVATE_RANDOM_ADDR_UPDATE event is emitted - * - * @param random_address_type to use (incl. OFF) - */ -void sm_private_random_address_generation_set_mode(gap_random_address_type_t random_address_type); - - -/** - * @brief Get private random address generation mode - */ -gap_random_address_type_t sm_private_random_address_generation_get_mode(void); - -/** - * @brief Set private random address generation period - * @param period_ms generation period - */ -void sm_private_random_address_generation_set_update_period(int period_ms); - -/** - * @brief Get current private random address - * @return the address - */ -const uint8_t *sm_private_random_address_generation_get(void); - -/** - * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble - * @param get_oob_data_callback - */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); - -/** - * @brief Decline bonding triggered by event before - * @param addr_type and address - */ -void sm_bonding_decline(hci_con_handle_t con_handle); - -/** - * @brief Confirm Just Works bonding - * @param addr_type and address - */ -void sm_just_works_confirm(hci_con_handle_t con_handle); - -/** - * @brief Reports passkey input by user - * @param addr_type and address - * @param passkey in [0..999999] - */ -void sm_passkey_input(hci_con_handle_t con_handle, uint32_t passkey); - -/** - * @brief Limit the STK generation methods. Bonding is stopped if the resulting one isn't in the list - * @param OR combination of SM_STK_GENERATION_METHOD_ - */ -void sm_set_accepted_stk_generation_methods(uint8_t accepted_stk_generation_methods); - -/** - * @brief Set the accepted encryption key size range. Bonding is stopped if the result isn't within the range - * @param min_size (default 7) - * @param max_size (default 16) - */ -void sm_set_encryption_key_size_range(uint8_t min_size, uint8_t max_size); - -/** - * @brief Sets the requested authentication requirements, bonding yes/no, MITM yes/no - * @param OR combination of SM_AUTHREQ_ flags - */ -void sm_set_authentication_requirements(uint8_t auth_req); - -/** - * @brief Let Peripheral request an encrypted connection right after connecting - * @note Not used normally. Bonding is triggered by access to protected attributes in ATT Server - */ -// void sm_set_request_security(int enable); -// WARNING: ^^^ this API is not available in this release - - -/** - * @brief Trigger Security Request - * @note Not used normally. Bonding is triggered by access to protected attributes in ATT Server - */ -void sm_send_security_request(hci_con_handle_t con_handle); - -/** - * - * @brief Get encryption key size. - * @param addr_type and address - * @return 0 if not encrypted, 7-16 otherwise - */ -int sm_encryption_key_size(hci_con_handle_t con_handle); - -/** - * @brief Get authentication property. - * @param addr_type and address - * @return 1 if bonded with OOB/Passkey (AND MITM protection) - */ -int sm_authenticated(hci_con_handle_t con_handle); - -/** - * @brief Queries authorization state. - * @param addr_type and address - * @return authorization_state for the current session - */ -authorization_state_t sm_authorization_state(hci_con_handle_t con_handle); - -/** - * @brief Used by att_server.c to request user authorization. - * @param addr_type and address - */ -void sm_request_pairing(hci_con_handle_t con_handle); - -/** - * @brief Report user authorization decline. - * @param addr_type and address - */ -void sm_authorization_decline(hci_con_handle_t con_handle); - -/** - * @brief Report user authorization grant. - * @param addr_type and address - */ -void sm_authorization_grant(hci_con_handle_t con_handle); - -/* - * @brief Match address against bonded devices - * @return 0 if successfully added to lookup queue - * @note Triggers SM_IDENTITY_RESOLVING_* events - */ -int sm_address_resolution_lookup(uint8_t addr_type, bd_addr_t addr); - -/** - * @brief Identify device in LE Device DB. - * @param handle - * @return index from le_device_db or -1 if not found/identified - */ -int sm_le_device_key(hci_con_handle_t con_handle); - -#ifdef __cplusplus -} -#endif - -#endif // __SM_H diff --git a/bundles/mesh/inc/syscfg.h b/bundles/mesh/inc/syscfg.h deleted file mode 100644 index 24c7c4ed5..000000000 --- a/bundles/mesh/inc/syscfg.h +++ /dev/null @@ -1,378 +0,0 @@ -/** - * This file was generated by Apache Newt version: 1.4.0-dev - */ - -#ifndef H_MYNEWT_SYSCFG_ -#define H_MYNEWT_SYSCFG_ - -/** - * This macro exists to ensure code includes this header when needed. If code - * checks the existence of a setting directly via ifdef without including this - * header, the setting macro will silently evaluate to 0. In contrast, an - * attempt to use these macros without including this header will result in a - * compiler error. - */ - -#include "bluetooth.h" - - -//#define ASSERT_WARN(cond) do { \ -// assertDbgWarn(cond, #cond, __MODULE__, __LINE__); \ -// }while(0); - - - -//#define ASSERT_ERR(cond) do { \ -// assertDbgErr(cond, #cond, __MODULE__, __LINE__); \ -// if (!(cond)) { __disable_irq(); while(1); } \ -// }while(0); - -#define __ORDER_BIG_ENDIAN__ 0 -#define __ORDER_LITTLE_ENDIAN__ 1 - -#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ -#define MESH_PTS_TEST (1) -#define TMO_PLATFORM (MESH_PTS_TEST?0:1) -#define MESHCCM_HARDWARE_EN (0) -#define AES128_HARDWARE_EN (0) - -#ifndef INGCHIPS_PROXY_SERVER -#define INGCHIPS_PROXY_SERVER (1) -#endif - -#define MESH_BEACON_ROLE (1) -#define PROVER_ROLE_ENABLED (MESH_BEACON_ROLE?0:1) - -#define LEGACY_ADV_PDU (1) -//#define PTS_TEST -#if (INGCHIPS_MESH_ENABLED) -#undef CLIENT_ENABLED -#undef SERVER_ENABLED -#if (INGCHIPS_PROXY_SERVER) -#define SERVER_ENABLED -#else -#define CLIENT_ENABLED -#endif -#endif -#define NETWORK_TEST (0) - -#define MYNEWT_VAL(x) MYNEWT_VAL_ ## x -#define NIMBLE_BLE_SM (1) - -#ifndef MYNEWT_VAL_BLE_SM_SC -#define MYNEWT_VAL_BLE_SM_SC (1) -#endif - -/*** compiler/arm-none-eabi-m4 */ -#ifndef MYNEWT_VAL_HARDFLOAT -#define MYNEWT_VAL_HARDFLOAT (0) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_SHELL -#define MYNEWT_VAL_BLE_MESH_SHELL (0) -#endif -#ifndef MYNEWT_VAL_BLE_MESH_CFG_CLI -#define MYNEWT_VAL_BLE_MESH_CFG_CLI (0) -#endif -#ifndef MYNEWT_VAL_BLE_MESH_HEALTH_CLI -#define MYNEWT_VAL_BLE_MESH_HEALTH_CLI (0) -#endif -#ifndef MYNEWT_VAL_BLE_MESH_CFG_SRV -#define MYNEWT_VAL_BLE_MESH_CFG_SRV (1) -#endif -#ifndef MYNEWT_VAL_SHELL_CMD_ARGC_MAX -#define MYNEWT_VAL_SHELL_CMD_ARGC_MAX (5) -#endif -#ifndef MYNEWT_VAL_SHELL_CMD_ARGC_MAX -#define MYNEWT_VAL_SHELL_CMD_ARGC_MAX (5) -#endif - -#ifndef MYNEWT_VAL_MSYS_1_BLOCK_COUNT -#define MYNEWT_VAL_MSYS_1_BLOCK_COUNT (24) -#endif - -#ifndef MYNEWT_VAL_MSYS_1_BLOCK_SIZE -#define MYNEWT_VAL_MSYS_1_BLOCK_SIZE (200) -#endif - -#ifndef MYNEWT_VAL_MSYS_2_BLOCK_COUNT -#define MYNEWT_VAL_MSYS_2_BLOCK_COUNT (0) -#endif - -#ifndef MYNEWT_VAL_MSYS_2_BLOCK_SIZE -#define MYNEWT_VAL_MSYS_2_BLOCK_SIZE (0) -#endif -#ifndef MYNEWT_VAL_OS_MAIN_STACK_SIZE -#define MYNEWT_VAL_OS_MAIN_STACK_SIZE (1024) -#endif -#ifndef MYNEWT_VAL_OS_MAIN_TASK_PRIO -#define MYNEWT_VAL_OS_MAIN_TASK_PRIO (127) -#endif - -#ifndef MYNEWT_VAL_OS_MEMPOOL_CHECK -#define MYNEWT_VAL_OS_MEMPOOL_CHECK (0) -#endif - -#ifndef MYNEWT_VAL_OS_MEMPOOL_POISON -#define MYNEWT_VAL_OS_MEMPOOL_POISON (0) -#endif - -#ifndef MYNEWT_VAL_OS_SCHEDULING -#define MYNEWT_VAL_OS_SCHEDULING (1) -#endif - -#ifndef MYNEWT_VAL_OS_SYSVIEW -#define MYNEWT_VAL_OS_SYSVIEW (0) -#endif - -#ifndef MYNEWT_VAL_SANITY_INTERVAL -#define MYNEWT_VAL_SANITY_INTERVAL (15000) -#endif - -#ifndef MYNEWT_VAL_WATCHDOG_INTERVAL -#define MYNEWT_VAL_WATCHDOG_INTERVAL (30000) -#endif - -/*** libc/baselibc */ -#ifndef MYNEWT_VAL_BASELIBC_ASSERT_FILE_LINE -#define MYNEWT_VAL_BASELIBC_ASSERT_FILE_LINE (0) -#endif - -#ifndef MYNEWT_VAL_BASELIBC_PRESENT -#define MYNEWT_VAL_BASELIBC_PRESENT (1) -#endif - -/*** nimble */ -#ifndef MYNEWT_VAL_BLE_EXT_ADV -#define MYNEWT_VAL_BLE_EXT_ADV (1) -#endif - -#ifndef MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE -#define MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE (31) -#endif - -#ifndef MYNEWT_VAL_BLE_HS_DEBUG -#define MYNEWT_VAL_BLE_HS_DEBUG (0) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH -#define MYNEWT_VAL_BLE_MESH (0) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_MODEL_KEY_COUNT -#define MYNEWT_VAL_BLE_MESH_MODEL_KEY_COUNT (2) -#endif - -#ifndef MYNEWT_VAL_CONFIG_BT_MESH_MODEL_KEY_COUNT -#define MYNEWT_VAL_CONFIG_BT_MESH_MODEL_KEY_COUNT (2) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_MODEL_GROUP_COUNT -#define MYNEWT_VAL_BLE_MESH_MODEL_GROUP_COUNT (2) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_APP_KEY_COUNT -#define MYNEWT_VAL_BLE_MESH_APP_KEY_COUNT (4) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_SUBNET_COUNT -#define MYNEWT_VAL_BLE_MESH_SUBNET_COUNT (2) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_CRPL -#define MYNEWT_VAL_BLE_MESH_CRPL (2) -#endif - - -#ifndef MYNEWT_VAL_BLE_MESH_TX_SEG_MAX -#define MYNEWT_VAL_BLE_MESH_TX_SEG_MAX (6) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_TX_SEG_MSG_COUNT -#define MYNEWT_VAL_BLE_MESH_TX_SEG_MSG_COUNT (16) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_RX_SEG_MSG_COUNT -#define MYNEWT_VAL_BLE_MESH_RX_SEG_MSG_COUNT (4) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LABEL_COUNT -#define MYNEWT_VAL_BLE_MESH_LABEL_COUNT (3) -#endif - - -#ifndef MYNEWT_VAL_BLE_MESH_RELAY -#define MYNEWT_VAL_BLE_MESH_RELAY (1) -#endif - - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND -#define MYNEWT_VAL_BLE_MESH_FRIEND (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LOW_POWER -#define MYNEWT_VAL_BLE_MESH_LOW_POWER (0) -#endif - -#ifndef MYNEWT_VAL_CONFIG_BT_SETTINGS -#define MYNEWT_VAL_CONFIG_BT_SETTINGS (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_SEG_RX -#define MYNEWT_VAL_BLE_MESH_FRIEND_SEG_RX (8) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_SUB_LIST_SIZE -#define MYNEWT_VAL_BLE_MESH_FRIEND_SUB_LIST_SIZE (4) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_GROUPS -#define MYNEWT_VAL_BLE_MESH_LPN_GROUPS (2) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_LPN_COUNT -#define MYNEWT_VAL_BLE_MESH_FRIEND_LPN_COUNT (4) -#endif -#if (FLASH_ENABLE) -#ifndef MYNEWT_VAL_BLE_MESH_SETTINGS -#define MYNEWT_VAL_BLE_MESH_SETTINGS (1) -#endif -#else -#ifndef MYNEWT_VAL_BLE_MESH_SETTINGS -#define MYNEWT_VAL_BLE_MESH_SETTINGS (0) -#endif -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_TESTING -#define MYNEWT_VAL_BLE_MESH_TESTING (0) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_ADV_BUF_COUNT -#define MYNEWT_VAL_BLE_MESH_ADV_BUF_COUNT (18) -#endif - - -#ifndef MYNEWT_VAL_BLE_MESH_RX_SDU_MAX -#define MYNEWT_VAL_BLE_MESH_RX_SDU_MAX (150) -#endif - - -#ifndef MYNEWT_VAL_BLE_MESH_MSG_CACHE_SIZE -#define MYNEWT_VAL_BLE_MESH_MSG_CACHE_SIZE (4) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_IV_UPDATE_TEST -#define MYNEWT_VAL_BLE_MESH_IV_UPDATE_TEST (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_IVU_DIVIDER -#define MYNEWT_VAL_BLE_MESH_IVU_DIVIDER (2) //need to check the value -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_NODE_ID_TIMEOUT -#define MYNEWT_VAL_BLE_MESH_NODE_ID_TIMEOUT (30) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_DEVICE_NAME -#define MYNEWT_VAL_BLE_MESH_DEVICE_NAME "INGCHIPS-MESH-PROXY_SERVER" -#endif -#ifndef MYNEWT_VAL_BLE_MAX_CONNECTIONS -#define MYNEWT_VAL_BLE_MAX_CONNECTIONS (2) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_PROXY_FILTER_SIZE -#define MYNEWT_VAL_BLE_MESH_PROXY_FILTER_SIZE (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_PROV -#define MYNEWT_VAL_BLE_MESH_PROV (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND -#define MYNEWT_VAL_BLE_MESH_FRIEND (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_MODEL -#define MYNEWT_VAL_BLE_MESH_DEBUG_MODEL (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_QUEUE_SIZE -#define MYNEWT_VAL_BLE_MESH_FRIEND_QUEUE_SIZE (16) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_RECV_WIN -#define MYNEWT_VAL_BLE_MESH_FRIEND_RECV_WIN (3) -#endif - - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_RETRY_TIMEOUT -#define MYNEWT_VAL_BLE_MESH_LPN_RETRY_TIMEOUT (20000) //todo :check the resonable value -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_ESTABLISHMENT -#define MYNEWT_VAL_BLE_MESH_LPN_ESTABLISHMENT (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_MIN_QUEUE_SIZE -#define MYNEWT_VAL_BLE_MESH_LPN_MIN_QUEUE_SIZE (2) //todo:check the resonable value -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_RSSI_FACTOR -#define MYNEWT_VAL_BLE_MESH_LPN_RSSI_FACTOR (0) //todo:check the resonable value -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_RECV_WIN_FACTOR -#define MYNEWT_VAL_BLE_MESH_LPN_RECV_WIN_FACTOR (0) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_RECV_DELAY -#define MYNEWT_VAL_BLE_MESH_LPN_RECV_DELAY (20) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_POLL_TIMEOUT -#define MYNEWT_VAL_BLE_MESH_LPN_POLL_TIMEOUT (100) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_SCAN_LATENCY -#define MYNEWT_VAL_BLE_MESH_LPN_SCAN_LATENCY (10) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_AUTO -#define MYNEWT_VAL_BLE_MESH_LPN_AUTO (0) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_LPN_INIT_POLL_TIMEOUT -#define MYNEWT_VAL_BLE_MESH_LPN_INIT_POLL_TIMEOUT (100) -#endif - -#ifndef MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES -#define MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES (2) -#endif - -#ifndef MYNEWT_VAL_TRNG -#define MYNEWT_VAL_TRNG (0) -#endif -#ifndef MYNEWT_VAL_BLE_MESH_SHELL_MODELS -#define MYNEWT_VAL_BLE_MESH_SHELL_MODELS (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_SEQ_STORE_RATE -#define MYNEWT_VAL_BLE_MESH_SEQ_STORE_RATE (1) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_RPL_STORE_TIMEOUT -#define MYNEWT_VAL_BLE_MESH_RPL_STORE_TIMEOUT (2000) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_STORE_TIMEOUT -#define MYNEWT_VAL_BLE_MESH_STORE_TIMEOUT (2000) -#endif - -#ifndef MYNEWT_VAL_BLE_MESH_DEV_UUID -#define MYNEWT_VAL_BLE_MESH_DEV_UUID ((uint8_t[16]){0xA8, 0x01, 0x61,0x00,0x04,0x20,0x30,0x75,0x9a,0x00,0x07,0xda,0x78,0x00,0x00,0x00}) -#endif - -#ifndef MYNEWT_VAL_MESH_ELEMENT_COUNT -#define MYNEWT_VAL_MESH_ELEMENT_COUNT (4) -#endif -#endif diff --git a/bundles/mesh/inc/utils.h b/bundles/mesh/inc/utils.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/mesh/meta.json b/bundles/mesh/meta.json deleted file mode 100644 index 3ef86ffd5..000000000 --- a/bundles/mesh/meta.json +++ /dev/null @@ -1,359 +0,0 @@ -{ - "api": [ - "att_server_init", - "att_server_register_packet_handler", - "att_server_can_send_packet_now", - "att_server_request_can_send_now_event", - "att_server_notify", - "att_server_indicate", - "att_server_get_mtu", - "att_emit_general_event", - "att_set_db", - "att_set_read_callback", - "att_set_write_callback", - "att_dispatch_register_client", - "att_dispatch_register_server", - "att_dispatch_client_can_send_now", - "att_dispatch_server_can_send_now", - "att_dispatch_client_request_can_send_now_event", - "att_dispatch_server_request_can_send_now_event", - "gatt_client_discover_primary_services", - "gatt_client_discover_primary_services_by_uuid16", - "gatt_client_discover_primary_services_by_uuid128", - "gatt_client_discover_characteristics_for_service", - "gatt_client_find_included_services_for_service", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128", - "gatt_client_discover_characteristics_for_service_by_uuid16", - "gatt_client_discover_characteristics_for_service_by_uuid128", - "gatt_client_discover_characteristic_descriptors", - "gatt_client_read_value_of_characteristic", - "gatt_client_read_value_of_characteristic_using_value_handle", - "gatt_client_read_value_of_characteristics_by_uuid16", - "gatt_client_read_value_of_characteristics_by_uuid128", - "gatt_client_read_long_value_of_characteristic", - "gatt_client_read_long_value_of_characteristic_using_value_handle", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset", - "gatt_client_read_multiple_characteristic_values", - "gatt_client_write_value_of_characteristic_without_response", - "gatt_client_signed_write_without_response", - "gatt_client_write_value_of_characteristic", - "gatt_client_write_long_value_of_characteristic", - "gatt_client_write_long_value_of_characteristic_with_offset", - "gatt_client_reliable_write_long_value_of_characteristic", - "gatt_client_read_characteristic_descriptor", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle", - "gatt_client_read_long_characteristic_descriptor", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset", - "gatt_client_write_characteristic_descriptor", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle", - "gatt_client_write_long_characteristic_descriptor", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset", - "gatt_client_write_client_characteristic_configuration", - "gatt_client_prepare_write", - "gatt_client_execute_write", - "gatt_client_cancel_write", - "gatt_client_deserialize_service", - "gatt_client_deserialize_characteristic", - "gatt_client_deserialize_characteristic_descriptor", - "ble_gatts_find_svc", - "ble_gatts_find_chr", - "gatt_client_get_mtu", - "gatt_client_is_ready", - "gatt_client_listen_for_characteristic_value_updates", - "gatt_client_register_handler", - "gatt_client_pts_suppress_mtu_exchange", - "gap_set_random_device_address", - "gap_disconnect", - "gap_add_whitelist", - "gap_remove_whitelist", - "gap_read_phy", - "gap_set_def_phy", - "gap_set_phy", - "gap_set_adv_set_random_addr", - "gap_set_ext_scan_para", - "gap_set_ext_scan_response_data", - "gap_set_ext_scan_enable", - "gap_set_ext_adv_enable", - "gap_set_ext_adv_para", - "gap_set_ext_adv_data", - "gap_set_periodic_adv_data", - "gap_set_periodic_adv_enable", - "gap_set_periodic_adv_para", - "gap_clr_adv_set", - "gap_rmv_adv_set", - "gap_periodic_adv_create_sync", - "gap_periodic_adv_create_sync_cancel", - "gap_periodic_adv_term_sync", - "gap_add_dev_to_periodic_list", - "gap_rmv_dev_from_periodic_list", - "gap_clr_periodic_adv_list", - "gap_read_periodic_adv_list_size", - "gap_ext_create_connection", - "gap_create_connection_cancel", - "gap_set_host_channel_classification", - "gap_update_connection_parameters", - "gap_get_connection_parameter_range", - "gap_set_connection_parameter_range", - "gap_aes_encrypt", - "gap_start_ccm", - "hci_add_event_handler", - "hci_register_acl_packet_handler", - "hci_power_control", - "platform_set_evt_callback", - "platform_set_irq_callback", - "platform_get_version", - "platform_raise_assertion", - "platform_get_heap_status", - "platform_reset", - "platform_switch_app", - "platform_config", - "platform_shutdown", - "platform_printf", - "sysSetPublicDeviceAddr", - "platform_set_rf_clk_source", - "platform_set_rf_init_data", - "platform_set_rf_power_mapping", - "big_endian_read_16", - "big_endian_read_32", - "big_endian_store_16", - "big_endian_store_32", - "reverse_bytes", - "reverse_24", - "reverse_48", - "reverse_56", - "reverse_64", - "reverse_128", - "reverse_bd_addr", - "char_for_nibble", - "nibble_for_char", - "bd_addr_cmp", - "bd_addr_copy", - "printf_hexdump", - "uuid128_to_str", - "bd_addr_to_str", - "sscanf_bd_addr", - "uuid_add_bluetooth_prefix", - "uuid_has_bluetooth_prefix", - "btstack_push_user_msg", - "l2cap_register_fixed_channel", - "l2cap_can_send_fixed_channel_packet_now", - "l2cap_request_can_send_fix_channel_now_event", - "l2cap_send_connectionless", - "l2cap_send_connectionless3", - "l2cap_init", - "l2cap_max_le_mtu", - "l2cap_send_signaling_le", - "sm_config", - "sm_add_event_handler", - "sm_private_random_address_generation_set_mode", - "sm_private_random_address_generation_get_mode", - "sm_private_random_address_generation_set_update_period", - "sm_private_random_address_generation_get", - "sm_register_oob_data_callback", - "sm_bonding_decline", - "sm_just_works_confirm", - "sm_passkey_input", - "sm_set_accepted_stk_generation_methods", - "sm_set_encryption_key_size_range", - "sm_set_authentication_requirements", - "sm_send_security_request", - "sm_encryption_key_size", - "sm_authenticated", - "sm_authorization_state", - "sm_request_pairing", - "sm_authorization_decline", - "sm_authorization_grant", - "sm_address_resolution_lookup", - "sm_le_device_key", - "kv_init", - "kv_remove_all", - "kv_remove", - "kv_put", - "kv_get", - "kv_value_modified", - "kv_commit", - "kv_visit", - "kv_value_append", - "kv_value_trunc", - "mesh_setup", - "mesh_set_dev_name", - "mesh_platform_config", - "_os_mbuf_leadingspace", - "_os_mbuf_trailingspace", - "os_mqueue_init", - "os_mqueue_get", - "os_mqueue_put", - "os_msys_register", - "os_msys_get", - "os_msys_reset", - "os_msys_get_pkthdr", - "os_msys_count", - "os_msys_num_free", - "os_mbuf_pool_init", - "os_mbuf_get", - "os_mbuf_get_pkthdr", - "os_mbuf_dup", - "os_mbuf_off", - "os_mbuf_copydata", - "os_mbuf_append", - "os_mbuf_appendfrom", - "os_mbuf_free", - "os_mbuf_free_chain", - "os_mbuf_adj", - "os_mbuf_cmpf", - "os_mbuf_cmpm", - "os_mbuf_prepend", - "os_mbuf_prepend_pullup", - "os_mbuf_copyinto", - "os_mbuf_concat", - "os_mbuf_extend", - "os_mbuf_pullup", - "os_mbuf_trim_front", - "NET_BUF_SIMPLE", - "net_buf_simple_init", - "net_buf_put", - "net_buf_ref", - "net_buf_unref", - "net_buf_simple_pull_le16", - "net_buf_simple_pull_be16", - "net_buf_simple_pull_be32", - "net_buf_simple_pull_le32", - "net_buf_simple_pull_u8", - "net_buf_simple_add_le16", - "net_buf_simple_add_be16", - "net_buf_simple_add_u8", - "net_buf_simple_add_be32", - "net_buf_simple_add_le32", - "net_buf_add_zeros", - "net_buf_simple_push_le16", - "net_buf_simple_push_be16", - "net_buf_simple_push_u8", - "net_buf_simple_pull", - "net_buf_simple_add", - "k_fifo_is_empty", - "net_buf_get", - "net_buf_simple_push", - "net_buf_reserve", - "bt_dh_key_gen", - "bt_pub_key_gen", - "bt_pub_key_get", - "bt_rand", - "bt_hex", - "bt_encrypt_be", - "bt_le_adv_start", - "bt_le_adv_stop", - "k_work_init", - "k_delayed_work_init", - "k_delayed_work_cancel", - "k_delayed_work_submit", - "k_uptime_get", - "k_uptime_get_32", - "k_sleep", - "k_work_submit", - "k_work_add_arg", - "k_delayed_work_add_arg", - "k_delayed_work_remaining_get", - "net_buf_simple_save", - "net_buf_simple_restore", - "sys_memcpy_swap", - "MYNEWT_VAL_BLE_MESH_GATT_PROXY", - "k_sem_take", - "net_buf_slist_init", - "net_buf_slist_is_empty", - "net_buf_slist_peek_head", - "net_buf_slist_peek_next", - "net_buf_slist_get", - "net_buf_slist_put", - "net_buf_slist_remove", - "net_buf_slist_merge_slist", - "settings_bytes_from_str", - "settings_str_from_bytes", - "PB_ADV_config", - "le_adv_status_reset", - "bt_mesh_model_msg_init", - "bt_mesh_model_send", - "bt_mesh_model_publish", - "bt_mesh_model_elem", - "bt_mesh_input_string", - "bt_mesh_input_number", - "bt_mesh_prov_enable", - "bt_mesh_prov_disable", - "bt_mesh_init", - "bt_mesh_reset", - "bt_mesh_provision", - "bt_mesh_is_provisioned", - "ble_npl_callout_init", - "npl_freertos_eventq_get", - "npl_freertos_eventq_put", - "npl_freertos_sem_init", - "npl_freertos_sem_pend", - "npl_freertos_sem_release", - "npl_freertos_callout_init", - "npl_freertos_callout_reset", - "npl_freertos_callout_remaining_ticks", - "npl_freertos_time_ms_to_ticks", - "xQueueGenericSend", - "xQueueReceive", - "xQueueGenericSendFromISR", - "xQueueGiveFromISR", - "xQueueReceiveFromISR", - "xQueueIsQueueEmptyFromISR", - "xQueueCreateCountingSemaphore", - "xQueueSemaphoreTake", - "xQueueGenericCreate", - "xQueueGenericCreateStatic", - "vQueueWaitForMessageRestricted", - "xQueueGenericReset", - "xTaskCreate", - "xTaskCreateStatic", - "vTaskDelay", - "vTaskStartScheduler", - "vTaskSuspendAll", - "xTaskResumeAll", - "xTaskGetTickCount", - "xTaskGetTickCountFromISR", - "xTaskIncrementTick", - "vTaskPlaceOnEventList", - "vTaskPlaceOnEventListRestricted", - "xTaskRemoveFromEventList", - "vTaskSwitchContext", - "xTaskCheckForTimeOut", - "vTaskMissedYield", - "xTaskGetSchedulerState", - "xTaskPriorityInherit", - "xTaskPriorityDisinherit", - "vTaskPriorityDisinheritAfterTimeout", - "vTaskStepTick", - "eTaskConfirmSleepModeStatus", - "pvTaskIncrementMutexHeldCount", - "vTaskInternalSetTimeOutState", - "xTimerCreate", - "pvTimerGetTimerID", - "xTimerGetExpiryTime", - "xTimerCreateTimerTask", - "xTimerGenericCommand", - "pxPortInitialiseStack", - "pvPortMalloc", - "vPortFree", - "xPortStartScheduler" - ], - "app": { - "base": 278528 - }, - "ram": { - "base": 536880208, - "size": 54040 - }, - "rom": { - "base": 16384, - "size": 258376 - }, - "version": [ - 0, - 14, - 3 - ] -} \ No newline at end of file diff --git a/bundles/mesh/platform.bin b/bundles/mesh/platform.bin deleted file mode 100644 index cf17b8628..000000000 Binary files a/bundles/mesh/platform.bin and /dev/null differ diff --git a/bundles/mesh/symdefs.g b/bundles/mesh/symdefs.g deleted file mode 100644 index 436c64ee3..000000000 --- a/bundles/mesh/symdefs.g +++ /dev/null @@ -1,329 +0,0 @@ -PB_ADV_config = 0x00004ff1; -att_dispatch_client_can_send_now = 0x00006ee1; -att_dispatch_client_request_can_send_now_event = 0x00006ee9; -att_dispatch_register_client = 0x00006f01; -att_dispatch_register_server = 0x00006f15; -att_dispatch_server_can_send_now = 0x00006f29; -att_dispatch_server_request_can_send_now_event = 0x00006f31; -att_emit_general_event = 0x00006f49; -att_server_can_send_packet_now = 0x00007745; -att_server_get_mtu = 0x00007749; -att_server_indicate = 0x000077b9; -att_server_init = 0x0000783d; -att_server_notify = 0x00007879; -att_server_register_packet_handler = 0x00007961; -att_server_request_can_send_now_event = 0x0000796d; -att_set_db = 0x00007989; -att_set_read_callback = 0x0000799d; -att_set_write_callback = 0x000079a9; -bd_addr_cmp = 0x00007d89; -bd_addr_copy = 0x00007d8f; -bd_addr_to_str = 0x00007d99; -big_endian_read_16 = 0x00008331; -big_endian_read_32 = 0x00008339; -big_endian_store_16 = 0x0000834d; -big_endian_store_32 = 0x00008359; -ble_gatts_find_chr = 0x00008a85; -ble_gatts_find_svc = 0x00008b1d; -bt_dh_key_gen = 0x00008e6d; -bt_encrypt_be = 0x00008e95; -bt_hex = 0x00008ebd; -bt_le_adv_start = 0x00008f1d; -bt_le_adv_stop = 0x00009045; -bt_mesh_init = 0x0000b7a9; -bt_mesh_input_number = 0x0000b809; -bt_mesh_input_string = 0x0000b87d; -bt_mesh_is_provisioned = 0x0000b8f9; -bt_mesh_model_elem = 0x0000bdb9; -bt_mesh_model_msg_init = 0x0000bf8d; -bt_mesh_model_publish = 0x0000c025; -bt_mesh_model_send = 0x0000c469; -bt_mesh_prov_disable = 0x0000e611; -bt_mesh_prov_enable = 0x0000e649; -bt_mesh_provision = 0x0000e805; -bt_mesh_reset = 0x0000efc9; -bt_pub_key_gen = 0x0000fa5d; -bt_pub_key_get = 0x0000fa8d; -bt_rand = 0x0000faa1; -btstack_push_user_msg = 0x0000fd1d; -char_for_nibble = 0x000102c7; -eTaskConfirmSleepModeStatus = 0x00011765; -gap_add_dev_to_periodic_list = 0x00013ac1; -gap_add_whitelist = 0x00013ad9; -gap_aes_encrypt = 0x00013aed; -gap_clr_adv_set = 0x00013b15; -gap_clr_periodic_adv_list = 0x00013b25; -gap_create_connection_cancel = 0x00013b51; -gap_disconnect = 0x00013b61; -gap_ext_create_connection = 0x00013bf5; -gap_get_connection_parameter_range = 0x00013cb9; -gap_periodic_adv_create_sync = 0x00013d51; -gap_periodic_adv_create_sync_cancel = 0x00013d75; -gap_periodic_adv_term_sync = 0x00013d85; -gap_read_periodic_adv_list_size = 0x00013e91; -gap_read_phy = 0x00013ea1; -gap_remove_whitelist = 0x00013eb5; -gap_rmv_adv_set = 0x00013f41; -gap_rmv_dev_from_periodic_list = 0x00013f55; -gap_set_adv_set_random_addr = 0x00013f95; -gap_set_connection_parameter_range = 0x00013fe1; -gap_set_def_phy = 0x00013ff9; -gap_set_ext_adv_data = 0x00014011; -gap_set_ext_adv_enable = 0x00014029; -gap_set_ext_adv_para = 0x000140a5; -gap_set_ext_scan_enable = 0x00014171; -gap_set_ext_scan_para = 0x00014189; -gap_set_ext_scan_response_data = 0x00014231; -gap_set_host_channel_classification = 0x00014249; -gap_set_periodic_adv_data = 0x0001425d; -gap_set_periodic_adv_enable = 0x000142d1; -gap_set_periodic_adv_para = 0x000142e5; -gap_set_phy = 0x000142fd; -gap_set_random_device_address = 0x00014319; -gap_start_ccm = 0x0001437d; -gap_update_connection_parameters = 0x000143b1; -gatt_client_cancel_write = 0x00014869; -gatt_client_deserialize_characteristic = 0x0001488f; -gatt_client_deserialize_characteristic_descriptor = 0x000148c7; -gatt_client_deserialize_service = 0x000148d5; -gatt_client_discover_characteristic_descriptors = 0x00014901; -gatt_client_discover_characteristics_for_handle_range_by_uuid128 = 0x00014943; -gatt_client_discover_characteristics_for_handle_range_by_uuid16 = 0x00014993; -gatt_client_discover_characteristics_for_service = 0x000149e3; -gatt_client_discover_characteristics_for_service_by_uuid128 = 0x00014a1b; -gatt_client_discover_characteristics_for_service_by_uuid16 = 0x00014a29; -gatt_client_discover_primary_services = 0x00014a37; -gatt_client_discover_primary_services_by_uuid128 = 0x00014a69; -gatt_client_discover_primary_services_by_uuid16 = 0x00014aad; -gatt_client_execute_write = 0x00014ae9; -gatt_client_find_included_services_for_service = 0x00014b0f; -gatt_client_get_mtu = 0x00014b3f; -gatt_client_is_ready = 0x00014be9; -gatt_client_listen_for_characteristic_value_updates = 0x00014bff; -gatt_client_prepare_write = 0x00014c25; -gatt_client_pts_suppress_mtu_exchange = 0x00014c61; -gatt_client_read_characteristic_descriptor = 0x00014c6d; -gatt_client_read_characteristic_descriptor_using_descriptor_handle = 0x00014c73; -gatt_client_read_long_characteristic_descriptor = 0x00014c9d; -gatt_client_read_long_characteristic_descriptor_using_descriptor_handle = 0x00014ca5; -gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset = 0x00014cab; -gatt_client_read_long_value_of_characteristic = 0x00014cd9; -gatt_client_read_long_value_of_characteristic_using_value_handle = 0x00014ce1; -gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset = 0x00014ce7; -gatt_client_read_multiple_characteristic_values = 0x00014d15; -gatt_client_read_value_of_characteristic = 0x00014d45; -gatt_client_read_value_of_characteristic_using_value_handle = 0x00014d4b; -gatt_client_read_value_of_characteristics_by_uuid128 = 0x00014d79; -gatt_client_read_value_of_characteristics_by_uuid16 = 0x00014dc5; -gatt_client_register_handler = 0x00014e11; -gatt_client_reliable_write_long_value_of_characteristic = 0x00014e1d; -gatt_client_signed_write_without_response = 0x00015249; -gatt_client_write_characteristic_descriptor = 0x0001530d; -gatt_client_write_characteristic_descriptor_using_descriptor_handle = 0x0001531b; -gatt_client_write_client_characteristic_configuration = 0x00015355; -gatt_client_write_long_characteristic_descriptor = 0x000153a7; -gatt_client_write_long_characteristic_descriptor_using_descriptor_handle = 0x000153b9; -gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset = 0x000153c9; -gatt_client_write_long_value_of_characteristic = 0x00015405; -gatt_client_write_long_value_of_characteristic_with_offset = 0x00015415; -gatt_client_write_value_of_characteristic = 0x00015451; -gatt_client_write_value_of_characteristic_without_response = 0x00015487; -hci_add_event_handler = 0x00018f89; -hci_power_control = 0x000197c5; -hci_register_acl_packet_handler = 0x000199c5; -k_delayed_work_add_arg = 0x0001ae91; -k_delayed_work_cancel = 0x0001ae95; -k_delayed_work_init = 0x0001aeab; -k_delayed_work_remaining_get = 0x0001aec5; -k_delayed_work_submit = 0x0001aeeb; -k_fifo_is_empty = 0x0001af07; -k_sleep = 0x0001af2f; -k_uptime_get = 0x0001af3d; -k_uptime_get_32 = 0x0001af51; -k_work_add_arg = 0x0001af63; -k_work_init = 0x0001af67; -k_work_submit = 0x0001af81; -kv_commit = 0x0001b221; -kv_get = 0x0001b27d; -kv_init = 0x0001b295; -kv_put = 0x0001b2e5; -kv_remove = 0x0001b35d; -kv_remove_all = 0x0001b399; -kv_value_append = 0x0001b45d; -kv_value_modified = 0x0001b4c1; -kv_value_trunc = 0x0001b4c5; -kv_visit = 0x0001b515; -l2cap_can_send_fixed_channel_packet_now = 0x0001b589; -l2cap_init = 0x0001b8e1; -l2cap_max_le_mtu = 0x0001b925; -l2cap_register_fixed_channel = 0x0001b9a9; -l2cap_request_can_send_fix_channel_now_event = 0x0001b9c5; -l2cap_send_connectionless = 0x0001bb6d; -l2cap_send_connectionless3 = 0x0001bbfd; -l2cap_send_signaling_le = 0x0001bce9; -le_adv_status_reset = 0x0001bd25; -mesh_platform_config = 0x0002a695; -mesh_set_dev_name = 0x0002a925; -mesh_setup = 0x0002a931; -net_buf_add_zeros = 0x0002d99d; -net_buf_get = 0x0002d9cb; -net_buf_put = 0x0002d9db; -net_buf_ref = 0x0002d9f9; -net_buf_reserve = 0x0002da09; -net_buf_simple_add = 0x0002da1b; -net_buf_simple_add_be16 = 0x0002da1f; -net_buf_simple_add_be32 = 0x0002da35; -net_buf_simple_add_le16 = 0x0002da47; -net_buf_simple_add_le32 = 0x0002da53; -net_buf_simple_add_u8 = 0x0002da5f; -net_buf_simple_pull = 0x0002dabb; -net_buf_simple_pull_be16 = 0x0002dac7; -net_buf_simple_pull_be32 = 0x0002daef; -net_buf_simple_pull_le16 = 0x0002db17; -net_buf_simple_pull_le32 = 0x0002db3f; -net_buf_simple_pull_u8 = 0x0002db67; -net_buf_simple_push = 0x0002db87; -net_buf_simple_push_be16 = 0x0002dbab; -net_buf_simple_push_le16 = 0x0002dbdf; -net_buf_simple_push_u8 = 0x0002dc13; -net_buf_slist_get = 0x0002dc7d; -net_buf_slist_init = 0x0002dca5; -net_buf_slist_is_empty = 0x0002dcad; -net_buf_slist_merge_slist = 0x0002dcb9; -net_buf_slist_peek_head = 0x0002dcd5; -net_buf_slist_peek_next = 0x0002dcdf; -net_buf_slist_put = 0x0002dce9; -net_buf_slist_remove = 0x0002dcf9; -net_buf_unref = 0x0002dd33; -nibble_for_char = 0x0002edcd; -npl_freertos_callout_init = 0x0002f45d; -npl_freertos_callout_remaining_ticks = 0x0002f499; -npl_freertos_callout_reset = 0x0002f4b1; -npl_freertos_eventq_get = 0x0002f54d; -npl_freertos_eventq_put = 0x0002f5a1; -npl_freertos_sem_init = 0x0002f5f9; -npl_freertos_sem_pend = 0x0002f615; -npl_freertos_sem_release = 0x0002f669; -npl_freertos_time_ms_to_ticks = 0x0002f6b9; -os_mbuf_adj = 0x0002f7e7; -os_mbuf_append = 0x0002f87f; -os_mbuf_appendfrom = 0x0002f917; -os_mbuf_cmpf = 0x0002f96d; -os_mbuf_cmpm = 0x0002f9cd; -os_mbuf_concat = 0x0002fa8b; -os_mbuf_copydata = 0x0002fac7; -os_mbuf_copyinto = 0x0002fb1f; -os_mbuf_dup = 0x0002fb9d; -os_mbuf_extend = 0x0002fc0d; -os_mbuf_free = 0x0002fc5d; -os_mbuf_free_chain = 0x0002fc75; -os_mbuf_get = 0x0002fc8b; -os_mbuf_get_pkthdr = 0x0002fcb7; -os_mbuf_off = 0x0002fce7; -os_mbuf_pool_init = 0x0002fd05; -os_mbuf_prepend = 0x0002fd0f; -os_mbuf_prepend_pullup = 0x0002fd91; -os_mbuf_pullup = 0x0002fda9; -os_mbuf_trim_front = 0x0002fe75; -os_mqueue_get = 0x0002ff95; -os_mqueue_init = 0x0002ffbb; -os_mqueue_put = 0x0002ffcd; -os_msys_count = 0x00030005; -os_msys_get = 0x00030021; -os_msys_get_pkthdr = 0x00030039; -os_msys_num_free = 0x00030099; -os_msys_register = 0x000300b5; -os_msys_reset = 0x000300f1; -platform_config = 0x000303e5; -platform_get_heap_status = 0x00030411; -platform_get_version = 0x00030429; -platform_printf = 0x00030431; -platform_raise_assertion = 0x00030445; -platform_reset = 0x00030459; -platform_set_evt_callback = 0x0003048d; -platform_set_irq_callback = 0x000304a1; -platform_set_rf_clk_source = 0x000304d9; -platform_set_rf_init_data = 0x000304e5; -platform_set_rf_power_mapping = 0x000304f1; -platform_shutdown = 0x000304fd; -platform_switch_app = 0x00030501; -printf_hexdump = 0x000314c9; -pvPortMalloc = 0x00034699; -pvTaskIncrementMutexHeldCount = 0x0003477d; -pvTimerGetTimerID = 0x00034795; -pxPortInitialiseStack = 0x000347c1; -reverse_128 = 0x00034f35; -reverse_24 = 0x00034f3b; -reverse_48 = 0x00034f41; -reverse_56 = 0x00034f47; -reverse_64 = 0x00034f4d; -reverse_bd_addr = 0x00034f53; -reverse_bytes = 0x00034f59; -settings_bytes_from_str = 0x00037545; -settings_str_from_bytes = 0x00037557; -sm_add_event_handler = 0x000376ed; -sm_address_resolution_lookup = 0x00037839; -sm_authenticated = 0x00037913; -sm_authorization_decline = 0x00037929; -sm_authorization_grant = 0x00037949; -sm_authorization_state = 0x00037969; -sm_bonding_decline = 0x00037985; -sm_config = 0x00037e7d; -sm_encryption_key_size = 0x00037f7d; -sm_just_works_confirm = 0x000388e9; -sm_le_device_key = 0x00038c19; -sm_passkey_input = 0x00038d09; -sm_private_random_address_generation_get = 0x000390d9; -sm_private_random_address_generation_get_mode = 0x000390e1; -sm_private_random_address_generation_set_mode = 0x000390ed; -sm_private_random_address_generation_set_update_period = 0x00039115; -sm_register_oob_data_callback = 0x0003914d; -sm_request_pairing = 0x00039159; -sm_send_security_request = 0x00039ce5; -sm_set_accepted_stk_generation_methods = 0x00039d0d; -sm_set_authentication_requirements = 0x00039d19; -sm_set_encryption_key_size_range = 0x00039d25; -sscanf_bd_addr = 0x0003a0d5; -sysSetPublicDeviceAddr = 0x0003b4b1; -uuid128_to_str = 0x0003d691; -uuid_add_bluetooth_prefix = 0x0003d6e9; -uuid_has_bluetooth_prefix = 0x0003d709; -vPortFree = 0x0003d851; -vQueueWaitForMessageRestricted = 0x0003da21; -vTaskDelay = 0x0003da69; -vTaskInternalSetTimeOutState = 0x0003dab5; -vTaskMissedYield = 0x0003dac5; -vTaskPlaceOnEventList = 0x0003dad1; -vTaskPlaceOnEventListRestricted = 0x0003db09; -vTaskPriorityDisinheritAfterTimeout = 0x0003db49; -vTaskStartScheduler = 0x0003dbf5; -vTaskStepTick = 0x0003dc81; -vTaskSuspendAll = 0x0003dcb1; -vTaskSwitchContext = 0x0003dcc1; -xPortStartScheduler = 0x0003e145; -xQueueCreateCountingSemaphore = 0x0003e201; -xQueueGenericCreate = 0x0003e23d; -xQueueGenericCreateStatic = 0x0003e289; -xQueueGenericReset = 0x0003e2f1; -xQueueGenericSend = 0x0003e37d; -xQueueGenericSendFromISR = 0x0003e4e5; -xQueueGiveFromISR = 0x0003e5a5; -xQueueIsQueueEmptyFromISR = 0x0003e649; -xQueueReceive = 0x0003e66d; -xQueueReceiveFromISR = 0x0003e799; -xQueueSemaphoreTake = 0x0003e82d; -xTaskCheckForTimeOut = 0x0003e995; -xTaskCreate = 0x0003ea05; -xTaskCreateStatic = 0x0003ea61; -xTaskGetSchedulerState = 0x0003ead1; -xTaskGetTickCount = 0x0003eaed; -xTaskGetTickCountFromISR = 0x0003eaf9; -xTaskIncrementTick = 0x0003eb09; -xTaskPriorityDisinherit = 0x0003ebd5; -xTaskPriorityInherit = 0x0003ec69; -xTaskRemoveFromEventList = 0x0003ecfd; -xTaskResumeAll = 0x0003ed7d; -xTimerCreate = 0x0003ee45; -xTimerCreateTimerTask = 0x0003ee79; -xTimerGenericCommand = 0x0003eee5; -xTimerGetExpiryTime = 0x0003ef55; diff --git a/bundles/mesh/symdefs.i b/bundles/mesh/symdefs.i deleted file mode 100644 index 48cc090c9..000000000 --- a/bundles/mesh/symdefs.i +++ /dev/null @@ -1,329 +0,0 @@ ---define_symbol PB_ADV_config=0x00004ff1 ---define_symbol att_dispatch_client_can_send_now=0x00006ee1 ---define_symbol att_dispatch_client_request_can_send_now_event=0x00006ee9 ---define_symbol att_dispatch_register_client=0x00006f01 ---define_symbol att_dispatch_register_server=0x00006f15 ---define_symbol att_dispatch_server_can_send_now=0x00006f29 ---define_symbol att_dispatch_server_request_can_send_now_event=0x00006f31 ---define_symbol att_emit_general_event=0x00006f49 ---define_symbol att_server_can_send_packet_now=0x00007745 ---define_symbol att_server_get_mtu=0x00007749 ---define_symbol att_server_indicate=0x000077b9 ---define_symbol att_server_init=0x0000783d ---define_symbol att_server_notify=0x00007879 ---define_symbol att_server_register_packet_handler=0x00007961 ---define_symbol att_server_request_can_send_now_event=0x0000796d ---define_symbol att_set_db=0x00007989 ---define_symbol att_set_read_callback=0x0000799d ---define_symbol att_set_write_callback=0x000079a9 ---define_symbol bd_addr_cmp=0x00007d89 ---define_symbol bd_addr_copy=0x00007d8f ---define_symbol bd_addr_to_str=0x00007d99 ---define_symbol big_endian_read_16=0x00008331 ---define_symbol big_endian_read_32=0x00008339 ---define_symbol big_endian_store_16=0x0000834d ---define_symbol big_endian_store_32=0x00008359 ---define_symbol ble_gatts_find_chr=0x00008a85 ---define_symbol ble_gatts_find_svc=0x00008b1d ---define_symbol bt_dh_key_gen=0x00008e6d ---define_symbol bt_encrypt_be=0x00008e95 ---define_symbol bt_hex=0x00008ebd ---define_symbol bt_le_adv_start=0x00008f1d ---define_symbol bt_le_adv_stop=0x00009045 ---define_symbol bt_mesh_init=0x0000b7a9 ---define_symbol bt_mesh_input_number=0x0000b809 ---define_symbol bt_mesh_input_string=0x0000b87d ---define_symbol bt_mesh_is_provisioned=0x0000b8f9 ---define_symbol bt_mesh_model_elem=0x0000bdb9 ---define_symbol bt_mesh_model_msg_init=0x0000bf8d ---define_symbol bt_mesh_model_publish=0x0000c025 ---define_symbol bt_mesh_model_send=0x0000c469 ---define_symbol bt_mesh_prov_disable=0x0000e611 ---define_symbol bt_mesh_prov_enable=0x0000e649 ---define_symbol bt_mesh_provision=0x0000e805 ---define_symbol bt_mesh_reset=0x0000efc9 ---define_symbol bt_pub_key_gen=0x0000fa5d ---define_symbol bt_pub_key_get=0x0000fa8d ---define_symbol bt_rand=0x0000faa1 ---define_symbol btstack_push_user_msg=0x0000fd1d ---define_symbol char_for_nibble=0x000102c7 ---define_symbol eTaskConfirmSleepModeStatus=0x00011765 ---define_symbol gap_add_dev_to_periodic_list=0x00013ac1 ---define_symbol gap_add_whitelist=0x00013ad9 ---define_symbol gap_aes_encrypt=0x00013aed ---define_symbol gap_clr_adv_set=0x00013b15 ---define_symbol gap_clr_periodic_adv_list=0x00013b25 ---define_symbol gap_create_connection_cancel=0x00013b51 ---define_symbol gap_disconnect=0x00013b61 ---define_symbol gap_ext_create_connection=0x00013bf5 ---define_symbol gap_get_connection_parameter_range=0x00013cb9 ---define_symbol gap_periodic_adv_create_sync=0x00013d51 ---define_symbol gap_periodic_adv_create_sync_cancel=0x00013d75 ---define_symbol gap_periodic_adv_term_sync=0x00013d85 ---define_symbol gap_read_periodic_adv_list_size=0x00013e91 ---define_symbol gap_read_phy=0x00013ea1 ---define_symbol gap_remove_whitelist=0x00013eb5 ---define_symbol gap_rmv_adv_set=0x00013f41 ---define_symbol gap_rmv_dev_from_periodic_list=0x00013f55 ---define_symbol gap_set_adv_set_random_addr=0x00013f95 ---define_symbol gap_set_connection_parameter_range=0x00013fe1 ---define_symbol gap_set_def_phy=0x00013ff9 ---define_symbol gap_set_ext_adv_data=0x00014011 ---define_symbol gap_set_ext_adv_enable=0x00014029 ---define_symbol gap_set_ext_adv_para=0x000140a5 ---define_symbol gap_set_ext_scan_enable=0x00014171 ---define_symbol gap_set_ext_scan_para=0x00014189 ---define_symbol gap_set_ext_scan_response_data=0x00014231 ---define_symbol gap_set_host_channel_classification=0x00014249 ---define_symbol gap_set_periodic_adv_data=0x0001425d ---define_symbol gap_set_periodic_adv_enable=0x000142d1 ---define_symbol gap_set_periodic_adv_para=0x000142e5 ---define_symbol gap_set_phy=0x000142fd ---define_symbol gap_set_random_device_address=0x00014319 ---define_symbol gap_start_ccm=0x0001437d ---define_symbol gap_update_connection_parameters=0x000143b1 ---define_symbol gatt_client_cancel_write=0x00014869 ---define_symbol gatt_client_deserialize_characteristic=0x0001488f ---define_symbol gatt_client_deserialize_characteristic_descriptor=0x000148c7 ---define_symbol gatt_client_deserialize_service=0x000148d5 ---define_symbol gatt_client_discover_characteristic_descriptors=0x00014901 ---define_symbol gatt_client_discover_characteristics_for_handle_range_by_uuid128=0x00014943 ---define_symbol gatt_client_discover_characteristics_for_handle_range_by_uuid16=0x00014993 ---define_symbol gatt_client_discover_characteristics_for_service=0x000149e3 ---define_symbol gatt_client_discover_characteristics_for_service_by_uuid128=0x00014a1b ---define_symbol gatt_client_discover_characteristics_for_service_by_uuid16=0x00014a29 ---define_symbol gatt_client_discover_primary_services=0x00014a37 ---define_symbol gatt_client_discover_primary_services_by_uuid128=0x00014a69 ---define_symbol gatt_client_discover_primary_services_by_uuid16=0x00014aad ---define_symbol gatt_client_execute_write=0x00014ae9 ---define_symbol gatt_client_find_included_services_for_service=0x00014b0f ---define_symbol gatt_client_get_mtu=0x00014b3f ---define_symbol gatt_client_is_ready=0x00014be9 ---define_symbol gatt_client_listen_for_characteristic_value_updates=0x00014bff ---define_symbol gatt_client_prepare_write=0x00014c25 ---define_symbol gatt_client_pts_suppress_mtu_exchange=0x00014c61 ---define_symbol gatt_client_read_characteristic_descriptor=0x00014c6d ---define_symbol gatt_client_read_characteristic_descriptor_using_descriptor_handle=0x00014c73 ---define_symbol gatt_client_read_long_characteristic_descriptor=0x00014c9d ---define_symbol gatt_client_read_long_characteristic_descriptor_using_descriptor_handle=0x00014ca5 ---define_symbol gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x00014cab ---define_symbol gatt_client_read_long_value_of_characteristic=0x00014cd9 ---define_symbol gatt_client_read_long_value_of_characteristic_using_value_handle=0x00014ce1 ---define_symbol gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset=0x00014ce7 ---define_symbol gatt_client_read_multiple_characteristic_values=0x00014d15 ---define_symbol gatt_client_read_value_of_characteristic=0x00014d45 ---define_symbol gatt_client_read_value_of_characteristic_using_value_handle=0x00014d4b ---define_symbol gatt_client_read_value_of_characteristics_by_uuid128=0x00014d79 ---define_symbol gatt_client_read_value_of_characteristics_by_uuid16=0x00014dc5 ---define_symbol gatt_client_register_handler=0x00014e11 ---define_symbol gatt_client_reliable_write_long_value_of_characteristic=0x00014e1d ---define_symbol gatt_client_signed_write_without_response=0x00015249 ---define_symbol gatt_client_write_characteristic_descriptor=0x0001530d ---define_symbol gatt_client_write_characteristic_descriptor_using_descriptor_handle=0x0001531b ---define_symbol gatt_client_write_client_characteristic_configuration=0x00015355 ---define_symbol gatt_client_write_long_characteristic_descriptor=0x000153a7 ---define_symbol gatt_client_write_long_characteristic_descriptor_using_descriptor_handle=0x000153b9 ---define_symbol gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x000153c9 ---define_symbol gatt_client_write_long_value_of_characteristic=0x00015405 ---define_symbol gatt_client_write_long_value_of_characteristic_with_offset=0x00015415 ---define_symbol gatt_client_write_value_of_characteristic=0x00015451 ---define_symbol gatt_client_write_value_of_characteristic_without_response=0x00015487 ---define_symbol hci_add_event_handler=0x00018f89 ---define_symbol hci_power_control=0x000197c5 ---define_symbol hci_register_acl_packet_handler=0x000199c5 ---define_symbol k_delayed_work_add_arg=0x0001ae91 ---define_symbol k_delayed_work_cancel=0x0001ae95 ---define_symbol k_delayed_work_init=0x0001aeab ---define_symbol k_delayed_work_remaining_get=0x0001aec5 ---define_symbol k_delayed_work_submit=0x0001aeeb ---define_symbol k_fifo_is_empty=0x0001af07 ---define_symbol k_sleep=0x0001af2f ---define_symbol k_uptime_get=0x0001af3d ---define_symbol k_uptime_get_32=0x0001af51 ---define_symbol k_work_add_arg=0x0001af63 ---define_symbol k_work_init=0x0001af67 ---define_symbol k_work_submit=0x0001af81 ---define_symbol kv_commit=0x0001b221 ---define_symbol kv_get=0x0001b27d ---define_symbol kv_init=0x0001b295 ---define_symbol kv_put=0x0001b2e5 ---define_symbol kv_remove=0x0001b35d ---define_symbol kv_remove_all=0x0001b399 ---define_symbol kv_value_append=0x0001b45d ---define_symbol kv_value_modified=0x0001b4c1 ---define_symbol kv_value_trunc=0x0001b4c5 ---define_symbol kv_visit=0x0001b515 ---define_symbol l2cap_can_send_fixed_channel_packet_now=0x0001b589 ---define_symbol l2cap_init=0x0001b8e1 ---define_symbol l2cap_max_le_mtu=0x0001b925 ---define_symbol l2cap_register_fixed_channel=0x0001b9a9 ---define_symbol l2cap_request_can_send_fix_channel_now_event=0x0001b9c5 ---define_symbol l2cap_send_connectionless=0x0001bb6d ---define_symbol l2cap_send_connectionless3=0x0001bbfd ---define_symbol l2cap_send_signaling_le=0x0001bce9 ---define_symbol le_adv_status_reset=0x0001bd25 ---define_symbol mesh_platform_config=0x0002a695 ---define_symbol mesh_set_dev_name=0x0002a925 ---define_symbol mesh_setup=0x0002a931 ---define_symbol net_buf_add_zeros=0x0002d99d ---define_symbol net_buf_get=0x0002d9cb ---define_symbol net_buf_put=0x0002d9db ---define_symbol net_buf_ref=0x0002d9f9 ---define_symbol net_buf_reserve=0x0002da09 ---define_symbol net_buf_simple_add=0x0002da1b ---define_symbol net_buf_simple_add_be16=0x0002da1f ---define_symbol net_buf_simple_add_be32=0x0002da35 ---define_symbol net_buf_simple_add_le16=0x0002da47 ---define_symbol net_buf_simple_add_le32=0x0002da53 ---define_symbol net_buf_simple_add_u8=0x0002da5f ---define_symbol net_buf_simple_pull=0x0002dabb ---define_symbol net_buf_simple_pull_be16=0x0002dac7 ---define_symbol net_buf_simple_pull_be32=0x0002daef ---define_symbol net_buf_simple_pull_le16=0x0002db17 ---define_symbol net_buf_simple_pull_le32=0x0002db3f ---define_symbol net_buf_simple_pull_u8=0x0002db67 ---define_symbol net_buf_simple_push=0x0002db87 ---define_symbol net_buf_simple_push_be16=0x0002dbab ---define_symbol net_buf_simple_push_le16=0x0002dbdf ---define_symbol net_buf_simple_push_u8=0x0002dc13 ---define_symbol net_buf_slist_get=0x0002dc7d ---define_symbol net_buf_slist_init=0x0002dca5 ---define_symbol net_buf_slist_is_empty=0x0002dcad ---define_symbol net_buf_slist_merge_slist=0x0002dcb9 ---define_symbol net_buf_slist_peek_head=0x0002dcd5 ---define_symbol net_buf_slist_peek_next=0x0002dcdf ---define_symbol net_buf_slist_put=0x0002dce9 ---define_symbol net_buf_slist_remove=0x0002dcf9 ---define_symbol net_buf_unref=0x0002dd33 ---define_symbol nibble_for_char=0x0002edcd ---define_symbol npl_freertos_callout_init=0x0002f45d ---define_symbol npl_freertos_callout_remaining_ticks=0x0002f499 ---define_symbol npl_freertos_callout_reset=0x0002f4b1 ---define_symbol npl_freertos_eventq_get=0x0002f54d ---define_symbol npl_freertos_eventq_put=0x0002f5a1 ---define_symbol npl_freertos_sem_init=0x0002f5f9 ---define_symbol npl_freertos_sem_pend=0x0002f615 ---define_symbol npl_freertos_sem_release=0x0002f669 ---define_symbol npl_freertos_time_ms_to_ticks=0x0002f6b9 ---define_symbol os_mbuf_adj=0x0002f7e7 ---define_symbol os_mbuf_append=0x0002f87f ---define_symbol os_mbuf_appendfrom=0x0002f917 ---define_symbol os_mbuf_cmpf=0x0002f96d ---define_symbol os_mbuf_cmpm=0x0002f9cd ---define_symbol os_mbuf_concat=0x0002fa8b ---define_symbol os_mbuf_copydata=0x0002fac7 ---define_symbol os_mbuf_copyinto=0x0002fb1f ---define_symbol os_mbuf_dup=0x0002fb9d ---define_symbol os_mbuf_extend=0x0002fc0d ---define_symbol os_mbuf_free=0x0002fc5d ---define_symbol os_mbuf_free_chain=0x0002fc75 ---define_symbol os_mbuf_get=0x0002fc8b ---define_symbol os_mbuf_get_pkthdr=0x0002fcb7 ---define_symbol os_mbuf_off=0x0002fce7 ---define_symbol os_mbuf_pool_init=0x0002fd05 ---define_symbol os_mbuf_prepend=0x0002fd0f ---define_symbol os_mbuf_prepend_pullup=0x0002fd91 ---define_symbol os_mbuf_pullup=0x0002fda9 ---define_symbol os_mbuf_trim_front=0x0002fe75 ---define_symbol os_mqueue_get=0x0002ff95 ---define_symbol os_mqueue_init=0x0002ffbb ---define_symbol os_mqueue_put=0x0002ffcd ---define_symbol os_msys_count=0x00030005 ---define_symbol os_msys_get=0x00030021 ---define_symbol os_msys_get_pkthdr=0x00030039 ---define_symbol os_msys_num_free=0x00030099 ---define_symbol os_msys_register=0x000300b5 ---define_symbol os_msys_reset=0x000300f1 ---define_symbol platform_config=0x000303e5 ---define_symbol platform_get_heap_status=0x00030411 ---define_symbol platform_get_version=0x00030429 ---define_symbol platform_printf=0x00030431 ---define_symbol platform_raise_assertion=0x00030445 ---define_symbol platform_reset=0x00030459 ---define_symbol platform_set_evt_callback=0x0003048d ---define_symbol platform_set_irq_callback=0x000304a1 ---define_symbol platform_set_rf_clk_source=0x000304d9 ---define_symbol platform_set_rf_init_data=0x000304e5 ---define_symbol platform_set_rf_power_mapping=0x000304f1 ---define_symbol platform_shutdown=0x000304fd ---define_symbol platform_switch_app=0x00030501 ---define_symbol printf_hexdump=0x000314c9 ---define_symbol pvPortMalloc=0x00034699 ---define_symbol pvTaskIncrementMutexHeldCount=0x0003477d ---define_symbol pvTimerGetTimerID=0x00034795 ---define_symbol pxPortInitialiseStack=0x000347c1 ---define_symbol reverse_128=0x00034f35 ---define_symbol reverse_24=0x00034f3b ---define_symbol reverse_48=0x00034f41 ---define_symbol reverse_56=0x00034f47 ---define_symbol reverse_64=0x00034f4d ---define_symbol reverse_bd_addr=0x00034f53 ---define_symbol reverse_bytes=0x00034f59 ---define_symbol settings_bytes_from_str=0x00037545 ---define_symbol settings_str_from_bytes=0x00037557 ---define_symbol sm_add_event_handler=0x000376ed ---define_symbol sm_address_resolution_lookup=0x00037839 ---define_symbol sm_authenticated=0x00037913 ---define_symbol sm_authorization_decline=0x00037929 ---define_symbol sm_authorization_grant=0x00037949 ---define_symbol sm_authorization_state=0x00037969 ---define_symbol sm_bonding_decline=0x00037985 ---define_symbol sm_config=0x00037e7d ---define_symbol sm_encryption_key_size=0x00037f7d ---define_symbol sm_just_works_confirm=0x000388e9 ---define_symbol sm_le_device_key=0x00038c19 ---define_symbol sm_passkey_input=0x00038d09 ---define_symbol sm_private_random_address_generation_get=0x000390d9 ---define_symbol sm_private_random_address_generation_get_mode=0x000390e1 ---define_symbol sm_private_random_address_generation_set_mode=0x000390ed ---define_symbol sm_private_random_address_generation_set_update_period=0x00039115 ---define_symbol sm_register_oob_data_callback=0x0003914d ---define_symbol sm_request_pairing=0x00039159 ---define_symbol sm_send_security_request=0x00039ce5 ---define_symbol sm_set_accepted_stk_generation_methods=0x00039d0d ---define_symbol sm_set_authentication_requirements=0x00039d19 ---define_symbol sm_set_encryption_key_size_range=0x00039d25 ---define_symbol sscanf_bd_addr=0x0003a0d5 ---define_symbol sysSetPublicDeviceAddr=0x0003b4b1 ---define_symbol uuid128_to_str=0x0003d691 ---define_symbol uuid_add_bluetooth_prefix=0x0003d6e9 ---define_symbol uuid_has_bluetooth_prefix=0x0003d709 ---define_symbol vPortFree=0x0003d851 ---define_symbol vQueueWaitForMessageRestricted=0x0003da21 ---define_symbol vTaskDelay=0x0003da69 ---define_symbol vTaskInternalSetTimeOutState=0x0003dab5 ---define_symbol vTaskMissedYield=0x0003dac5 ---define_symbol vTaskPlaceOnEventList=0x0003dad1 ---define_symbol vTaskPlaceOnEventListRestricted=0x0003db09 ---define_symbol vTaskPriorityDisinheritAfterTimeout=0x0003db49 ---define_symbol vTaskStartScheduler=0x0003dbf5 ---define_symbol vTaskStepTick=0x0003dc81 ---define_symbol vTaskSuspendAll=0x0003dcb1 ---define_symbol vTaskSwitchContext=0x0003dcc1 ---define_symbol xPortStartScheduler=0x0003e145 ---define_symbol xQueueCreateCountingSemaphore=0x0003e201 ---define_symbol xQueueGenericCreate=0x0003e23d ---define_symbol xQueueGenericCreateStatic=0x0003e289 ---define_symbol xQueueGenericReset=0x0003e2f1 ---define_symbol xQueueGenericSend=0x0003e37d ---define_symbol xQueueGenericSendFromISR=0x0003e4e5 ---define_symbol xQueueGiveFromISR=0x0003e5a5 ---define_symbol xQueueIsQueueEmptyFromISR=0x0003e649 ---define_symbol xQueueReceive=0x0003e66d ---define_symbol xQueueReceiveFromISR=0x0003e799 ---define_symbol xQueueSemaphoreTake=0x0003e82d ---define_symbol xTaskCheckForTimeOut=0x0003e995 ---define_symbol xTaskCreate=0x0003ea05 ---define_symbol xTaskCreateStatic=0x0003ea61 ---define_symbol xTaskGetSchedulerState=0x0003ead1 ---define_symbol xTaskGetTickCount=0x0003eaed ---define_symbol xTaskGetTickCountFromISR=0x0003eaf9 ---define_symbol xTaskIncrementTick=0x0003eb09 ---define_symbol xTaskPriorityDisinherit=0x0003ebd5 ---define_symbol xTaskPriorityInherit=0x0003ec69 ---define_symbol xTaskRemoveFromEventList=0x0003ecfd ---define_symbol xTaskResumeAll=0x0003ed7d ---define_symbol xTimerCreate=0x0003ee45 ---define_symbol xTimerCreateTimerTask=0x0003ee79 ---define_symbol xTimerGenericCommand=0x0003eee5 ---define_symbol xTimerGetExpiryTime=0x0003ef55 diff --git a/bundles/mesh/symdefs.m b/bundles/mesh/symdefs.m deleted file mode 100644 index 910af3197..000000000 --- a/bundles/mesh/symdefs.m +++ /dev/null @@ -1,330 +0,0 @@ -## ARM Linker, 5.03 [Build 76]: Last Updated: Thu Oct 17 00:00:00 2019 -0x00004ff1 T PB_ADV_config -0x00006ee1 T att_dispatch_client_can_send_now -0x00006ee9 T att_dispatch_client_request_can_send_now_event -0x00006f01 T att_dispatch_register_client -0x00006f15 T att_dispatch_register_server -0x00006f29 T att_dispatch_server_can_send_now -0x00006f31 T att_dispatch_server_request_can_send_now_event -0x00006f49 T att_emit_general_event -0x00007745 T att_server_can_send_packet_now -0x00007749 T att_server_get_mtu -0x000077b9 T att_server_indicate -0x0000783d T att_server_init -0x00007879 T att_server_notify -0x00007961 T att_server_register_packet_handler -0x0000796d T att_server_request_can_send_now_event -0x00007989 T att_set_db -0x0000799d T att_set_read_callback -0x000079a9 T att_set_write_callback -0x00007d89 T bd_addr_cmp -0x00007d8f T bd_addr_copy -0x00007d99 T bd_addr_to_str -0x00008331 T big_endian_read_16 -0x00008339 T big_endian_read_32 -0x0000834d T big_endian_store_16 -0x00008359 T big_endian_store_32 -0x00008a85 T ble_gatts_find_chr -0x00008b1d T ble_gatts_find_svc -0x00008e6d T bt_dh_key_gen -0x00008e95 T bt_encrypt_be -0x00008ebd T bt_hex -0x00008f1d T bt_le_adv_start -0x00009045 T bt_le_adv_stop -0x0000b7a9 T bt_mesh_init -0x0000b809 T bt_mesh_input_number -0x0000b87d T bt_mesh_input_string -0x0000b8f9 T bt_mesh_is_provisioned -0x0000bdb9 T bt_mesh_model_elem -0x0000bf8d T bt_mesh_model_msg_init -0x0000c025 T bt_mesh_model_publish -0x0000c469 T bt_mesh_model_send -0x0000e611 T bt_mesh_prov_disable -0x0000e649 T bt_mesh_prov_enable -0x0000e805 T bt_mesh_provision -0x0000efc9 T bt_mesh_reset -0x0000fa5d T bt_pub_key_gen -0x0000fa8d T bt_pub_key_get -0x0000faa1 T bt_rand -0x0000fd1d T btstack_push_user_msg -0x000102c7 T char_for_nibble -0x00011765 T eTaskConfirmSleepModeStatus -0x00013ac1 T gap_add_dev_to_periodic_list -0x00013ad9 T gap_add_whitelist -0x00013aed T gap_aes_encrypt -0x00013b15 T gap_clr_adv_set -0x00013b25 T gap_clr_periodic_adv_list -0x00013b51 T gap_create_connection_cancel -0x00013b61 T gap_disconnect -0x00013bf5 T gap_ext_create_connection -0x00013cb9 T gap_get_connection_parameter_range -0x00013d51 T gap_periodic_adv_create_sync -0x00013d75 T gap_periodic_adv_create_sync_cancel -0x00013d85 T gap_periodic_adv_term_sync -0x00013e91 T gap_read_periodic_adv_list_size -0x00013ea1 T gap_read_phy -0x00013eb5 T gap_remove_whitelist -0x00013f41 T gap_rmv_adv_set -0x00013f55 T gap_rmv_dev_from_periodic_list -0x00013f95 T gap_set_adv_set_random_addr -0x00013fe1 T gap_set_connection_parameter_range -0x00013ff9 T gap_set_def_phy -0x00014011 T gap_set_ext_adv_data -0x00014029 T gap_set_ext_adv_enable -0x000140a5 T gap_set_ext_adv_para -0x00014171 T gap_set_ext_scan_enable -0x00014189 T gap_set_ext_scan_para -0x00014231 T gap_set_ext_scan_response_data -0x00014249 T gap_set_host_channel_classification -0x0001425d T gap_set_periodic_adv_data -0x000142d1 T gap_set_periodic_adv_enable -0x000142e5 T gap_set_periodic_adv_para -0x000142fd T gap_set_phy -0x00014319 T gap_set_random_device_address -0x0001437d T gap_start_ccm -0x000143b1 T gap_update_connection_parameters -0x00014869 T gatt_client_cancel_write -0x0001488f T gatt_client_deserialize_characteristic -0x000148c7 T gatt_client_deserialize_characteristic_descriptor -0x000148d5 T gatt_client_deserialize_service -0x00014901 T gatt_client_discover_characteristic_descriptors -0x00014943 T gatt_client_discover_characteristics_for_handle_range_by_uuid128 -0x00014993 T gatt_client_discover_characteristics_for_handle_range_by_uuid16 -0x000149e3 T gatt_client_discover_characteristics_for_service -0x00014a1b T gatt_client_discover_characteristics_for_service_by_uuid128 -0x00014a29 T gatt_client_discover_characteristics_for_service_by_uuid16 -0x00014a37 T gatt_client_discover_primary_services -0x00014a69 T gatt_client_discover_primary_services_by_uuid128 -0x00014aad T gatt_client_discover_primary_services_by_uuid16 -0x00014ae9 T gatt_client_execute_write -0x00014b0f T gatt_client_find_included_services_for_service -0x00014b3f T gatt_client_get_mtu -0x00014be9 T gatt_client_is_ready -0x00014bff T gatt_client_listen_for_characteristic_value_updates -0x00014c25 T gatt_client_prepare_write -0x00014c61 T gatt_client_pts_suppress_mtu_exchange -0x00014c6d T gatt_client_read_characteristic_descriptor -0x00014c73 T gatt_client_read_characteristic_descriptor_using_descriptor_handle -0x00014c9d T gatt_client_read_long_characteristic_descriptor -0x00014ca5 T gatt_client_read_long_characteristic_descriptor_using_descriptor_handle -0x00014cab T gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset -0x00014cd9 T gatt_client_read_long_value_of_characteristic -0x00014ce1 T gatt_client_read_long_value_of_characteristic_using_value_handle -0x00014ce7 T gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset -0x00014d15 T gatt_client_read_multiple_characteristic_values -0x00014d45 T gatt_client_read_value_of_characteristic -0x00014d4b T gatt_client_read_value_of_characteristic_using_value_handle -0x00014d79 T gatt_client_read_value_of_characteristics_by_uuid128 -0x00014dc5 T gatt_client_read_value_of_characteristics_by_uuid16 -0x00014e11 T gatt_client_register_handler -0x00014e1d T gatt_client_reliable_write_long_value_of_characteristic -0x00015249 T gatt_client_signed_write_without_response -0x0001530d T gatt_client_write_characteristic_descriptor -0x0001531b T gatt_client_write_characteristic_descriptor_using_descriptor_handle -0x00015355 T gatt_client_write_client_characteristic_configuration -0x000153a7 T gatt_client_write_long_characteristic_descriptor -0x000153b9 T gatt_client_write_long_characteristic_descriptor_using_descriptor_handle -0x000153c9 T gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset -0x00015405 T gatt_client_write_long_value_of_characteristic -0x00015415 T gatt_client_write_long_value_of_characteristic_with_offset -0x00015451 T gatt_client_write_value_of_characteristic -0x00015487 T gatt_client_write_value_of_characteristic_without_response -0x00018f89 T hci_add_event_handler -0x000197c5 T hci_power_control -0x000199c5 T hci_register_acl_packet_handler -0x0001ae91 T k_delayed_work_add_arg -0x0001ae95 T k_delayed_work_cancel -0x0001aeab T k_delayed_work_init -0x0001aec5 T k_delayed_work_remaining_get -0x0001aeeb T k_delayed_work_submit -0x0001af07 T k_fifo_is_empty -0x0001af2f T k_sleep -0x0001af3d T k_uptime_get -0x0001af51 T k_uptime_get_32 -0x0001af63 T k_work_add_arg -0x0001af67 T k_work_init -0x0001af81 T k_work_submit -0x0001b221 T kv_commit -0x0001b27d T kv_get -0x0001b295 T kv_init -0x0001b2e5 T kv_put -0x0001b35d T kv_remove -0x0001b399 T kv_remove_all -0x0001b45d T kv_value_append -0x0001b4c1 T kv_value_modified -0x0001b4c5 T kv_value_trunc -0x0001b515 T kv_visit -0x0001b589 T l2cap_can_send_fixed_channel_packet_now -0x0001b8e1 T l2cap_init -0x0001b925 T l2cap_max_le_mtu -0x0001b9a9 T l2cap_register_fixed_channel -0x0001b9c5 T l2cap_request_can_send_fix_channel_now_event -0x0001bb6d T l2cap_send_connectionless -0x0001bbfd T l2cap_send_connectionless3 -0x0001bce9 T l2cap_send_signaling_le -0x0001bd25 T le_adv_status_reset -0x0002a695 T mesh_platform_config -0x0002a925 T mesh_set_dev_name -0x0002a931 T mesh_setup -0x0002d99d T net_buf_add_zeros -0x0002d9cb T net_buf_get -0x0002d9db T net_buf_put -0x0002d9f9 T net_buf_ref -0x0002da09 T net_buf_reserve -0x0002da1b T net_buf_simple_add -0x0002da1f T net_buf_simple_add_be16 -0x0002da35 T net_buf_simple_add_be32 -0x0002da47 T net_buf_simple_add_le16 -0x0002da53 T net_buf_simple_add_le32 -0x0002da5f T net_buf_simple_add_u8 -0x0002dabb T net_buf_simple_pull -0x0002dac7 T net_buf_simple_pull_be16 -0x0002daef T net_buf_simple_pull_be32 -0x0002db17 T net_buf_simple_pull_le16 -0x0002db3f T net_buf_simple_pull_le32 -0x0002db67 T net_buf_simple_pull_u8 -0x0002db87 T net_buf_simple_push -0x0002dbab T net_buf_simple_push_be16 -0x0002dbdf T net_buf_simple_push_le16 -0x0002dc13 T net_buf_simple_push_u8 -0x0002dc7d T net_buf_slist_get -0x0002dca5 T net_buf_slist_init -0x0002dcad T net_buf_slist_is_empty -0x0002dcb9 T net_buf_slist_merge_slist -0x0002dcd5 T net_buf_slist_peek_head -0x0002dcdf T net_buf_slist_peek_next -0x0002dce9 T net_buf_slist_put -0x0002dcf9 T net_buf_slist_remove -0x0002dd33 T net_buf_unref -0x0002edcd T nibble_for_char -0x0002f45d T npl_freertos_callout_init -0x0002f499 T npl_freertos_callout_remaining_ticks -0x0002f4b1 T npl_freertos_callout_reset -0x0002f54d T npl_freertos_eventq_get -0x0002f5a1 T npl_freertos_eventq_put -0x0002f5f9 T npl_freertos_sem_init -0x0002f615 T npl_freertos_sem_pend -0x0002f669 T npl_freertos_sem_release -0x0002f6b9 T npl_freertos_time_ms_to_ticks -0x0002f7e7 T os_mbuf_adj -0x0002f87f T os_mbuf_append -0x0002f917 T os_mbuf_appendfrom -0x0002f96d T os_mbuf_cmpf -0x0002f9cd T os_mbuf_cmpm -0x0002fa8b T os_mbuf_concat -0x0002fac7 T os_mbuf_copydata -0x0002fb1f T os_mbuf_copyinto -0x0002fb9d T os_mbuf_dup -0x0002fc0d T os_mbuf_extend -0x0002fc5d T os_mbuf_free -0x0002fc75 T os_mbuf_free_chain -0x0002fc8b T os_mbuf_get -0x0002fcb7 T os_mbuf_get_pkthdr -0x0002fce7 T os_mbuf_off -0x0002fd05 T os_mbuf_pool_init -0x0002fd0f T os_mbuf_prepend -0x0002fd91 T os_mbuf_prepend_pullup -0x0002fda9 T os_mbuf_pullup -0x0002fe75 T os_mbuf_trim_front -0x0002ff95 T os_mqueue_get -0x0002ffbb T os_mqueue_init -0x0002ffcd T os_mqueue_put -0x00030005 T os_msys_count -0x00030021 T os_msys_get -0x00030039 T os_msys_get_pkthdr -0x00030099 T os_msys_num_free -0x000300b5 T os_msys_register -0x000300f1 T os_msys_reset -0x000303e5 T platform_config -0x00030411 T platform_get_heap_status -0x00030429 T platform_get_version -0x00030431 T platform_printf -0x00030445 T platform_raise_assertion -0x00030459 T platform_reset -0x0003048d T platform_set_evt_callback -0x000304a1 T platform_set_irq_callback -0x000304d9 T platform_set_rf_clk_source -0x000304e5 T platform_set_rf_init_data -0x000304f1 T platform_set_rf_power_mapping -0x000304fd T platform_shutdown -0x00030501 T platform_switch_app -0x000314c9 T printf_hexdump -0x00034699 T pvPortMalloc -0x0003477d T pvTaskIncrementMutexHeldCount -0x00034795 T pvTimerGetTimerID -0x000347c1 T pxPortInitialiseStack -0x00034f35 T reverse_128 -0x00034f3b T reverse_24 -0x00034f41 T reverse_48 -0x00034f47 T reverse_56 -0x00034f4d T reverse_64 -0x00034f53 T reverse_bd_addr -0x00034f59 T reverse_bytes -0x00037545 T settings_bytes_from_str -0x00037557 T settings_str_from_bytes -0x000376ed T sm_add_event_handler -0x00037839 T sm_address_resolution_lookup -0x00037913 T sm_authenticated -0x00037929 T sm_authorization_decline -0x00037949 T sm_authorization_grant -0x00037969 T sm_authorization_state -0x00037985 T sm_bonding_decline -0x00037e7d T sm_config -0x00037f7d T sm_encryption_key_size -0x000388e9 T sm_just_works_confirm -0x00038c19 T sm_le_device_key -0x00038d09 T sm_passkey_input -0x000390d9 T sm_private_random_address_generation_get -0x000390e1 T sm_private_random_address_generation_get_mode -0x000390ed T sm_private_random_address_generation_set_mode -0x00039115 T sm_private_random_address_generation_set_update_period -0x0003914d T sm_register_oob_data_callback -0x00039159 T sm_request_pairing -0x00039ce5 T sm_send_security_request -0x00039d0d T sm_set_accepted_stk_generation_methods -0x00039d19 T sm_set_authentication_requirements -0x00039d25 T sm_set_encryption_key_size_range -0x0003a0d5 T sscanf_bd_addr -0x0003b4b1 T sysSetPublicDeviceAddr -0x0003d691 T uuid128_to_str -0x0003d6e9 T uuid_add_bluetooth_prefix -0x0003d709 T uuid_has_bluetooth_prefix -0x0003d851 T vPortFree -0x0003da21 T vQueueWaitForMessageRestricted -0x0003da69 T vTaskDelay -0x0003dab5 T vTaskInternalSetTimeOutState -0x0003dac5 T vTaskMissedYield -0x0003dad1 T vTaskPlaceOnEventList -0x0003db09 T vTaskPlaceOnEventListRestricted -0x0003db49 T vTaskPriorityDisinheritAfterTimeout -0x0003dbf5 T vTaskStartScheduler -0x0003dc81 T vTaskStepTick -0x0003dcb1 T vTaskSuspendAll -0x0003dcc1 T vTaskSwitchContext -0x0003e145 T xPortStartScheduler -0x0003e201 T xQueueCreateCountingSemaphore -0x0003e23d T xQueueGenericCreate -0x0003e289 T xQueueGenericCreateStatic -0x0003e2f1 T xQueueGenericReset -0x0003e37d T xQueueGenericSend -0x0003e4e5 T xQueueGenericSendFromISR -0x0003e5a5 T xQueueGiveFromISR -0x0003e649 T xQueueIsQueueEmptyFromISR -0x0003e66d T xQueueReceive -0x0003e799 T xQueueReceiveFromISR -0x0003e82d T xQueueSemaphoreTake -0x0003e995 T xTaskCheckForTimeOut -0x0003ea05 T xTaskCreate -0x0003ea61 T xTaskCreateStatic -0x0003ead1 T xTaskGetSchedulerState -0x0003eaed T xTaskGetTickCount -0x0003eaf9 T xTaskGetTickCountFromISR -0x0003eb09 T xTaskIncrementTick -0x0003ebd5 T xTaskPriorityDisinherit -0x0003ec69 T xTaskPriorityInherit -0x0003ecfd T xTaskRemoveFromEventList -0x0003ed7d T xTaskResumeAll -0x0003ee45 T xTimerCreate -0x0003ee79 T xTimerCreateTimerTask -0x0003eee5 T xTimerGenericCommand -0x0003ef55 T xTimerGetExpiryTime diff --git a/bundles/mesh/symdefs.s b/bundles/mesh/symdefs.s deleted file mode 100644 index 237055eec..000000000 --- a/bundles/mesh/symdefs.s +++ /dev/null @@ -1,329 +0,0 @@ ---defsym:PB_ADV_config=0x00004ff1 ---defsym:att_dispatch_client_can_send_now=0x00006ee1 ---defsym:att_dispatch_client_request_can_send_now_event=0x00006ee9 ---defsym:att_dispatch_register_client=0x00006f01 ---defsym:att_dispatch_register_server=0x00006f15 ---defsym:att_dispatch_server_can_send_now=0x00006f29 ---defsym:att_dispatch_server_request_can_send_now_event=0x00006f31 ---defsym:att_emit_general_event=0x00006f49 ---defsym:att_server_can_send_packet_now=0x00007745 ---defsym:att_server_get_mtu=0x00007749 ---defsym:att_server_indicate=0x000077b9 ---defsym:att_server_init=0x0000783d ---defsym:att_server_notify=0x00007879 ---defsym:att_server_register_packet_handler=0x00007961 ---defsym:att_server_request_can_send_now_event=0x0000796d ---defsym:att_set_db=0x00007989 ---defsym:att_set_read_callback=0x0000799d ---defsym:att_set_write_callback=0x000079a9 ---defsym:bd_addr_cmp=0x00007d89 ---defsym:bd_addr_copy=0x00007d8f ---defsym:bd_addr_to_str=0x00007d99 ---defsym:big_endian_read_16=0x00008331 ---defsym:big_endian_read_32=0x00008339 ---defsym:big_endian_store_16=0x0000834d ---defsym:big_endian_store_32=0x00008359 ---defsym:ble_gatts_find_chr=0x00008a85 ---defsym:ble_gatts_find_svc=0x00008b1d ---defsym:bt_dh_key_gen=0x00008e6d ---defsym:bt_encrypt_be=0x00008e95 ---defsym:bt_hex=0x00008ebd ---defsym:bt_le_adv_start=0x00008f1d ---defsym:bt_le_adv_stop=0x00009045 ---defsym:bt_mesh_init=0x0000b7a9 ---defsym:bt_mesh_input_number=0x0000b809 ---defsym:bt_mesh_input_string=0x0000b87d ---defsym:bt_mesh_is_provisioned=0x0000b8f9 ---defsym:bt_mesh_model_elem=0x0000bdb9 ---defsym:bt_mesh_model_msg_init=0x0000bf8d ---defsym:bt_mesh_model_publish=0x0000c025 ---defsym:bt_mesh_model_send=0x0000c469 ---defsym:bt_mesh_prov_disable=0x0000e611 ---defsym:bt_mesh_prov_enable=0x0000e649 ---defsym:bt_mesh_provision=0x0000e805 ---defsym:bt_mesh_reset=0x0000efc9 ---defsym:bt_pub_key_gen=0x0000fa5d ---defsym:bt_pub_key_get=0x0000fa8d ---defsym:bt_rand=0x0000faa1 ---defsym:btstack_push_user_msg=0x0000fd1d ---defsym:char_for_nibble=0x000102c7 ---defsym:eTaskConfirmSleepModeStatus=0x00011765 ---defsym:gap_add_dev_to_periodic_list=0x00013ac1 ---defsym:gap_add_whitelist=0x00013ad9 ---defsym:gap_aes_encrypt=0x00013aed ---defsym:gap_clr_adv_set=0x00013b15 ---defsym:gap_clr_periodic_adv_list=0x00013b25 ---defsym:gap_create_connection_cancel=0x00013b51 ---defsym:gap_disconnect=0x00013b61 ---defsym:gap_ext_create_connection=0x00013bf5 ---defsym:gap_get_connection_parameter_range=0x00013cb9 ---defsym:gap_periodic_adv_create_sync=0x00013d51 ---defsym:gap_periodic_adv_create_sync_cancel=0x00013d75 ---defsym:gap_periodic_adv_term_sync=0x00013d85 ---defsym:gap_read_periodic_adv_list_size=0x00013e91 ---defsym:gap_read_phy=0x00013ea1 ---defsym:gap_remove_whitelist=0x00013eb5 ---defsym:gap_rmv_adv_set=0x00013f41 ---defsym:gap_rmv_dev_from_periodic_list=0x00013f55 ---defsym:gap_set_adv_set_random_addr=0x00013f95 ---defsym:gap_set_connection_parameter_range=0x00013fe1 ---defsym:gap_set_def_phy=0x00013ff9 ---defsym:gap_set_ext_adv_data=0x00014011 ---defsym:gap_set_ext_adv_enable=0x00014029 ---defsym:gap_set_ext_adv_para=0x000140a5 ---defsym:gap_set_ext_scan_enable=0x00014171 ---defsym:gap_set_ext_scan_para=0x00014189 ---defsym:gap_set_ext_scan_response_data=0x00014231 ---defsym:gap_set_host_channel_classification=0x00014249 ---defsym:gap_set_periodic_adv_data=0x0001425d ---defsym:gap_set_periodic_adv_enable=0x000142d1 ---defsym:gap_set_periodic_adv_para=0x000142e5 ---defsym:gap_set_phy=0x000142fd ---defsym:gap_set_random_device_address=0x00014319 ---defsym:gap_start_ccm=0x0001437d ---defsym:gap_update_connection_parameters=0x000143b1 ---defsym:gatt_client_cancel_write=0x00014869 ---defsym:gatt_client_deserialize_characteristic=0x0001488f ---defsym:gatt_client_deserialize_characteristic_descriptor=0x000148c7 ---defsym:gatt_client_deserialize_service=0x000148d5 ---defsym:gatt_client_discover_characteristic_descriptors=0x00014901 ---defsym:gatt_client_discover_characteristics_for_handle_range_by_uuid128=0x00014943 ---defsym:gatt_client_discover_characteristics_for_handle_range_by_uuid16=0x00014993 ---defsym:gatt_client_discover_characteristics_for_service=0x000149e3 ---defsym:gatt_client_discover_characteristics_for_service_by_uuid128=0x00014a1b ---defsym:gatt_client_discover_characteristics_for_service_by_uuid16=0x00014a29 ---defsym:gatt_client_discover_primary_services=0x00014a37 ---defsym:gatt_client_discover_primary_services_by_uuid128=0x00014a69 ---defsym:gatt_client_discover_primary_services_by_uuid16=0x00014aad ---defsym:gatt_client_execute_write=0x00014ae9 ---defsym:gatt_client_find_included_services_for_service=0x00014b0f ---defsym:gatt_client_get_mtu=0x00014b3f ---defsym:gatt_client_is_ready=0x00014be9 ---defsym:gatt_client_listen_for_characteristic_value_updates=0x00014bff ---defsym:gatt_client_prepare_write=0x00014c25 ---defsym:gatt_client_pts_suppress_mtu_exchange=0x00014c61 ---defsym:gatt_client_read_characteristic_descriptor=0x00014c6d ---defsym:gatt_client_read_characteristic_descriptor_using_descriptor_handle=0x00014c73 ---defsym:gatt_client_read_long_characteristic_descriptor=0x00014c9d ---defsym:gatt_client_read_long_characteristic_descriptor_using_descriptor_handle=0x00014ca5 ---defsym:gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x00014cab ---defsym:gatt_client_read_long_value_of_characteristic=0x00014cd9 ---defsym:gatt_client_read_long_value_of_characteristic_using_value_handle=0x00014ce1 ---defsym:gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset=0x00014ce7 ---defsym:gatt_client_read_multiple_characteristic_values=0x00014d15 ---defsym:gatt_client_read_value_of_characteristic=0x00014d45 ---defsym:gatt_client_read_value_of_characteristic_using_value_handle=0x00014d4b ---defsym:gatt_client_read_value_of_characteristics_by_uuid128=0x00014d79 ---defsym:gatt_client_read_value_of_characteristics_by_uuid16=0x00014dc5 ---defsym:gatt_client_register_handler=0x00014e11 ---defsym:gatt_client_reliable_write_long_value_of_characteristic=0x00014e1d ---defsym:gatt_client_signed_write_without_response=0x00015249 ---defsym:gatt_client_write_characteristic_descriptor=0x0001530d ---defsym:gatt_client_write_characteristic_descriptor_using_descriptor_handle=0x0001531b ---defsym:gatt_client_write_client_characteristic_configuration=0x00015355 ---defsym:gatt_client_write_long_characteristic_descriptor=0x000153a7 ---defsym:gatt_client_write_long_characteristic_descriptor_using_descriptor_handle=0x000153b9 ---defsym:gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x000153c9 ---defsym:gatt_client_write_long_value_of_characteristic=0x00015405 ---defsym:gatt_client_write_long_value_of_characteristic_with_offset=0x00015415 ---defsym:gatt_client_write_value_of_characteristic=0x00015451 ---defsym:gatt_client_write_value_of_characteristic_without_response=0x00015487 ---defsym:hci_add_event_handler=0x00018f89 ---defsym:hci_power_control=0x000197c5 ---defsym:hci_register_acl_packet_handler=0x000199c5 ---defsym:k_delayed_work_add_arg=0x0001ae91 ---defsym:k_delayed_work_cancel=0x0001ae95 ---defsym:k_delayed_work_init=0x0001aeab ---defsym:k_delayed_work_remaining_get=0x0001aec5 ---defsym:k_delayed_work_submit=0x0001aeeb ---defsym:k_fifo_is_empty=0x0001af07 ---defsym:k_sleep=0x0001af2f ---defsym:k_uptime_get=0x0001af3d ---defsym:k_uptime_get_32=0x0001af51 ---defsym:k_work_add_arg=0x0001af63 ---defsym:k_work_init=0x0001af67 ---defsym:k_work_submit=0x0001af81 ---defsym:kv_commit=0x0001b221 ---defsym:kv_get=0x0001b27d ---defsym:kv_init=0x0001b295 ---defsym:kv_put=0x0001b2e5 ---defsym:kv_remove=0x0001b35d ---defsym:kv_remove_all=0x0001b399 ---defsym:kv_value_append=0x0001b45d ---defsym:kv_value_modified=0x0001b4c1 ---defsym:kv_value_trunc=0x0001b4c5 ---defsym:kv_visit=0x0001b515 ---defsym:l2cap_can_send_fixed_channel_packet_now=0x0001b589 ---defsym:l2cap_init=0x0001b8e1 ---defsym:l2cap_max_le_mtu=0x0001b925 ---defsym:l2cap_register_fixed_channel=0x0001b9a9 ---defsym:l2cap_request_can_send_fix_channel_now_event=0x0001b9c5 ---defsym:l2cap_send_connectionless=0x0001bb6d ---defsym:l2cap_send_connectionless3=0x0001bbfd ---defsym:l2cap_send_signaling_le=0x0001bce9 ---defsym:le_adv_status_reset=0x0001bd25 ---defsym:mesh_platform_config=0x0002a695 ---defsym:mesh_set_dev_name=0x0002a925 ---defsym:mesh_setup=0x0002a931 ---defsym:net_buf_add_zeros=0x0002d99d ---defsym:net_buf_get=0x0002d9cb ---defsym:net_buf_put=0x0002d9db ---defsym:net_buf_ref=0x0002d9f9 ---defsym:net_buf_reserve=0x0002da09 ---defsym:net_buf_simple_add=0x0002da1b ---defsym:net_buf_simple_add_be16=0x0002da1f ---defsym:net_buf_simple_add_be32=0x0002da35 ---defsym:net_buf_simple_add_le16=0x0002da47 ---defsym:net_buf_simple_add_le32=0x0002da53 ---defsym:net_buf_simple_add_u8=0x0002da5f ---defsym:net_buf_simple_pull=0x0002dabb ---defsym:net_buf_simple_pull_be16=0x0002dac7 ---defsym:net_buf_simple_pull_be32=0x0002daef ---defsym:net_buf_simple_pull_le16=0x0002db17 ---defsym:net_buf_simple_pull_le32=0x0002db3f ---defsym:net_buf_simple_pull_u8=0x0002db67 ---defsym:net_buf_simple_push=0x0002db87 ---defsym:net_buf_simple_push_be16=0x0002dbab ---defsym:net_buf_simple_push_le16=0x0002dbdf ---defsym:net_buf_simple_push_u8=0x0002dc13 ---defsym:net_buf_slist_get=0x0002dc7d ---defsym:net_buf_slist_init=0x0002dca5 ---defsym:net_buf_slist_is_empty=0x0002dcad ---defsym:net_buf_slist_merge_slist=0x0002dcb9 ---defsym:net_buf_slist_peek_head=0x0002dcd5 ---defsym:net_buf_slist_peek_next=0x0002dcdf ---defsym:net_buf_slist_put=0x0002dce9 ---defsym:net_buf_slist_remove=0x0002dcf9 ---defsym:net_buf_unref=0x0002dd33 ---defsym:nibble_for_char=0x0002edcd ---defsym:npl_freertos_callout_init=0x0002f45d ---defsym:npl_freertos_callout_remaining_ticks=0x0002f499 ---defsym:npl_freertos_callout_reset=0x0002f4b1 ---defsym:npl_freertos_eventq_get=0x0002f54d ---defsym:npl_freertos_eventq_put=0x0002f5a1 ---defsym:npl_freertos_sem_init=0x0002f5f9 ---defsym:npl_freertos_sem_pend=0x0002f615 ---defsym:npl_freertos_sem_release=0x0002f669 ---defsym:npl_freertos_time_ms_to_ticks=0x0002f6b9 ---defsym:os_mbuf_adj=0x0002f7e7 ---defsym:os_mbuf_append=0x0002f87f ---defsym:os_mbuf_appendfrom=0x0002f917 ---defsym:os_mbuf_cmpf=0x0002f96d ---defsym:os_mbuf_cmpm=0x0002f9cd ---defsym:os_mbuf_concat=0x0002fa8b ---defsym:os_mbuf_copydata=0x0002fac7 ---defsym:os_mbuf_copyinto=0x0002fb1f ---defsym:os_mbuf_dup=0x0002fb9d ---defsym:os_mbuf_extend=0x0002fc0d ---defsym:os_mbuf_free=0x0002fc5d ---defsym:os_mbuf_free_chain=0x0002fc75 ---defsym:os_mbuf_get=0x0002fc8b ---defsym:os_mbuf_get_pkthdr=0x0002fcb7 ---defsym:os_mbuf_off=0x0002fce7 ---defsym:os_mbuf_pool_init=0x0002fd05 ---defsym:os_mbuf_prepend=0x0002fd0f ---defsym:os_mbuf_prepend_pullup=0x0002fd91 ---defsym:os_mbuf_pullup=0x0002fda9 ---defsym:os_mbuf_trim_front=0x0002fe75 ---defsym:os_mqueue_get=0x0002ff95 ---defsym:os_mqueue_init=0x0002ffbb ---defsym:os_mqueue_put=0x0002ffcd ---defsym:os_msys_count=0x00030005 ---defsym:os_msys_get=0x00030021 ---defsym:os_msys_get_pkthdr=0x00030039 ---defsym:os_msys_num_free=0x00030099 ---defsym:os_msys_register=0x000300b5 ---defsym:os_msys_reset=0x000300f1 ---defsym:platform_config=0x000303e5 ---defsym:platform_get_heap_status=0x00030411 ---defsym:platform_get_version=0x00030429 ---defsym:platform_printf=0x00030431 ---defsym:platform_raise_assertion=0x00030445 ---defsym:platform_reset=0x00030459 ---defsym:platform_set_evt_callback=0x0003048d ---defsym:platform_set_irq_callback=0x000304a1 ---defsym:platform_set_rf_clk_source=0x000304d9 ---defsym:platform_set_rf_init_data=0x000304e5 ---defsym:platform_set_rf_power_mapping=0x000304f1 ---defsym:platform_shutdown=0x000304fd ---defsym:platform_switch_app=0x00030501 ---defsym:printf_hexdump=0x000314c9 ---defsym:pvPortMalloc=0x00034699 ---defsym:pvTaskIncrementMutexHeldCount=0x0003477d ---defsym:pvTimerGetTimerID=0x00034795 ---defsym:pxPortInitialiseStack=0x000347c1 ---defsym:reverse_128=0x00034f35 ---defsym:reverse_24=0x00034f3b ---defsym:reverse_48=0x00034f41 ---defsym:reverse_56=0x00034f47 ---defsym:reverse_64=0x00034f4d ---defsym:reverse_bd_addr=0x00034f53 ---defsym:reverse_bytes=0x00034f59 ---defsym:settings_bytes_from_str=0x00037545 ---defsym:settings_str_from_bytes=0x00037557 ---defsym:sm_add_event_handler=0x000376ed ---defsym:sm_address_resolution_lookup=0x00037839 ---defsym:sm_authenticated=0x00037913 ---defsym:sm_authorization_decline=0x00037929 ---defsym:sm_authorization_grant=0x00037949 ---defsym:sm_authorization_state=0x00037969 ---defsym:sm_bonding_decline=0x00037985 ---defsym:sm_config=0x00037e7d ---defsym:sm_encryption_key_size=0x00037f7d ---defsym:sm_just_works_confirm=0x000388e9 ---defsym:sm_le_device_key=0x00038c19 ---defsym:sm_passkey_input=0x00038d09 ---defsym:sm_private_random_address_generation_get=0x000390d9 ---defsym:sm_private_random_address_generation_get_mode=0x000390e1 ---defsym:sm_private_random_address_generation_set_mode=0x000390ed ---defsym:sm_private_random_address_generation_set_update_period=0x00039115 ---defsym:sm_register_oob_data_callback=0x0003914d ---defsym:sm_request_pairing=0x00039159 ---defsym:sm_send_security_request=0x00039ce5 ---defsym:sm_set_accepted_stk_generation_methods=0x00039d0d ---defsym:sm_set_authentication_requirements=0x00039d19 ---defsym:sm_set_encryption_key_size_range=0x00039d25 ---defsym:sscanf_bd_addr=0x0003a0d5 ---defsym:sysSetPublicDeviceAddr=0x0003b4b1 ---defsym:uuid128_to_str=0x0003d691 ---defsym:uuid_add_bluetooth_prefix=0x0003d6e9 ---defsym:uuid_has_bluetooth_prefix=0x0003d709 ---defsym:vPortFree=0x0003d851 ---defsym:vQueueWaitForMessageRestricted=0x0003da21 ---defsym:vTaskDelay=0x0003da69 ---defsym:vTaskInternalSetTimeOutState=0x0003dab5 ---defsym:vTaskMissedYield=0x0003dac5 ---defsym:vTaskPlaceOnEventList=0x0003dad1 ---defsym:vTaskPlaceOnEventListRestricted=0x0003db09 ---defsym:vTaskPriorityDisinheritAfterTimeout=0x0003db49 ---defsym:vTaskStartScheduler=0x0003dbf5 ---defsym:vTaskStepTick=0x0003dc81 ---defsym:vTaskSuspendAll=0x0003dcb1 ---defsym:vTaskSwitchContext=0x0003dcc1 ---defsym:xPortStartScheduler=0x0003e145 ---defsym:xQueueCreateCountingSemaphore=0x0003e201 ---defsym:xQueueGenericCreate=0x0003e23d ---defsym:xQueueGenericCreateStatic=0x0003e289 ---defsym:xQueueGenericReset=0x0003e2f1 ---defsym:xQueueGenericSend=0x0003e37d ---defsym:xQueueGenericSendFromISR=0x0003e4e5 ---defsym:xQueueGiveFromISR=0x0003e5a5 ---defsym:xQueueIsQueueEmptyFromISR=0x0003e649 ---defsym:xQueueReceive=0x0003e66d ---defsym:xQueueReceiveFromISR=0x0003e799 ---defsym:xQueueSemaphoreTake=0x0003e82d ---defsym:xTaskCheckForTimeOut=0x0003e995 ---defsym:xTaskCreate=0x0003ea05 ---defsym:xTaskCreateStatic=0x0003ea61 ---defsym:xTaskGetSchedulerState=0x0003ead1 ---defsym:xTaskGetTickCount=0x0003eaed ---defsym:xTaskGetTickCountFromISR=0x0003eaf9 ---defsym:xTaskIncrementTick=0x0003eb09 ---defsym:xTaskPriorityDisinherit=0x0003ebd5 ---defsym:xTaskPriorityInherit=0x0003ec69 ---defsym:xTaskRemoveFromEventList=0x0003ecfd ---defsym:xTaskResumeAll=0x0003ed7d ---defsym:xTimerCreate=0x0003ee45 ---defsym:xTimerCreateTimerTask=0x0003ee79 ---defsym:xTimerGenericCommand=0x0003eee5 ---defsym:xTimerGetExpiryTime=0x0003ef55 diff --git a/bundles/typical/meta.json b/bundles/typical/ING9188xx/meta.json similarity index 78% rename from bundles/typical/meta.json rename to bundles/typical/ING9188xx/meta.json index dd86a9037..a9c3670d9 100644 --- a/bundles/typical/meta.json +++ b/bundles/typical/ING9188xx/meta.json @@ -20,18 +20,14 @@ "gatt_client_discover_primary_services", "gatt_client_discover_primary_services_by_uuid16", "gatt_client_discover_primary_services_by_uuid128", - "gatt_client_discover_characteristics_for_service", "gatt_client_find_included_services_for_service", + "gatt_client_discover_characteristics_for_service", "gatt_client_discover_characteristics_for_handle_range_by_uuid16", "gatt_client_discover_characteristics_for_handle_range_by_uuid128", - "gatt_client_discover_characteristics_for_service_by_uuid16", - "gatt_client_discover_characteristics_for_service_by_uuid128", "gatt_client_discover_characteristic_descriptors", - "gatt_client_read_value_of_characteristic", "gatt_client_read_value_of_characteristic_using_value_handle", "gatt_client_read_value_of_characteristics_by_uuid16", "gatt_client_read_value_of_characteristics_by_uuid128", - "gatt_client_read_long_value_of_characteristic", "gatt_client_read_long_value_of_characteristic_using_value_handle", "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset", "gatt_client_read_multiple_characteristic_values", @@ -41,25 +37,16 @@ "gatt_client_write_long_value_of_characteristic", "gatt_client_write_long_value_of_characteristic_with_offset", "gatt_client_reliable_write_long_value_of_characteristic", - "gatt_client_read_characteristic_descriptor", "gatt_client_read_characteristic_descriptor_using_descriptor_handle", - "gatt_client_read_long_characteristic_descriptor", "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle", "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset", - "gatt_client_write_characteristic_descriptor", "gatt_client_write_characteristic_descriptor_using_descriptor_handle", - "gatt_client_write_long_characteristic_descriptor", "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle", "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset", "gatt_client_write_client_characteristic_configuration", "gatt_client_prepare_write", "gatt_client_execute_write", "gatt_client_cancel_write", - "gatt_client_deserialize_service", - "gatt_client_deserialize_characteristic", - "gatt_client_deserialize_characteristic_descriptor", - "ble_gatts_find_svc", - "ble_gatts_find_chr", "gatt_client_get_mtu", "gatt_client_is_ready", "gatt_client_listen_for_characteristic_value_updates", @@ -67,8 +54,14 @@ "gatt_client_pts_suppress_mtu_exchange", "gap_set_random_device_address", "gap_disconnect", + "gap_disconnect_all", "gap_add_whitelist", "gap_remove_whitelist", + "gap_clear_white_lists", + "gap_read_rssi", + "gap_read_remote_used_features", + "gap_read_remote_info", + "gap_le_read_channel_map", "gap_read_phy", "gap_set_def_phy", "gap_set_phy", @@ -93,6 +86,19 @@ "gap_read_periodic_adv_list_size", "gap_ext_create_connection", "gap_create_connection_cancel", + "gap_set_connectionless_cte_tx_param", + "gap_set_connectionless_cte_tx_enable", + "gap_set_connectionless_iq_sampling_enable", + "gap_set_connection_cte_rx_param", + "gap_set_connection_cte_tx_param", + "gap_set_connection_cte_request_enable", + "gap_set_connection_cte_response_enable", + "gap_read_antenna_info", + "gap_set_periodic_adv_rx_enable", + "gap_periodic_adv_sync_transfer", + "gap_periodic_adv_set_info_transfer", + "gap_periodic_adv_sync_transfer_param", + "gap_default_periodic_adv_sync_transfer_param", "gap_set_host_channel_classification", "gap_update_connection_parameters", "gap_get_connection_parameter_range", @@ -102,6 +108,7 @@ "hci_add_event_handler", "hci_register_acl_packet_handler", "hci_power_control", + "platform_trace_raw", "platform_set_evt_callback", "platform_set_irq_callback", "platform_get_version", @@ -109,16 +116,25 @@ "platform_get_heap_status", "platform_reset", "platform_switch_app", - "platform_config", + "platform_write_persistent_reg", + "platform_read_persistent_reg", "platform_shutdown", + "platform_config", + "platform_read_info", + "platform_calibrate_32k", + "platform_hrng", + "platform_rand", + "platform_get_us_time", "platform_printf", "sysSetPublicDeviceAddr", "platform_set_rf_clk_source", "platform_set_rf_init_data", "platform_set_rf_power_mapping", + "platform_patch_rf_init_data", "ll_set_adv_coded_scheme", "ll_set_initiating_coded_scheme", "ll_hint_on_ce_len", + "ll_set_def_antenna", "big_endian_read_16", "big_endian_read_32", "big_endian_store_16", @@ -188,18 +204,43 @@ "sm_address_resolution_lookup", "sm_le_device_key", "kv_init", + "kv_remove_all", "kv_remove", "kv_put", "kv_get", "kv_value_modified", + "kv_commit", "kv_visit", + "btstack_memory_pool_create", + "btstack_memory_pool_get", + "btstack_memory_pool_free", "xQueueGenericSend", + "xQueuePeek", + "xQueuePeekFromISR", "xQueueReceive", + "uxQueueMessagesWaiting", + "uxQueueSpacesAvailable", + "vQueueDelete", "xQueueGenericSendFromISR", "xQueueGiveFromISR", + "xQueueReceiveFromISR", + "xQueueIsQueueEmptyFromISR", + "xQueueIsQueueFullFromISR", + "uxQueueMessagesWaitingFromISR", + "xQueueCreateMutex", + "xQueueCreateMutexStatic", + "xQueueCreateCountingSemaphore", + "xQueueCreateCountingSemaphoreStatic", "xQueueSemaphoreTake", + "xQueueTakeMutexRecursive", + "xQueueGiveMutexRecursive", "xQueueGenericCreate", "xQueueGenericCreateStatic", + "xQueueCreateSet", + "xQueueAddToSet", + "xQueueRemoveFromSet", + "xQueueSelectFromSet", + "xQueueSelectFromSetFromISR", "vQueueWaitForMessageRestricted", "xQueueGenericReset", "xTaskCreate", @@ -209,11 +250,13 @@ "vTaskSuspendAll", "xTaskResumeAll", "xTaskGetTickCount", + "xTaskGetTickCountFromISR", "xTaskIncrementTick", "vTaskPlaceOnEventList", "vTaskPlaceOnEventListRestricted", "xTaskRemoveFromEventList", "vTaskSwitchContext", + "xTaskGetCurrentTaskHandle", "xTaskCheckForTimeOut", "vTaskMissedYield", "xTaskGetSchedulerState", @@ -227,27 +270,32 @@ "xTimerCreate", "xTimerCreateStatic", "pvTimerGetTimerID", + "xTimerGetExpiryTime", "xTimerCreateTimerTask", "xTimerGenericCommand", "pxPortInitialiseStack", "pvPortMalloc", "vPortFree", - "xPortStartScheduler" + "xPortStartScheduler", + "vPortEnterCritical", + "vPortExitCritical", + "vPortSuppressTicksAndSleep", + "vPortValidateInterruptPriority" ], "app": { "base": 155648 }, "ram": { - "base": 536880208, - "size": 30560 + "base": 536870912, + "size": 32536 }, "rom": { "base": 16384, - "size": 132208 + "size": 135904 }, "version": [ + 1, 0, - 14, - 5 + 8 ] } \ No newline at end of file diff --git a/bundles/typical/ING9188xx/platform.bin b/bundles/typical/ING9188xx/platform.bin new file mode 100644 index 000000000..6ff29c799 Binary files /dev/null and b/bundles/typical/ING9188xx/platform.bin differ diff --git a/bundles/typical/ING9188xx/platform.hex b/bundles/typical/ING9188xx/platform.hex new file mode 100644 index 000000000..72cfdd3d9 --- /dev/null +++ b/bundles/typical/ING9188xx/platform.hex @@ -0,0 +1,8433 @@ +:020000040000FA +:10400000187F00205D4200007B420000CD40000090 +:104010007F42000081420000834200000000000057 +:10402000000000000000000000000000E940000067 +:1040300087420000000000002D410000C14E00003A +:1040400039D801006DD8010009DA01008D42000065 +:1040500015DA010021DA01002DDA01008D4200009D +:104060008D42000039DA01008D4200008D420000CF +:104070008D4200008D42000045DA010051DA010056 +:104080005DDA010069DA010075DA010081DA010008 +:104090008D4200008D4200008D4200008D420000E4 +:1040A0008D4200008D42000095DA01008D42000033 +:1040B0008D42000000600200DFF80CD000F0F4FB3D +:1040C00000480047C1CC0100187F00201EF0040FFB +:1040D0000CBFEFF30880EFF3098081694EF2E11223 +:1040E000C0F2010210470000224B19680868B0E8CE +:1040F000F00F80F30988BFF36F8F4FF0000080F35B +:1041000011884EF00D0E7047000000000648006850 +:10411000006880F3088862B661B6BFF34F8FBFF3C3 +:104120006F8F00DF00BF00BF08ED00E0EFF30980F4 +:10413000BFF36F8F0F4B1A6820E9F00F106008B5BE +:104140004FF0200080F31188BFF34F8FBFF36F8FC4 +:104150001EF0A4F84FF0000080F31188BDE808407D +:1041600019680868B0E8F00F80F30988BFF36F8F13 +:10417000704700BF24000020EFF305807047000067 +:104180002DE9FF5FEFF31080EFF31181EFF312825F +:10419000EFF313830FB447F6BC00C2F200001A49D4 +:1041A0000160EFF30881EFF30982EFF31483EFF37B +:1041B000038441608260C36004611448016841F077 +:1041C00001010160BFF34F8F30BFBFF36F8F104805 +:1041D00041688268C368046981F3088882F30988AA +:1041E00083F3148884F30388BFF34F8FBFF36F8F7B +:1041F0000FBC80F3108881F3118882F3128883F357 +:104200001388BDE8FF5F7047CB41000004030940FD +:10421000BC78002040BA704740BA704740BA704737 +:1042200040BA704740BA704740BA704740BA7047CA +:1042300040BA704740BA7047C0BA7047C0BA7047BA +:10424000C0BA7047C0BA7047C0BA7047C0BA7047AA +:10425000C0BA7047C0BA7047C0BA70470C4801680E +:1042600011F0010F07D04FF0010221EA02010160B5 +:1042700008480068004708480047FEE7FEE7FEE7F9 +:10428000FEE7FEE7FEE7FEE7FEE7FEE7FEE70000EB +:1042900064010440BC780020B94000002DE9F0031F +:1042A0005FEA930C67D000BF30F9024B31F9026B23 +:1042B00030F9025B31F9027B04FB06F805FB07F9D4 +:1042C0004FEA6848A8EB69487C4322F8028B6414E3 +:1042D000754304EB654422F8024B30F9024B31F987 +:1042E000026B30F9025B31F9027B04FB06F805FB37 +:1042F00007F94FEA6848A8EB69487C4322F8028B2B +:104300006414754304EB654422F8024B30F9024B08 +:1043100031F9026B30F9025B31F9027B04FB06F8DC +:1043200005FB07F94FEA6848A8EB69487C4322F887 +:10433000028B6414754304EB654422F8024B30F998 +:10434000024B31F9026B30F9025B31F9027B04FB5D +:1043500006F805FB07F94FEA68487C43A8EB694873 +:104360006414754322F8028B04EB654422F8024B77 +:10437000BCF1010C98D113F0030304BFBDE8F003B6 +:10438000704700BF30F9024B31F902CB30F9025BC4 +:1043900031F9026B04FB0CF77F1405FB06F874433C +:1043A000A7EB6847641422F8027B05FB0CFC04EBC6 +:1043B0006C4C22F802CB5B1EE4D1BDE8F0037047E1 +:1043C0002DE9F05F0546002092469B46884606464A +:1043D000814640241BE0284641464746224600F0DD +:1043E0009EF853465A46C01A914110D311461846BA +:1043F000224600F085F82D1A67EB01084F46224649 +:104400000120002100F07CF817EB00094E41201E2E +:10441000A4F10104DFDC484631462A464346BDE8A4 +:10442000F09F00000649074A0868504343F23902EA +:104430001044086040087047014908607047000058 +:104440006C0400206D4EC64110B5431A934209D248 +:104450008318881803E010F8011D03F8011D521E8F +:10446000F9D210BD40EA01039B0703D009E008C957 +:10447000121F08C0042AFAD203E011F8013B00F829 +:10448000013B521EF9D210BDD2B201E000F8012B5F +:10449000491EFBD270470022F6E710B513460A46C4 +:1044A00004461946FFF7F0FF204610BD421C10F8E5 +:1044B000011B0029FBD1801A704730B5044600204B +:1044C000034600E05B1C934203D2E05CCD5C401BE2 +:1044D000F8D030BD30B50B46014600202022012423 +:1044E00009E021FA02F59D4205D303FA02F5491BC2 +:1044F00004FA02F52844151EA2F10102F1DC30BDD8 +:10450000202A04DB203A00FA02F100207047914093 +:10451000C2F1200320FA03F3194390407047202A88 +:1045200004DB203A21FA02F00021704721FA02F35D +:10453000D040C2F1200291400843194670472DE94E +:10454000FE4F804681EA0300C00F0C46009021F028 +:10455000004123F00045B8EB0200A94105D24046D6 +:10456000214690461C460B46024623F0004010436D +:1045700004D14046214603B0BDE8F08F270DC7F3B4 +:104580000A00C3F30A510290401A0190402866DAEB +:10459000C3F3130040F4801B0098924620B100231F +:1045A000D2EB030A63EB0B0B01985946C0F14002B2 +:1045B0005046FFF7A5FF06460D4650465946019A5C +:1045C00000F084F910EB08006141002487EA1152E1 +:1045D00084EAE7731A433BD0009A3AB3019A012A5E +:1045E0004FEA075210DC001B61EB02014FF0004262 +:1045F00002EA0752CDE90042001C41F58011324623 +:104600002B4600F082F9B6E7001B61EB0201001CAB +:1046100041F5801300185B412018A2F5001747EB05 +:10462000030140EAD570B6196D4111E06D084FEAFB +:10463000360645EAC0754FEA0752001B61EB0201DE +:10464000001C41F5801149084FEA30000019514122 +:1046500032462B4603B0BDE8F04F00F049B9009850 +:10466000012240000023D0EB020263EBE0730098CC +:1046700021464FEAE074B8EB000061EB0401E9E782 +:1046800083F000435BE781F0004158E72DE9FE4FDE +:1046900081EA030404F0004421F0004100944FF04B +:1046A000000B23F0004350EA010402D052EA030455 +:1046B00004D10020014603B0BDE8F08FC3F30A54D3 +:1046C000C1F30A552C44A4F2F3340194A0FB025424 +:1046D000C1F3130141F48011C3F3130343F48013B6 +:1046E00001FB024400FB034E840A970A44EA81540A +:1046F00047EA8357A4FB076802958D0A05FB0785E7 +:104700004FEA932C04FB0C542705029D4FEA0658F0 +:1047100047EA1637B5EB08056EEB070C870E920ECD +:1047200047EA811742EA8312A7FB0201B6EB0B01AD +:1047300064EB00042B0D43EA0C335E1844EB1C5071 +:10474000DA465146E7FB0201C5F313044FEA0B3387 +:1047500043EA14534FEA0432019C43EA0603A4F1EE +:104760000C040294009CCDE900B400F0CEF8A2E75E +:104770002DE9F04D81EA030404F0004B21F00045DF +:1047800014464FF0000A23F0004150EA050220D001 +:1047900054EA01021DD0C5F30A570246C5F31303BC +:1047A000C1F31300C1F30A5640F4801543F480139B +:1047B000A7EB0608101BD64608F2FD3873EB050080 +:1047C00002D308F1010801E092185B41B8F1000F33 +:1047D00003DA00200146BDE8F08D00204FF480117F +:1047E000064684460EE0171B73EB050705D3121B24 +:1047F00063EB050306434CEA010C49084FEA30001D +:1048000092185B4150EA0107EDD152EA030012D041 +:1048100082EA040083EA0501084303D100224FF035 +:10482000004308E0101BAB4102D20122002302E04A +:104830006FF0010253101AEB06004CEB085110EB1D +:104840000A0041EB0B01BDE8F04D00F051B8C1F397 +:104850000A52C1F3130140F2FF3341F480119A422E +:1048600002DA00200146704740F233439A42A2F236 +:10487000334202DC5242FFF752BEFFF741BE000056 +:1048800030B5002904DB4FF00044404264EB0101E5 +:10489000002B04DB4FF00044524264EB03039942C7 +:1048A00008BF904230BD0000064C074D06E0E068AE +:1048B00040F0010394E8070098471034AC42F6D367 +:1048C000FFF7FEFB4C4E02006C4E0200202A06DB76 +:1048D000CB17203A41FA02F043EAE07306E041FACE +:1048E00002F3D040C2F120029140084319467047BC +:1048F00010B5002B08DA401C41F1000192185B4111 +:104900001A4301D120F0010010BD2DE9F04D92466F +:104910009B4611B1B1FA81F202E0B0FA80F2203286 +:104920009046FFF7EDFD04460F4640EA0A0041EAD3 +:104930000B0153465A46084303D120463946BDE889 +:10494000F08D114653EA010015D0C8F140025046DF +:10495000FFF7E5FD05460E46504659464246FFF72D +:10496000CFFD084301D0012000E00020054346EAC6 +:10497000E0762C4337430A984FEA4453A0EB0800F3 +:104980004FEAD4240A304FF0000244EA47544FEA79 +:10499000D72502D500200146D1E70105101969414C +:1049A000DDE9084500196941BDE8F04DA0E770B5A3 +:1049B00001EB020410F8015B15F0070301D110F8B8 +:1049C000013B2A1106D110F8012B03E010F8016B0E +:1049D00001F8016B5B1EF9D12B0705D40023521E91 +:1049E0000FD401F8013BFAE710F8013B02F1020293 +:1049F000A1EB030303E013F8015B01F8015B521E16 +:104A0000F9D5A142D6D3002070BD000070B50B4986 +:104A1000D1E9000105F0FCFD002001F099FE4FF006 +:104A2000FF34074D02E000BF01F0B0FE21462868C8 +:104A30001EF070F90028F7D170BD0000E8340200C4 +:104A4000040000200348006810F0FF0F01D11DF0A2 +:104A5000A7B9704704ED00E00348006810F0FF0FAD +:104A600001D11DF0BDB9704704ED00E010B50C4652 +:104A7000091D8AB2FB2A00D9FB22014644F2902389 +:104A8000024806F0C5F8E0B210BD0000103B02007D +:104A900010B5C368D9B280290FD98468E06800B125 +:104AA00001204F2213A100F09FFFE16819B1206996 +:104AB000BDE81040084772B6FEE70446008A616907 +:104AC00082B2D8B2124B1B68984706F0B9F9002899 +:104AD0000FD1E068022806D004280AD1A069BDE8F9 +:104AE000104006F0A7B9A08BA169BDE8104006F000 +:104AF0009FB910BD4863695F696E7465726E616CC1 +:104B00005F7472616E73706F72742E6300000000C8 +:104B1000F00100201FB5416899B1052911D00A297B +:104B20000ED10A4C1ECC8DE81E00C168019141696E +:104B30000291008AADF80C001021684605F0C4FF10 +:104B40001FBD04B0BDE81040FFF7A2BFD03B02007C +:104B50002DE9FE4F044606F09DF908B1002000E063 +:104B60000220494E00278346B8464FF00109A6F1BE +:104B7000EC0A7CBB5920BDE8FE8FE38F03B351B331 +:104B8000431AA08E834200DC184685B202EBC200B5 +:104B900000EB02120AEB82000144208E7080B4F810 +:104BA0004A0040B3358004208DE82300284482B2B7 +:104BB0005946608D334606F063FB47B2D7BB25E00C +:104BC00032496FF0050081F8018081F8009081F88A +:104BD0000380D0E724E0FFE7A18E8B1E984201DD21 +:104BE000891E00E001468DB202EBC20000EB02110B +:104BF0000AEB8101D1E7A81C308094F8430004EB54 +:104C00004000B0F84600B0800620CDE7B4F84A0076 +:104C100001222844A4F84A001146204600F054F826 +:104C200094F84320B4F84A1004EB4200B0F8460070 +:104C30008142A2D394F84300B4F84A1004EB400038 +:104C4000B0F8462091421CD14334A4F80780A0F864 +:104C50004680207800EBC00101EB00110AEB8100D7 +:104C60006421FFF718FC21786078433C814204D12D +:104C7000FF2043346070207003E029EA010084F8CB +:104C80004300384677E70000606F002010010020E5 +:104C900010B590F820200B2A11D090F8451001296A +:104CA00001D0002010BD0749002301244B700C7077 +:104CB000CB700A2A03D1C08D002106F0CFFF01205E +:104CC00010BD00001001002000290ED022B1C28FBB +:104CD0008A420BD3511A0AE0B0F840208A4201D32D +:104CE000511A00E00021A0F8401070470021C18750 +:104CF000704730B500290FD000234FF6FF7462B122 +:104D0000C28F1144B1FBF4F504FB1514944213D87F +:104D1000C387012180F8451030BDB0F84020114410 +:104D2000B1FBF4F504FB1514944202D8A0F840300E +:104D300030BDA0F8401030BDC18730BD2DE9F04135 +:104D40001E4613460D4602284AD1B5F84000254CB0 +:104D50004FF00108002730B322462178224892F90B +:104D60000120012910442DD032461946FFF76CFB73 +:104D7000607830446070B5F84000401EA5F84000EF +:104D800094F90100E178884227D183B26E68E98DF9 +:104D9000154A0B20B047677084F80080E7702846FA +:104DA000FFF776FF0BE0677084F80080E77095F8F6 +:104DB00020000A2803D1E88D002106F04FFF0120D2 +:104DC000BDE8F0811978E1702770B21E991CFFF7D9 +:104DD0003BFB60783044801ECCE72846FFF758FF45 +:104DE0000020EDE7100100205B70002000F01F02A2 +:104DF0000121914040094FF0E02202EB8000C0F811 +:104E00008012704700F01F020121914040094FF0CD +:104E1000E02202EB8000C0F88011704700F01F0212 +:104E20000121914040094FF0E02202EB8000C0F8E0 +:104E30000011704700F01F020121914040094FF01E +:104E4000E02202EB8000C0F8001170474907090E0C +:104E5000002803DA00F00F00024A00E0024A815401 +:104E60007047000014ED00E000E400E0024A114049 +:104E7000014302480160704780FFFF1F08ED00E01A +:104E800000B589B019F080FD816803910021CDE95A +:104E9000011004480B464A1E694600681DF0BEFB1F +:104EA00009B000BD080000200148006870470000FC +:104EB0006801044001490872704700007401002035 +:104EC00010B5202080F31188BFF34F8FBFF36F8F91 +:104ED0001EF0B8F818B104494FF080500860002067 +:104EE00080F3118810BD000004ED00E00FB4054B05 +:104EF00010B503A9044A029800F0EAF810BC5DF866 +:104F000014FB000099760000700400200FB4084BD9 +:104F100010B504A902AA039800F0DAF8044602A921 +:104F2000002000F078FC204610BC5DF814FB000067 +:104F300017580000014B024A00F0CAB899760000E9 +:104F40007004002070477047704770477047704783 +:104F500070477047704702E008C8121F08C1002A56 +:104F6000FAD170477047002001E001C1121F002AEA +:104F7000FBD170472DE9FF5FDDE90220010DDDF86F +:104F800038B0024310D10F9801244CA2012808D058 +:104F9000002100980F9BC0E90021C0E90243BDE851 +:104FA000FF9F6FEA0B01F4E7A1F2FF3144F61050C6 +:104FB00041430D140F9801280ED0A5EB0B00401CA7 +:104FC0004FF000043E4EDFF8FC90B0F1000AA0461E +:104FD00005DACAF1000717E0CBF10000F0E7074659 +:104FE00012E0F80707D02246334640464946FFF70D +:104FF0004DFB804689462246334610461946FFF748 +:1050000045FB04460E467F10002FEAD1DDE9020180 +:10501000BAF1000F42464B4602DAFFF737FB01E0D8 +:10502000FFF7A6FB04460E460022274BFFF728FC9D +:1050300003D84FF0FF30014607E00022234B204603 +:105040003146FFF77CFAFFF702FC102409E0002C40 +:105050000ADB0A220023FFF7B3F9019B30321A550D +:10506000641E50EA0102F2D1641C019AC4F11103DA +:1050700014440F9A012A09D00122084301D15B454B +:105080000FDD4FF0000205F101050DE0084303D1EB +:10509000A3EB0B056D1E09E000204FF0110B0F90E4 +:1050A00088E701DA00226D1E002A83D000980F994C +:1050B000C0E90231C0E9004571E70000300000009E +:1050C000000024400000F03F0000F0430000E03FFB +:1050D0002DE9FF4F95B09B4689460646002512E212 +:1050E000252878D10024761CF94A27460121059409 +:1050F0003378203B01FA03F0104202D00443761CBF +:10510000F6E730782A2811D06FF02F033078A0F11D +:105110003002092A16D8059A44F0020402EB8202F2 +:1051200003EB42021044761C0590EFE759F8042B7C +:105130000592002A03DA504244F40054059044F0EA +:105140000204761C30782E2816D116F8010F44F090 +:1051500004042A280DD06FF02F023078A0F130031C +:10516000092B09D807EB870302EB4303C718761C0A +:10517000F3E759F8047B761C30786C280FD006DCF6 +:105180004C2817D068280DD06A2814D104E0742860 +:1051900010D07A280FD10DE044F400140AE044F452 +:1051A000801401E044F440147278824202D1761CEB +:1051B00004F58014761C307866280BD013DC582850 +:1051C00077D009DC002875D04528F6D04628F4D0E1 +:1051D00047281AD19FE118E0632835D0642879D098 +:1051E000652812D197E1702873D008DC6728F1D0C8 +:1051F00069286FD06E280DD06F2806D1B5E07328CE +:105200002CD0752875D0782874D05A4617999047B5 +:105210006D1C76E1C4F30250022809D003280DD09A +:10522000D9F8001004280DD00D6009F1040968E1D7 +:10523000D9F80010EA17C1E90052F6E7D9F80010D2 +:105240000D80F2E70D70F0E719F8041B8DF80010DF +:1052500000208DF80100EA46012003E059F804AB74 +:105260004FF0FF3061074FF0000102D40DE008F16C +:1052700001018846B9420FDA8045F8DB1AF80810B8 +:105280000029F4D108E008F1010188468142FADBE7 +:105290001AF808100029F6D105985B46A0EB08071C +:1052A00021463846179A00F09EFA284400EB08057C +:1052B00007E04DE02BE10DE01AF8010B5A46179973 +:1052C0009047B8F10108F7D25B4621463846179A55 +:1052D00014E142E00A220092C4F302524FF0000AA5 +:1052E000022A08D059F804CB032A4FEAEC710AD0FD +:1052F0000DE029E02AE009F1070121F00702F2E8B8 +:1053000002C1914609E00FFA8CFC4FEAEC71042AC5 +:1053100003D14FFA8CFC4FEAEC71002907DA0A46F8 +:105320000021DCF1000C61EB02012D2202E02205DC +:1053300004D52B228DF80420012203E0E20701D0DE +:105340002022F7E7904653E00A2102E010220DE008 +:1053500010214FF0000A00910BE010224FF0000ADC +:1053600044F004040827009203E008224FF0000AEA +:105370000092C4F30252022A05D059F804CB00214E +:10538000032A08D009E009F1070121F00702F2E839 +:1053900002C1914605E01FFA8CFC042A01D10CF0F1 +:1053A000FF0C4FF00008220722D5702827D0009B61 +:1053B00083F0100353EA0A0309D15CEA010206D024 +:1053C00030228DF804208DF8050002229046009BC3 +:1053D00083F0080353EA0A030AD15CEA010201D10F +:1053E000620705D530228DF804204FF001087F1E9A +:1053F000582809D037A003900EA8029013E040224D +:105400008DF804200122E1E737A0F4E75346604617 +:10541000009AFEF7D5FF84460398825C0298A0F1BB +:105420000100029002705CEA0100EFD1029806A927 +:10543000A1EB000000F1200A600702D524F48034BB +:1054400000E00127574502DDA7EB0A0000E000203D +:1054500000EB0A01009005984144A0EB0100059083 +:10546000E00306D45B462146179A059800F0BBF985 +:105470000544002706E001A85A46C05D17999047E9 +:105480006D1C7F1C4745F6DBE0030CD55B462146CF +:10549000179A059800F0A7F9054404E030205A4611 +:1054A000179990476D1C0099481E00900029F5DC63 +:1054B00008E0029802995A460078491C029117990F +:1054C00090476D1CBAF10001AAF1010AF1DC6BE111 +:1054D00009280100303132333435363738396162CA +:1054E000636465660000000030313233343536378E +:1054F00038394142434445460000000000F060F95D +:10550000054406F10106307800287FF4E9AD19B0B2 +:105510002846BDE8F08F620700D4062709F107028C +:1055200022F0070CFCE80223E14603F000485FEAA2 +:10553000080C02D00FF27C2C0DE05FEA045C02D56F +:105540000FF2742C07E05FEAC47C02D00FF26C2CDF +:1055500001E0AFF2700C4FF0FF3823F00043CDF8BC +:1055600050C065280CD006DC452809D046281DD03F +:1055700047283ED13EE0662818D0672839D139E067 +:105580000021112F01DB112000E0781CCDE9000182 +:1055900006A90EA8FFF7EEFCDDE90F010E9A0391B4 +:1055A0000021009207F1010A04914EE04FF0004003 +:1055B0000097CDE9011006A90EA8FFF7DBFCDDE995 +:1055C0000F0203920E9B11990022DDF80CA00093AC +:1055D000049219B907F1010100EB010AB7EB0A00C7 +:1055E00004D4C0F1FF3007F1010A0490AAEB0700D0 +:1055F000019046E0012F00DA01270021112F01DD83 +:10560000112000E03846CDE9000106A90EA8FFF7F9 +:10561000B1FCDDE90F010E9A039100210491009283 +:10562000BA4621070CD40399514500DA8A46BAF1EB +:10563000010F05DD009AAAF10101515C302908D063 +:10564000B84202DA10F1040F06DA0121CDE90110A7 +:1056500017E0AAF10101E9E7002805DC04990144FB +:105660000491AAEB000102E0411C514500DD8A468D +:105670000499A0EB010000F1010001904FF00040FF +:105680000290200704D40198504501DBCDF8048036 +:1056900000208DF84F0002980DF14F07B0F1004F38 +:1056A00025D02B200E9002984FF0020800280CDA2B +:1056B000404202902D200E9007E00A210298FEF74A +:1056C00009FF3031029007F8011DB8F10001A8F17F +:1056D0000108F2DC02980028EFD1791E0E980870BC +:1056E000307800F0200040F0450007F8020D12A8C5 +:1056F000A0EB070000F107081498007800B1012022 +:1057000000EB0A01019801EBE07105984144A0EB20 +:105710000100A0F101000590E00306D45B4621469C +:10572000179A059800F05FF805441498007820B1A6 +:105730005A461799904705F10105E00323D55B46CA +:105740002146179A059800F04EF805441BE004988E +:10575000002807DBDDE90301884203DD0098405C97 +:10576000179901E0179930205A46904704986D1C0C +:10577000401C04900198401E019004D12E205A46EE +:10578000179990476D1CBAF10001AAF1010ADEDCFD +:1057900005E017F8010B5A46179990476D1CB8F1B0 +:1057A0000001A8F10108F4DC5B462146179A059830 +:1057B000A4E600002D0000002B00000020000000E7 +:1057C0002DE9F041044600251E461746880405D4FD +:1057D00006E039462020B04705F10105641EF8D5E2 +:1057E0002846BDE8F0812DE9F041044600251E461B +:1057F0009046C80301D5302700E02027880405D54E +:1058000006E041463846B04705F10105641EF8D56B +:105810002846BDE8F0810A68531C0B601070704781 +:105820002DE9F05F064600880B46C0F30B00834667 +:1058300005F09CF80400707875884FEA10170AD0BC +:1058400005F10408984509D02A1DBDE8F05F194606 +:105850003548FFF77CBB594634A01EE001F048F9FB +:1058600007F00301002740F2031A6063012903D007 +:1058700002292CD03CA010E0A08F60B14119B1F5F5 +:10588000827F0ED328485B4652465C30FFF75FFBB1 +:10589000A787BDE8F09F594643A0BDE8F05FFFF73A +:1058A00056BBA16B2A4608440E30311DFEF7CCFDD5 +:1058B000A08F284481B2A187E08F083081422FD386 +:1058C000A06B0E3005F0DAF8E787A78728E0A08FF5 +:1058D00028B115485946B030FFF739FBA787B7887C +:1058E000381D8146854205D31FFA88F1304605F000 +:1058F000C5F815E0FF2D07D95B465246291DBDE8C6 +:10590000F05F3848FFF723BBA06B2A1D0E303146ED +:10591000FEF79AFDA4F83C80E787A16BA1F81090F0 +:10592000BDE8F05F05F0DABB303802006863692E2D +:10593000633A2061636C5F68616E646C65722063BA +:10594000616C6C65642077697468206E6F6E2D726F +:105950006567697374657265642068616E646C65FF +:1059600020257521000000006863692E633A2061DC +:10597000636C5F68616E646C65722063616C6C65FA +:1059800064207769746820696E76616C6964207040 +:1059900061636B657420626F756E646172792066F5 +:1059A0006C6167732025750041434C20436F6E7412 +:1059B00020467261676D656E7420627574206E6F2B +:1059C00020666972737420667261676D656E7420FB +:1059D000666F722068616E646C65203078253032A5 +:1059E000780000003439020010B50B46002803D1BE +:1059F0001146184607F0EEFB10BD70471CB506496E +:105A00008C68002C07D0002100910191B0F80601AC +:105A10000B460322A0471CBDA400002070B50D4614 +:105A2000002824D1082D22D2114C4FF4947654F83A +:105A3000250020B9304600F05DFF44F82500040041 +:105A400015D031462046FEF726FDA4F80651172052 +:105A5000A4F8000106F0EAFDA4F80201FB2802D92F +:105A6000FB20A4F802014FF0FF30A4F8080170BD3C +:105A700084640020F8B51646028A069FA2EB010254 +:105A800094B2C288D2050AD50A4A55683DB100933E +:105A900000890A46014633463846A847F8BD9C426D +:105AA00000D91C464069224601443046FEF7CCFC32 +:105AB0002046F8BDA4000020042105F055BF0421B4 +:105AC00006F094BE024908600421024806F006BEB2 +:105AD000B0000020396000000249486004210248FB +:105AE00006F0FCBDB000002039600000042105F084 +:105AF0003BBF042106F07ABE00B58BB0D0F824017C +:105B0000009028E0684600F033FABDF8081000293C +:105B100023D0BDF8062012A0FFF714FABDF8060046 +:105B20008005039808D506A919F034F806A81CF0DA +:105B300055F8014614A001E0018814A0FFF702FA0D +:105B4000BDF8101013A0FFF7FDF9BDF8101005986F +:105B500017F0A4F800980028D4D10BB000BD0000C5 +:105B600048616E646C653A203078253034782C209A +:105B7000666C6167733A203078253034782C207554 +:105B80007569643A200000002573000025303478E0 +:105B9000000000002C2076616C75655F6C656E3AC4 +:105BA0002025752C2076616C75653A200000000078 +:105BB000064A30B41468002C06D00B46A4460246B0 +:105BC000002130BC0420604730BC7047B800002082 +:105BD0007CB51446042819D120783E283FD016DC25 +:105BE000052846D0082801D030280FD1B2F803503C +:105BF000284600F0BDF8040008D0284619F0D6FC6D +:105C000004F8FD0F284619F02AFA60707CBDD728E9 +:105C10004CD0D8283BD0DA28F8D1608800F0A8F81A +:105C20000500F3D0B5F8060104F0A0FE0600EDD0A3 +:105C30002079317A8842E9D16946601D18F0B9FFB0 +:105C4000062231466846FEF738FC0028DED1E07AAD +:105C500085F8FF00B5F80601FFF74BFF7CBDA07883 +:105C6000012801D00A28F9D19188D078FFF7D6FE13 +:105C70007CBDB2F80340204600F07AF80028F7D047 +:105C800000F03AFE0F49002041F824007CBD6088F6 +:105C900000F06EF80500F9D0B4F80B0001B2A5F8D9 +:105CA000081109A0FFF74FF9284608E0508800F0D6 +:105CB0005FF80028EAD04FF0FF31A0F8081100F09B +:105CC0009BFA7CBD84640020534D5F4556454E547D +:105CD0005F4944454E544954595F5245534F4C56C1 +:105CE000494E475F53554343454544454420696405 +:105CF000202575003EB50C468DF8080000208DF873 +:105D0000092000900190022302AA0421204606F0F7 +:105D1000C3FF3EBD7FB50DF1200C1446BCE8640006 +:105D20008DF80800ADF80930ADF80B20ADF80D1076 +:105D3000CDE90056072302AA0421204606F0ACFF55 +:105D40007FBD70B515000C4603D0D0F8240120604B +:105D500008E0002070BD204600F00AF92089A84222 +:105D600003D020680028F6D170BD012070BD00006E +:105D7000082803D2024951F82000704700207047DC +:105D8000846400202DE9FF410C4616460978002561 +:105D9000B0F800211F4604F1050C0E2976D00CDC6A +:105DA000A1F1020EBEF10B0F15D2DFE80EF02114A7 +:105DB0003814401450146014660018296FD006DCA3 +:105DC000102970D012297ED0162904D181E05229E1 +:105DD00068D0D22966D048A0FFF7B4F8A6F109012F +:105DE00004F1090016F05AFF04B02846BDE8F0811E +:105DF000B4F80110B0F802218A4202D9A0F80011CB +:105E000001E0A0F80021032500F580703D700188B5 +:105E1000A7F801100188C088FEF728FEE4E7641C9B +:105E2000394663880093238803F024FB0DE0E31DCB +:105E3000641CF61F3946B5B2A7886688CDE90253BF +:105E4000CDE90067238803F07DFA0546CCE7072EED +:105E500001D8022100E01021641C6388CDE90031E3 +:105E6000CDF808C02388394603F0E0FCEDE7394659 +:105E7000B4F8013003F0ECFDE7E7641C39466388B1 +:105E80000093238803F0CCFBDFE7FFE71946761E7B +:105E9000641CC6F34F03009403F070FDD5E71EE0C9 +:105EA00001E010E021E0072E01D8022100E01021DE +:105EB000641C6388CDE90031CDF808C023883946D9 +:105EC00003F016FCC1E700923246214603F046FE7D +:105ED000BBE700923246214603F044FBB5E700924F +:105EE0003246214603F0FCF9AFE7009232462146E4 +:105EF00003F004FE78E70000556E68616E646C651F +:105F0000642041545420436F6D6D616E643A2025C6 +:105F10003032582C20444154413A20001CB50B4BE0 +:105F20001C68002C10D0B6238DF8003005238DF8A6 +:105F300001308DF80200ADF80310ADF805200723FD +:105F400000216A460420A0471CBD0000B8000020C4 +:105F500010B580B2FFF70CFF002808D0B0F80A2176 +:105F6000B0F80611BDE810409120FFF7D7BF10BD73 +:105F700010B501680A88828072B14B88C3808C8812 +:105F8000048101F10604C4609B050CD5A2F116033F +:105F9000038201F116030BE00021C1800181C16081 +:105FA0000182416106E0A2F10803038201F10803C6 +:105FB00011444361016010BD70B5044600890D466F +:105FC00000281BD0022A08D0E08880050BD51022BB +:105FD000E068FEF772FA80B111E009882046BDE85A +:105FE000704000F00EB8084605F03EFB002805D0D2 +:105FF000E168A8890988884201D1012070BD00208C +:1060000070BD70B5044600890D46002810D0E088A8 +:106010008005E06808D505F027FB002808D0E06877 +:106020008089A84203D004E00088884201D1012081 +:1060300070BD002070BD00002DE9F041194C0646EE +:106040001F4615468846042809D0082E28D12878EE +:10605000C00720D0D4F800C01FE03046E0472878C1 +:1060600078281DD1D4F804C0BCF1000F08D03B46FD +:106070002A4641463046E04704F070FB00280FD026 +:106080002468002C0CD03B462A4641463046A446A4 +:10609000BDE8F0416047D4F804C0BCF1000FDCD18A +:1060A000BDE8F081B00000202DE9F0410F46154613 +:1060B000044601461E46127828A0FEF744FF042C31 +:1060C0000CD0082C48D13846FFF752FE040043D0CC +:1060D00029781E2909D0522918D01EE0287878285E +:1060E0003AD1BDE8F04100F009B9B4F80A01A0B115 +:1060F00004F5867000F0FEFC04F583740020A2888D +:10610000A0802188BDE8F041FFF708BF324629464C +:10611000BDE8F0410023FFF735BEFB2E06D932461D +:10612000BDE8F041FB231A48FEF70DBF22782AB1E3 +:10613000BDE8F04116485030FEF705BF0120207041 +:10614000A4F8046132462946A01CFEF77DF92046DA +:10615000BDE8F04100F050B8BDE8F0816174745FB3 +:106160007061636B65745F68616E646C65723A2020 +:1061700074797065203078253032782C2070616316 +:106180006B65745B305D203078253032780000001C +:106190007C36020010B5B0F80001029CC01E80B22F +:1061A0001970A3F80120844200D8204610BD1FB505 +:1061B00014468DF80800069AADF80930ADF80B20AA +:1061C000ADF80D10002000900190072302AA0421D1 +:1061D000204606F061FD1FBD3EB50C468DF8080057 +:1061E000ADF80920002000900190032302AA0421A9 +:1061F000204606F051FD3EBD2DE9FF4104460178E1 +:1062000028A0FEF7A0FE207801282DD1A078D22862 +:1062100008D003202070B4F8060104B0BDE8F041B6 +:10622000FFF767BC19F0E4F80027E0B1B4F8040107 +:106230000F2818D3B4F8060119F086FD002813D1F1 +:10624000B4F9080106F0D2FE05000CD0B4F8041130 +:10625000A4F10A000E58696C324615A0FEF773FED1 +:10626000686CB04202D92770BDE8FF81022020701F +:10627000B4F80411A01F0844082116F00FFDB4F86B +:1062800003201849601DCDE90006CDE90214B4F8D9 +:106290000401A1780F3883B205F1340019F0B2F887 +:1062A000E2E700006174745F72756E3A2025640045 +:1062B000415454205369676E656420577269746550 +:1062C0002C20444220636F756E7465722025752CF6 +:1062D000207061636B657420636F756E74657220E6 +:1062E000257500005D650000FFF700BC00B5FFF7F5 +:1062F0003FFD002801D0B0F8000100BD2DE9F843B2 +:106300000025144F144EA84657F82540E4B12078D4 +:1063100003280BD1204600F0A7F838B1607898B177 +:10632000B4F80601BDE8F843FFF7E3BB607858B165 +:106330000AA084F8018000680090346824B1022328 +:1063400000216A460420A0476D1C082DDCD3BDE85F +:10635000F883000084640020B8000020B70000002B +:106360002DE9FE431F4616460D468046FFF700FD09 +:10637000040005D0B4F80A0120B19020BDE8FE83E6 +:106380005920FBE74046FFF7B1FB88B102AB2A4634 +:106390001D2120460097FFF7FDFECDE90060032395 +:1063A00002AA0421404606F077FC060002D014E061 +:1063B0005720E3E7A4F80A5104F5867042460849DD +:1063C000044600F0CDFB47F2305240F282412046B5 +:1063D00000F0AEFB204600F07DFB3046CEE700002B +:1063E000515F000070B505460B480A4C0E464460EC +:1063F00004F098F908480830446018F02DFD07486B +:10640000FFF76AFB284600F09DF83046BDE8704073 +:1064100000F09EB8D15B0000BC000020A960000025 +:106420002DE9FE431E4615460F468046FFF7A0FCA9 +:10643000040014D04046FFF759FB90B102AB3A4636 +:106440001B2120460096FFF7A5FECDE9005003234F +:1064500002AA0421404606F01FFCBDE8FE83592035 +:10646000FBE75720F9E700002DE9FC41244D002708 +:1064700007700446B0F804212B46811CFFF782FC0C +:10648000064604280FD3287801280CD1287908283B +:1064900009D194F8FE0030B1B4F8060118F006FEF8 +:1064A00078B1012811D086B100970197B4F80601A0 +:1064B00033462A46042106F0EFFB2878032807D04C +:1064C0001CE0B4F8060119F0D3FF0020BDE8FC8100 +:1064D0000C4AB4F80601B4F80011146874B1B5227E +:1064E0008DF8002004228DF80120ADF80410ADF8DD +:1064F0000200062300216A460420A0470120E5E7A8 +:10650000606F0020B800002001490860704700005B +:10651000B800002010B50246FFF72AFC002806D07C +:1065200001214170BDE810401046FFF7E2BA10BDEE +:1065300010B50C46FFF71CFC002801D0C0F8244120 +:1065400010BD00000149486070470000A400002011 +:106550000149886070470000A40000207CB5044613 +:1065600000780A4602280ED16946104618F01EFB34 +:10657000B4F80411A01F014408226846FDF79DFFEE +:1065800010B1002020707CBDB4F80411A4F10A0001 +:106590000E58B4F9080106F029FD050001D00120CC +:1065A00000E00020E62207A1FFF71EFA45B1761CA5 +:1065B0006E6403202070B4F80601FFF79AFA7CBDE0 +:1065C00072B6FEE76174745F7365727665722E63EE +:1065D000000000000A6882654968C16535210170C4 +:1065E00002F03CBBF8B50446C0880E46C0050BD58A +:1065F00006484568002D07D000200090034602465B +:1066000021893046A8472082F8BD0000A400002060 +:106610007CB50E46C98804460D0B00D06D1C14F8DD +:10662000FD2F6078CDE90002A378FD3C2A46104892 +:10663000FEF788FCF088410502D594F8FE1079B188 +:10664000000502D594F8FF0060B1002D02DD94F83A +:10665000FD0048B194F8FD00A84207DA0C207CBD8B +:1066600005207CBD08207CBD0F207CBD00207CBDAA +:10667000783502003EB50C468DF808000699ADF855 +:106680000920CDE90013032302AA0421204606F0C5 +:1066900003FB3EBD0622FDF710BF0A680260898831 +:1066A0008180704710B50C49002203463A24985C5B +:1066B000000900F025FB0870985C00F00F0000F066 +:1066C0001FFB48708C70C91C521C062AEFDB00208F +:1066D00001F8010C004810BD4969002008440088F9 +:1066E00040BA70474218405C5378528852BA63F3FC +:1066F0001F4242EA00607047130A4354491C89B2A2 +:1067000042547047130E4354491C89B2C2F30743E5 +:106710004354491C89B2C2F307234354491C89B22C +:106720004254704710B50446FEF78CF903480188BF +:10673000A1430180BDE81040FEF78EB90C04002093 +:1067400010B503F094FBBDE81040012000F010B834 +:1067500010B506490A68C2F30312022AFAD10121D0 +:1067600000F0D6FBBDE8104004F0F4BE0400044085 +:1067700010B50446FEF766F90348018821430180FD +:10678000BDE81040FEF768B90C040020034800780B +:10679000C00701D116F09EBD704700000C04002018 +:1067A00008B50020009008480068C1050748006847 +:1067B00003D069461CF048F808BD00231A46194664 +:1067C0001BF02CFF08BD000004ED00E004000020D9 +:1067D00010B518B103F04DFB0FF0ECFA10F08CFA85 +:1067E0000120FFF79FFFBDE81040032016F086BE92 +:1067F00070B50D480088A0B910F0AEF940F2E2453E +:106800000446A8420DD30948406D50B916F04AFF1E +:1068100038B116F04FFFA84203D3A04200D3204660 +:1068200070BD002070BD00000C0400200000094075 +:106830000268134602E08A4204D01268002AFAD1A4 +:106840000B600160704702E08A4205D01046026882 +:10685000002AF9D10A6001607047006808B1002081 +:1068600070470120704704E0884201D10120704741 +:1068700000680028F8D170470268816832B140682A +:106880000068884200D1086808B9704709B1012042 +:106890007047002070470022C0E90021096881602C +:1068A0007047016851B141680A6881688A4203D122 +:1068B00041600968816003E0826001E001210160BC +:1068C00080687047816809688160426811600021B2 +:1068D000016070474FF0FF3351B107E002688A4210 +:1068E00003D1096801600020704710460028F5D1E7 +:1068F0001846704717F0C8BF1BF088BA1BF086BA5D +:10690000782017F0C1BF000010B50446806B06F078 +:10691000A2FB2146BDE81040014800F071B800001C +:10692000D800002070B50C4800F09AF804000CD094 +:1069300040F2111006F0B2FB050008D0902120466D +:10694000FDF7A9FD2046A56370BD002070BD21465E +:10695000014800F055F8F8E7D800002010B5902362 +:1069600008220F490F4800F037F80E4914230C395C +:10697000002201F1100000F02FF80A494C230839D9 +:10698000002201F1100000F027F806490C23002234 +:10699000091FBDE8104001F1100000F01DB8000013 +:1069A000A4640020D80000200146014800F028B867 +:1069B000E0000020014800F053B80000E000002093 +:1069C0000146014800F01CB8DC000020014800F03E +:1069D00047B80000DC0000202DE9F0410646002009 +:1069E000984617460C460546306005E0214630467D +:1069F00000F006F844446D1CBD42F7DBBDE8F081B1 +:106A000030B40268134607E08B4204D1024630BC22 +:106A100004A0FEF799BA1B68002BF5D10A6001604B +:106A200030BC70476274737461636B5F6D656D6FCA +:106A300072795F706F6F6C5F667265653A20626C29 +:106A40006F636B20257020667265656420747769BA +:106A5000636520666F7220706F6F6C202570000078 +:106A6000016819B10A680260084670470020704743 +:106A700001460148FFF7C4BFE40000200148FFF7CA +:106A8000EFBF0000E400002000B589B00A230193A5 +:106A90000E4B1B6802930591CDE903020C48006878 +:106AA000C00518464FF0000304D0002269461BF0D1 +:106AB0006BFE04E04FF0FF3269461BF0AFFD01288A +:106AC00002D0012009B000BD0020FBE70800002033 +:106AD00004ED00E038B504461CF0A6FA02464FF07B +:106AE000FF3000900023012160691CF0B5FC38BD27 +:106AF0000020704738B50446406948B14FF0FF3177 +:106B0000002300911A4605211CF0A6FC00206061BC +:106B1000002038BD38B504461CF086FA02464FF016 +:106B2000FF3000900023022160691CF095FC38BD05 +:106B300038B5044681604FF47A704243B2FBF0F1FD +:106B4000044800902346002203A01CF019FC606159 +:106B500038BD0000814E00006800000001617047F0 +:106B6000C0E90312704708B54FF0FF3100910023D0 +:106B700040691A4603211CF06FFC08BD70B50C007B +:106B8000054601D0012000E000206A2206A1FEF7A0 +:106B90002BFF284600F034F810B100206C60206014 +:106BA000286820602C6070BD6C6973745F626173CB +:106BB00069632E630000000070B50C00054601D02B +:106BC000012000E00020532207A1FEF70DFF284618 +:106BD00000F016F808B12C6001E06868046000203D +:106BE0006C60206070BD00006C6973745F626173DB +:106BF00069632E630000000000210160416070475E +:106C0000006808B10020704701207047006808B193 +:106C10000020704701207047016819B10A680260BE +:106C200012B103E00022FAE70022426008467047F2 +:106C300070B5054600680C4600B10120C32209A1C9 +:106C4000FEF7D2FE206800B10120C42205A1FEF7A4 +:106C5000CBFE69682068086060686860002020607A +:106C6000606070BD6C6973745F62617369632E6389 +:106C70000000000070B5034600200246012513F80D +:106C80000240002105FA01F6344201D0401C80B2D6 +:106C9000491CC9B20829F5D3521CD2B2052AEED339 +:106CA00070BD70B50446008942F6554290472521D3 +:106CB000B0FBF1F201FB1201CA0801F00705A25C6A +:106CC0000123AB401A4201D0084670BDE188414320 +:106CD0002046BDE87040C1F3074102F0D5BA30B597 +:106CE00004461068206010790D4600F01F002071E6 +:106CF0002046FFF7BFFFE08085EA1540208130BDC8 +:106D00000A2801DA303003E00A38062802DA413076 +:106D1000C0B270473F20704770B50446C08E88B03F +:106D2000002822D0258F94F83430A2268DF80060F8 +:106D30001A268DF80160A6890A46ADF80400ADF860 +:106D4000082004F11C01ADF80260ADF80650ADF862 +:106D50000A30102203A8FDF777FBA1891C236A469D +:106D6000A06800F02DF90020E08608B070BD00009A +:106D700004481144814203D9012018600320704760 +:106D8000002070475B6E00200249CA6D82430243B7 +:106D9000CA6570470000094043688B4204D180688F +:106DA000904201D101207047002070471CB500229D +:106DB000202140201BF092FB104C03220021A060F8 +:106DC00001201BF08BFB606004F10C010E20CDE96B +:106DD00000014FF480640023224609A109481CF0F9 +:106DE000A9F8064902201031CDE90001002322460E +:106DF00005A106481CF09EF81CBD00000000002004 +:106E0000630000000D4A00007000000031DE010048 +:106E100010B504F002FC0022BDE81040114602202B +:106E200004F0C2BB70B50646401E1D460C46042841 +:106E300009D220782968884205D10622211D686878 +:106E4000FDF73BFB08B1002070BDC5E902640320DB +:106E500070BD00000248017A491C017270470000B1 +:106E60007401002010B5044603F0DAF800200EF09B +:106E70008DFF0FF0A7FD0EF0E1FD07F0F5FF0BF021 +:106E8000FFFC11F027FA15F015F9002C03D0BDE82E +:106E9000104010F0ECBA10BD70B50446B0F1A53F3B +:106EA00019D0B4F1C33F16D00123DA0205211B200B +:106EB00016F072F90546B4F1F23F09D08D2206A111 +:106EC0000020FEF791FD2846BDE8704016F0C4BAD8 +:106ED00007202870F7E770BD6474626C652E63004C +:106EE00070B50A4C4FF42020074DE0641AF0B0F959 +:106EF000800602D54FF4803001E04FF40040284472 +:106F0000C0F31300A06470BD00000A4000000940F7 +:106F1000F8B505461B480E46002101800FF016F813 +:106F20001AF0A4F916F0E0F868460FF049F80446A4 +:106F3000009842F203114FF46367884201D30120A5 +:106F400000E00020852210A1FEF74EFD3A462146C2 +:106F5000002016F035F9009804F56361A0F5636030 +:106F600082B2012016F02CF91AF016F93046FFF71C +:106F700079FF002D04D02846BDE8F840FFF78CBF0C +:106F8000F8BD00000C040020647469702E630000DA +:106F900009490120096809B1002070470749CA69F9 +:106FA000002AF9D1044A283212688968491E8A42A7 +:106FB000F3D10220704700005C0B00202400002069 +:106FC00030B4040003D0A44630BC0420604730BC79 +:106FD0007047FEB51E4617460C46054602F070F98E +:106FE000002816D0011D6846FFF755FC0CE06846E6 +:106FF000FFF757FC0189A14206D1D0F804C03346FF +:107000003A4629460420E0476846FFF735FC002849 +:10701000EDD1FEBD1CB5A0228DF8002003228DF815 +:1070200001208289ADF802208DF8041081898068E2 +:1070300005236A46FFF7C4FF1CBD30B587B0044680 +:10704000A3250A988DF8005018258DF80150A589C0 +:10705000ADF80410ADF806200146ADF80250ADF8C9 +:10706000083010220DF10A00FDF7EEF9A1891A236C +:107070006A46A068FFF7A4FF07B030BD10B586B020 +:107080000446A1208DF8000016208DF80100A0898B +:10709000ADF80410ADF80200ADF806201022194634 +:1070A00002A8FDF7D1F9A18918236A46A068FFF765 +:1070B00087FF06B010BD00002DE9F05F0024924666 +:1070C000894605462746264624E000BF05EB840096 +:1070D000B0F9021035F9240017F092FD834605EB54 +:1070E0008800B0F9021035F9280017F089FDABEBE4 +:1070F000000043F6FF71884203DBA0F5FE40FF3835 +:1071000004E00849884201DC490C0844074404EBC8 +:107110004904761C04EB0908D045D7DB97FBF6F051 +:10712000BDE8F09F01C0FFFF2DE9F047427804461B +:10713000901C86B00E46814206D006B0921CBDE877 +:10714000F047F548FDF703BF2178F4A0FDF7FFFEF7 +:1071500020780122DFF8D4834FF000094FF0070AAE +:1071600010287DD00BDCA0F105000B2835D2DFE81C +:1071700000F0BA97348334345A3434112B003E284B +:107180006FD004DC12286DD0132826D12CE05728AC +:1071900023D19CE1D8F80000A278454690F852101F +:1071A000E3A0FDF7D4FE6179EAA0FDF7D0FE2968DF +:1071B000A07881F85200EC49B4F8030009888842AD +:1071C00007D0EA49098804E0D8F80000E17880F89F +:1071D0005210D8F80010A1F88690D8F8000090F866 +:1071E0006800012877D07CE10325002717E0635B66 +:1071F000AD1C625BAD1C184603F0B8FB38B190F8CB +:107200004010914208D3891A80F8401006E01946D0 +:10721000D7A0FDF79CFE01E080F840907F1CA0788D +:10722000B842E4DCD9E7B4F8030003F09FFB0500A3 +:10723000D3D0A07860B9E17A04F10500090703D53D +:10724000698A41F004016982C078000600D5EA75B8 +:10725000688A40F00201B0486982EA7D603002E04D +:107260004FE05FE052E0FDF772FE688A0106B4D598 +:1072700040F020006882B0E7B4F80350284603F0DD +:1072800075FB0028A9D0A17831BB617900298169FB +:1072900002D041F4004101E021F4004181611BE092 +:1072A000B4F80350284603F061FB002895D0418ACA +:1072B0000A0607D521F0800141F010014182A17832 +:1072C00001758AE7A2783AB9427D022A04D841F0D2 +:1072D0004001418281E700E100F094FC014628462C +:1072E00003F044FC79E76279A178AFA0FDF7FEFDD9 +:1072F000B4F8030003F03AFB002893D080F811A003 +:107300006BE703F067FE03F079FE66E7A0780028DC +:1073100088D1B4F8030003F029FB0028ABD0617AD0 +:1073200001745AE7A07806287DD010DC01281CD013 +:107330000428A0D1E078002876D1A08803F016FBBD +:10734000002871D08030A1794170027045E70A2889 +:107350000BD012288FD1207908288CD2E17800290F +:1073600070D097A0FDF7F3FD37E7E0780028A8D1AB +:10737000A788082F27D2D8F8000000EB8705686996 +:1073800010B9FFF7CFFA686105001CD0EF8002202A +:10739000C5F8189068752A46924905F11C00FFF758 +:1073A000DFFBFFF7A5FB6863E0792872294604F14B +:1073B000080017F0FEFB05206874A0792874A078F7 +:1073C0000A2804D012E0A08800F0D0F905E7D4F82C +:1073D0000E10C5F88210618AA5F886106169C5F89B +:1073E0008810218B05F18000A5F88C10E089A5F8A4 +:1073F0005200287C60B9D8F8001091F85010E97359 +:10740000D8F8000005F1090190F8500000F086FA64 +:107410002846FFF747F90246E98873A0FDF797FD74 +:1074200003F07AFB01E00EE023E0D8F8000090F8CA +:107430005E00C0068AD5E98840F6B832724803F08B +:10744000E7FBCAE618E034F8035F284603F08EFA3B +:107450006288A388E188248900280AD054304688AD +:107460000088CDE90014CDE902062946674803F0FB +:10747000CFFB06B0BDE8F087B4F80520104603F056 +:1074800075FA0546217962A0FDF761FD2079D8F8EB +:107490000020C0EBC001114491F89310E97369B169 +:1074A0002179D8F80000C1EBC101014401F180004D +:1074B000D1F8941045F8091F008B06E0D8F80000B9 +:1074C000416C45F8091FB0F84800A88085E660883F +:1074D00003F04CFA0028B4D1CBE7B1B2204603F058 +:1074E00033FCB1B2204603F0EFFA2078052811D121 +:1074F000B4F8030003F03AFA60B1D0E90012047D59 +:10750000458ACDE9031203F057FFE80502D503AD24 +:10751000214695E0A7E00000A03902004843493A1F +:107520004556454E543A253032780000BC370200AB +:10753000434D445F434F4D504C45544520636D646B +:1075400073206F6C64202575202D206E65772025B3 +:1075500075000000636D645F636F6D70207374610C +:107560007475732025750000583B0200603B0200D3 +:107570006863695F6E756D6265725F636F6D706C75 +:10758000657465645F7061636B6574206C697374A6 +:107590007320756E7573656420636F6E2068616E0D +:1075A000646C652025750000646973203A2073209F +:1075B00030782578202C7220307825780A00000059 +:1075C00061647620736574207465726D696E617490 +:1075D0002064756520746F20636175736520307851 +:1075E00025780A0085A900004E657720636F6E6ECE +:1075F000656374696F6E3A2068616E646C652025FE +:10760000752C202573000000803A0200083B020020 +:107610006164762068616E646C65722030782578CC +:1076200020636F6E6E656374656420746F20636F92 +:107630006E2068616E646C6520307825780A0000E1 +:107640000BA0FDF784FCE1208DF800008DF801A06F +:107650008DF802400DF10301284617F0AAFA09211E +:10766000684603F031FA06B0BDE8F04703F036BDD6 +:107670006863695F656D69745F646564696361749B +:1076800065645F626F6E64696E675F726573756C67 +:10769000742025752000000010B5044603F0B6FFE5 +:1076A000204610BD13460A4610B50146024803F0B5 +:1076B000AFFAC0B210BD0000B03B020010B50246E8 +:1076C000024803F0A5FAC0B210BD0000B03A0200B3 +:1076D00010B588B00C46694617F05CFA04A920463C +:1076E00017F058FA04AA6946024803F091FA08B064 +:1076F000C0B210BDE03A020010B5024803F088FAAB +:10770000C0B210BDA83A020010B5024803F080FADA +:10771000C0B210BD603B020010B5024803F078FA19 +:10772000C0B210BDC03B020000B1012004490A688C +:1077300092F88920824202D0096881F88900704756 +:10774000BC37020010B5024803F062FAC0B210BDA7 +:10775000A03A020008B5009313460A4601460248C3 +:1077600003F056FAC0B208BD2038020010B5034637 +:1077700003F0FCF840B10621417413221946054874 +:1077800003F046FA002010BD0021184603F088F9E6 +:10779000F8E70000503A020038B54FF0FF30ADF87E +:1077A0000200ADF8000006250DE0684603F02EF952 +:1077B0000446407C062806D0E1881322054803F0E1 +:1077C00027FA00B96574684603F000F90028ECD187 +:1077D00038BD0000503A020038B500B101200D4913 +:1077E0000A6892F88840844210D121460AA0FDF729 +:1077F000AEFB66208DF8000001208DF801008DF8A9 +:1078000002400321684603F05FF938BD82F8880022 +:1078100038BD0000BC3702004254535441434B5F13 +:107820004556454E545F444953434F564552414295 +:107830004C455F454E41424C4544202575000000B3 +:107840002DE9FF4FDFF8A8A085B00024DAF800206A +:10785000DDE912691268DFF894808B460A2000EB9C +:10786000061153692746B8F8000003AA9847050097 +:1078700001D001210FE0562009B0BDE8F08F00BF14 +:1078800004EBC40219F81220521E01FA02F0384328 +:10789000641CC7B2E4B2B442F2D3DDE907018DE85B +:1078A00083005B46D8F804102846059A03F054F884 +:1078B000C7B200240DE000BF04EBC40109EB410195 +:1078C000891CE8191022FCF7BFFD1037641CFFB2B9 +:1078D000E4B2B442F0D3DAF80010404681F850B078 +:1078E0002946039A03F030FD0020C5E7903B0200D3 +:1078F000BC3702000248006890F88A007047000018 +:10790000BC3702000449096851F8CC2F02604A686C +:107910004260896881607047BC370200074A0028CE +:10792000106804D050F84A2F0A60808803E0426C47 +:107930000A60B0F84800888070470000BC37020039 +:1079400010B50146024803F063F9C0B210BD000053 +:10795000D03A0200034909684A6C0260B1F8481045 +:1079600081807047BC37020010B50446014604A070 +:10797000FDF7EDFA022C01D9012010BD002010BD49 +:107980006761705F6D69746D5F70726F7465637449 +:10799000696F6E5F72657175697265645F666F723B +:1079A0005F73656375726974795F6C6576656C2069 +:1079B000257500007FB50DF1200CBCE870008DE846 +:1079C000780013460A460146024803F021F904B044 +:1079D000C0B270BD983B020010B5024803F018F920 +:1079E000C0B210BDA03B020013460A4610B50146C6 +:1079F000024803F00DF9C0B210BD000010380200BB +:107A000013460A4610B50146024803F001F9C0B218 +:107A100010BD0000083802001CB5049CCDE90034FC +:107A200013460A460146024803F0F2F8C0B21CBDF4 +:107A30001838020010B50146024803F0E9F8C0B258 +:107A400010BD0000A83B02000448417A012903D17F +:107A50000221417218F054BD7047000074010020EB +:107A6000074810B5426D40F282210648FFF760F8E2 +:107A70000448FFF72FF8BDE81040FFF7E5BF00000E +:107A800074010020CC73002010B50022074908487B +:107A9000FFF766F8074840F28221426D0448FFF77D +:107AA00047F8BDE810400248FFF714B8617A0000BB +:107AB000CC7300207401002010B5024803F0A8F830 +:107AC000C0B210BD983A020010B5024803F0A0F809 +:107AD000C0B210BDF837020010B5024803F098F8A4 +:107AE000C0B210BDC83B020010B50146024803F009 +:107AF0008FF8C0B210BD0000183B020010B501465F +:107B0000024803F085F8C0B210BD0000703A0200D0 +:107B100010B50146024803F07BF8C0B210BD00006A +:107B2000D83A020010B50146024803F071F8C0B21D +:107B300010BD0000883A020010B50246024803F06A +:107B400067F8C0B210BD0000B83A02002DE9F0415C +:107B50000E46074602F00AFF040010D0384600F037 +:107B600047F80546024631460AA0FDF7F0F9B5424E +:107B700007D329463846BDE8F04102F0F7BF01219E +:107B8000F8E76675608A40F020006082BDE8F04149 +:107B900003F0A4BA6761705F726571756573745F95 +:107BA00073656375726974795F6C6576656C2025A1 +:107BB000752C2063757272656E74206C6576656CC9 +:107BC0002025750010B50146024803F021F8C0B227 +:107BD00010BD0000583B020013460A4610B501468E +:107BE000024803F015F8C0B210BD0000B83B020017 +:107BF00010B502F0BBFE18B1BDE8104000F002B8AD +:107C0000012010BD10B1008B000401D40120704789 +:107C10000220704702207047084B10B51B68C0EB6C +:107C2000C0021A440B6842F8943F8B8893800A463E +:107C30000146034802F0ECFFC0B210BDBC370200A1 +:107C4000303B020000B101200249096881F88A0036 +:107C500070470000BC37020001490968086470479A +:107C6000BC3702001CB5049CCDE9003413460A461B +:107C70000146024802F0CCFFC0B21CBDE83702004A +:107C80000A4610B50146024802F0C2FFC0B210BD5C +:107C9000F03702002DE9FE4F144E8846A6F11C0174 +:107CA0001D4609681746814609683088DDF830A00E +:107CB0004B6902AA691D9847040014D0CDE90075EC +:107CC00043464A46716802F047FEC0B220442A4645 +:107CD0005146FCF7B9FB21463046029A03F034FBCB +:107CE0000020BDE8FE8F5620FBE70000D8370200D9 +:107CF0002DE9FC47124D0F46A5F12401994609686C +:107D0000164680460968288801AA4B69311D9847A4 +:107D1000040013D000963B464246696802F01CFE00 +:107D2000C0B2204432464946FCF78EFB2146284625 +:107D3000019A03F009FB0020BDE8FC875620FBE711 +:107D4000E037020004490268096841F8CC2F426814 +:107D50004A60806888607047BC3702000A4610B5E8 +:107D60000146024802F054FFC0B210BDC8370200FD +:107D70002DE9FF5F154D8946291FDDE90E6B096866 +:107D80001F4690460968824628884B6903AA711DE0 +:107D90009847040018D0CDF80080CDE901764B4615 +:107DA00052462046696802F0D7FDC0B220443246F0 +:107DB0005946FCF749FB21462846039A03F0C4FACA +:107DC000002004B0BDE8F09F5620FAE7C03702005B +:107DD0002DE9FF5F164D8946A5F11401DDE90E6B13 +:107DE00009681F4690460968824628884B6903AA9D +:107DF000B11D9847040018D0CDF80080CDE9017678 +:107E00004B4652462046696802F0A6FDC0B22044A7 +:107E100032465946FCF718FB21462846039A03F0E0 +:107E200093FA002004B0BDE8F09F5620FAE7000066 +:107E3000D037020013460A4610B50146024802F048 +:107E4000E7FEC0B210BD0000203B020008B50B46A3 +:107E5000009202460021024800F074F808BD0000BC +:107E6000403B02002DE9FC4791461B4A194F8846CA +:107E7000126804460221126801EB880138885369B0 +:107E800001AA9847060007D043462246796802F0C7 +:107E900063FDC5B2002414E05620BDE8FC8700BF96 +:107EA00004EB440009EB40010A7900924B8819F871 +:107EB0001020701909A102F04FFD2D1D641CEDB2B8 +:107EC000E4B24445ECD331463846019A03F03CFA1B +:107ED0000020E2E7503B0200BC37020031323100A3 +:107EE0002DE9F04F8DB0DFF854C0DDE91F89DDE9E1 +:107EF0001BBADCF800C0DDE91D56C0EBC0076744C3 +:107F0000DDF868E0179C87F8934008AFA7E86003A6 +:107F1000DDF864C0CDE906BACDE904CE169E189D01 +:107F2000CDE9003613460A4601460548CDE902452B +:107F300002F06EFE0DB0C0B2BDE8F08FBC3702009B +:107F4000383B02002DE9FC471C460A9D174688462F +:107F50008146F72B28D9F720CDE900050B460122F1 +:107F60003946484602F054FE10F0FF0025D1F73C98 +:107F7000A4B2F73516E0F72C01D3F72600E0264629 +:107F8000A01BCDE900650404240C01D0002200E010 +:107F9000022243463946484602F03AFE10F0FF00FE +:107FA0000BD13544002CE6D14346032239464846DE +:107FB000CDE9004502F02CFEC0B2BDE8FC87000010 +:107FC00008B5009313460A460146024802F020FE17 +:107FD000C0B208BD883B02002DE9FC4716460F469B +:107FE00002EB8601244ADFF88C80994612688246AB +:107FF00000241268C91CB8F80000536901AA984708 +:10800000050002D0002001220DE05620BDE8FC87CB +:1080100000EB400319F813305B1E02FA03F1214311 +:10802000401CCCB2C0B2B042F2D300943B465246A0 +:108030002846D8F8041002F08FFCC7B200240FE0E5 +:1080400004EB440109EB41008188009143884278A8 +:10805000E8190AA102F080FC7F1D641CFFB2E4B2A3 +:10806000B442EDD329464046019A03F06DF9002051 +:10807000CCE70000803B0200BC3702003132320006 +:1080800008B50B460092024600210248FFF75AFF4E +:1080900008BD0000483B02000A4610B501460248F0 +:1080A00002F0B6FDC0B210BDC83A02002DE9F84397 +:1080B0001A4F15460C468046F82925D90146F82363 +:1080C00001223846009502F0A3FD10F0FF0023D1F5 +:1080D000F83CA4B2F83515E0F82C01D3F82600E0FE +:1080E0002646A01B0404240C009501D0002200E0C9 +:1080F000022233464146384602F08AFD10F0FF0066 +:108100000AD13544002CE7D12346032241463846A4 +:10811000009502F07DFDC0B2BDE8F883703B02001F +:108120000A4610B50146024802F072FDC0B210BD09 +:10813000783B020008B5009313460A460146024800 +:1081400002F066FDC0B208BD683B02000A4610B5E9 +:108150000146024802F05CFDC0B210BD00380200CA +:108160001CB5049CCDE9003413460A46014602487A +:1081700002F04EFDC0B21CBD283B0200054902685A +:10818000096841F84A2F82888A800146024802F035 +:108190003FBD0000BC370200903A02000249096866 +:1081A00081F8510070470000BC3702000B4900B550 +:1081B0000A6892F85C20C2F3C00262B1096891F8C3 +:1081C000511041B102F0D2FB28B1807CC0F3800095 +:1081D00008B1012000BD002000BD0000BC37020036 +:1081E000F0B587B0DDE90C45DDE90E67DDE910CEBD +:1081F0008DE81840CDE9057C13460A46CDE90356C3 +:108200000146034802F004FD07B0C0B2F0BD000013 +:10821000283802007FB50DF1200CBCE870008DE815 +:10822000780013460A460146024802F0F1FC04B009 +:1082300070BD0000C03A02002DE9F0478AB01E462A +:108240001546884604280AD0082875D128781B28A6 +:108250000FD01D2808461FD001F032F81EE0297803 +:10826000782969D1FA494C68002C50D04146A04782 +:108270004DE0B5F801700C46EA1CDE1E3946A72019 +:1082800016F0D2FD0246F61C0AB0B3B239462046BB +:10829000BDE8F047FEF79DBE15F0EEFD04004BD0A3 +:1082A0002978771E4FF001090D297CD009DC0C29B3 +:1082B00015D2DFE801F014FA143114F914F814643B +:1082C00014CE172970D006DC0F296ED0112934D0B6 +:1082D000132904D147E1192968D01D293CD0DDA01C +:1082E000FCF734FE28788DF808908DF809000020FE +:1082F00006218DF80A008DF80C108DF80B00009007 +:108300000190A089052302AA042104F0C5FC0AB04B +:10831000BDE8F04700F0A2BCB5F8015004F086F9C2 +:10832000854200D22846E08284F81890A28901464E +:108330001046FCF79BFBEAE7DDE120780228E6D156 +:1083400032462946204616F0E7FB69782046711A26 +:10835000294401224988A3E04746B5F80180EA1C78 +:10836000F61E4146A82016F05FFD0246F61CB3B289 +:1083700041463846FEF72DFE84F85190C7E7207835 +:108380000C2820D016DC062801D00828BFD13246A0 +:108390002946204616F073FB3146284600F09AFF26 +:1083A0000146204603E0E6E013E16DE145E119F006 +:1083B0009BFAACE7142832D02428A8D16888A4F806 +:1083C0004C00252037E195F80180B8F1070F07D25E +:1083D0006888A085A8882086E88860860D202AE124 +:1083E000022715E0E91935F807904A8822868A881D +:1083F0006286C98801A819F01DFC01A80090638E4F +:10840000228E49462046FEF718FE07EB080087B289 +:10841000B742E7D369782046711A695A3FE095F868 +:10842000018000210227A8F1020A0DE035F807902B +:10843000EA191FFA8AF3921C4946204616F010FBEF +:1084400007EB0800494687B2B742EFD32046132214 +:1084500026E020780E2814D0102827D028288DD187 +:10846000204600F07DFA218F6A1CA92016F0DCFC62 +:1084700002460837BBB2A189A068FEF7A1FD002122 +:1084800035E101A9681C16F085FBA18D01AA0092B7 +:108490002046638E228EFEF7D0FDA18D20460B2252 +:1084A00019F042FA33E70BE022E0F7E0204600F053 +:1084B00057FABBB2218F6A1C204616F0D1FADEE7CC +:1084C0004FF004094FF6FF78012704F11C0A09E078 +:1084D000E819E95B40885346804602462046FEF78D +:1084E000CDFD4F44B742F3DB204641460322D7E798 +:1084F00068780427022800D11227F01B35F800A065 +:10850000AD1CB61E1FFA86F8002621E035F806904D +:10851000042F05EB060021D0801C06A916F03AFBBB +:10852000A4228DF8002014228DF80120A289ADF834 +:10853000022006A9ADF8049010220DF10600FBF709 +:1085400083FFA18916236A46A068FEF739FD3E44E1 +:108550004645DBDB204651460922A1E7418806A8B3 +:1085600019F068FBDCE72078182803D0262801D012 +:108570002C2897D1AAE0761E2078B6B2761DBFB21D +:10858000122815D02A288DD1218F628F6B1CAA202A +:10859000009716F057FC020004D0B3B2A189A0687E +:1085A000FEF70EFD3A462921204619F085F9AEE680 +:1085B000218F628F6B1CA620009716F043FC0200EF +:1085C00004D0B3B2A189A068FEF7FAFC3A461121A3 +:1085D000EAE720781A2812D01C281CD02E2814D0A4 +:1085E0003228E4D1204600F0BBF932462946204625 +:1085F00003F05AF800287FF462AF7E2177E0B5F8E7 +:1086000003001D226087192110E0B5F803002F2216 +:1086100060872D210AE032462946204603F044F8BF +:1086200040B1B5F803001D2260871B21204619F0D8 +:108630006AF96CE62120207069E620781E2845D072 +:10864000202843D022281BD03028B0D13EE00000A3 +:10865000E80000204154542048616E646C65722C1F +:1086600020756E68616E646C656420726573706FEE +:108670006E7365207479706520307825303278000B +:10868000204600F06DF9B8E7207816288FD1BBB2EC +:108690006A1C0021204616F0E3F917E029790A291F +:1086A00010D12078082815D006DC02280ED0042826 +:1086B0000CD0062806D10DE00A2807D00C2805D0DA +:1086C00014280CD0204600F0B8FA20E6204600F02E +:1086D00047F9D4E6E18D2046FEF71EFBF6E720467B +:1086E00000F03EF9A08D218E8842F2D10A21204669 +:1086F000FEF790FC0BE60AB0BDE8F08710B5044623 +:10870000084615F0EDFB18B1017819B1952010BDA0 +:10871000562010BD1F218460017000F09FFA0020D8 +:1087200010BD70B505461446084615F0D9FB18B1C2 +:10873000017819B1952070BD562070BD6188A2885E +:10874000914203D10021FEF765FC09E08560618854 +:10875000491C8185A188C1850921017000F07EFA3C +:10876000002070BD2DE9F04107461D46164608461B +:10877000DDF8188015F0B4FB040004D0207820B197 +:108780009520BDE8F0815620FBE7A760A685E5852A +:10879000012084F85000002565831022414604F131 +:1087A0001C00FBF751FEE5860720207000F056FA0A +:1087B0000020E6E72DE9F04107461D46164608462B +:1087C000DDF8188015F08CFB040004D0207820B16F +:1087D0009520BDE8F0815620FBE7A760A685E585DA +:1087E000012084F85000A4F81A80414604F11C00CE +:1087F00019F020FA0020E0860720207000F02EFA01 +:108800000020E6E770B506461C461546084615F0FA +:1088100067FB18B1017819B1952070BD562070BD65 +:1088200086608585C485002180F85010C1860521A9 +:10883000017000F013FA002070BD10B50446084620 +:1088400015F04EFB18B1017819B1952010BD5620D6 +:1088500010BD0121846081854FF6FF72C2850170D1 +:108860000021418300F0FAF9002010BD70B50546E3 +:108870001646084615F034FB040003D0207818B1E2 +:10888000952070BD562070BD0120A560A0854FF6D3 +:10889000FF70E085002060831022314604F11C0047 +:1088A000FBF7D2FD0320207000F0D8F9002070BD46 +:1088B00070B505461446084615F012FB18B101784C +:1088C00019B1952070BD562070BD0121856081854C +:1088D0004FF6FF71C18503210170448321461C308E +:1088E00019F0A8F900F0BAF9002070BD10B50446DF +:1088F000084615F0F5FA18B1017819B1952010BDA8 +:10890000562010BD1D218460017000F0A7F90020E1 +:1089100010BD70B506461C461546084615F0E0FA2F +:1089200018B1017819B1952070BD562070BD8660D0 +:108930008585C4850B21017000F090F9002070BD81 +:1089400010B50C4615F098FA10B1017E012903D03C +:1089500017202080952010BDC08A2080002010BDE7 +:1089600010B500210170044681890448FCF7EEFA35 +:1089700004F16000BDE81040FEF7BCB89437020077 +:1089800070B5042817D11078052810D1B2F803501B +:10899000284600F095FC040009D01F2100F04DF995 +:1089A0000549002041F825002046FDF7A7FFBDE856 +:1089B000704000F053B970BD5C690020074910B5E4 +:1089C00000200870083106484860084601F0AAFEF9 +:1089D000BDE810400348FDF775B80000E80000202E +:1089E000818900003982000010B515F045FA002891 +:1089F00002D0007808B1002010BD012010BD70B574 +:108A000004461D460E46104600F05AFC002807D0CA +:108A1000666025812146BDE87040001DFDF708BF56 +:108A200070BD2DE9F0410646DDE906781C46154685 +:108A3000084615F055FA20B1017821B19520BDE81E +:108A4000F0815620FBE786600587878744873121C0 +:108A5000C0F84080017000F001F90020EFE700004D +:108A60000149012008707047E800002070B50546F4 +:108A70001446084615F034FA18B1017819B195205A +:108A800070BD562070BD856004872721017000F0FD +:108A9000E5F8002070BD0023AFF3008070B50646F6 +:108AA0001C461546084615F01BFA18B1017819B195 +:108AB000952070BD562070BD8660058744872921AA +:108AC000017000F0CBF8002070BD0023AFF30080F0 +:108AD00070B506461C461546084615F001FA18B151 +:108AE000017819B1952070BD562070BD866005874C +:108AF00044871121017000F0B1F8002070BD70B5FD +:108B000006461D461446084615F0EAF918B10178E4 +:108B100019B1952070BD562070BD8660A0F8444004 +:108B200015218564017000F099F8002070BD70B5C2 +:108B300005461446084615F0D3F918B1017819B165 +:108B4000952070BD562070BD856004870021418747 +:108B50000F21017000F082F8002070BD2DE9F04176 +:108B600007461D4616460846DDF8188015F0B8F988 +:108B7000040004D0207820B19520BDE8F081562073 +:108B8000FBE7A760A685E5852686658600206083CD +:108B90001022414604F11C00FBF756FC1320207004 +:108BA00000F05CF80020E8E72DE9F04107461D469B +:108BB00016460846DDF8188015F092F9040004D036 +:108BC000207820B19520BDE8F0815620FBE7A76012 +:108BD000A685E58526866586A4F81A80414604F1B7 +:108BE0001C0019F027F81320207000F037F800203F +:108BF000E9E700000149486070470000E8000020F4 +:108C00002DE9F04106461C4615460846069F15F01C +:108C100067F920B1017821B19520BDE8F081562097 +:108C2000FBE7866005878487002141871B21076455 +:108C3000017000F013F80020EFE770B504460078EB +:108C40000D46002808D02046FFF78AFE2946204618 +:108C5000BDE87040FEF7DEB970BD00002DE9F04FB1 +:108C6000002689B04FF01E094FF0040A4FF0020BA6 +:108C700037464FF00808CC4850F82640002C79D0F1 +:108C8000A089FCF719FF90B12278217EC7A0FCF7DC +:108C90005DF994F8510080B184F85170A0890123E6 +:108CA0008DF80890009702AA0421019792E0A0890C +:108CB00009B0BDE8F04FFCF702BF2078172801D0BB +:108CC0002B2818D1204614F039FFA18FC01E8842EE +:108CD00011DA204614F032FF0246A18FC1A0FCF742 +:108CE00035F92046FFF73CFE09B02046BDE8F04FBD +:108CF0000D21FEF78FB9606D04F078F905462178F3 +:108D0000C3A0FCF723F92078362833D2DFE800F03F +:108D10009E1B9E259E469E499E519E659E719E75F8 +:108D20009E779E799EA39EB69EB89EBC9EBE9EC117 +:108D30009EC39ECB9EED9ED39EDD9EE59EFE9EFC39 +:108D40009EBA9EFB9EFA84F800B0E08D0090A38D41 +:108D5000A2894FF42051102048E084F800A0608BD5 +:108D60004FF4205538B1ADF81C00E18D07AA8DE80D +:108D700006080AE06AE003A904F11C0015F00AFFE6 +:108D8000E08D102203A98DE80700A38DA289294652 +:108D90000620FCF7BFFF09B0BDE8F08F0620207069 +:108DA00001E084F8008009B02046BDE8F04F15F0DE +:108DB000BEBF84F80080A589A18DE08D8DF808A044 +:108DC000ADF80910ADF80B000097052302AA0421A5 +:108DD0002846019703F060FFDDE70C202070E08D4E +:108DE0000090A38DA28942F602010820FDF7DFF969 +:108DF000D1E70E202070228E60E010205CE012206F +:108E000064E014202070618B204639B1C28D00923D +:108E1000838DA2890820FDF7CAF917E000F11C0232 +:108E20008489818DC08D8DF80880ADF80910ADF86A +:108E30000B000DF10D01104615F0ACFE0097152347 +:108E400002AA04212046019703F026FF761C082E73 +:108E5000FFF411AF9FE716202070A089B4F84420DA +:108E60000E23A16C8DF808304FF6FF7303EA42021F +:108E7000CDE90012012302AA0421E5E718202DE024 +:108E80001A2044E0322042E01C2040E084F80090A8 +:108E900046E0202000E02220207009B02046BDE8F6 +:108EA000F04F15F03FBF2420207009B02046BDE8E8 +:108EB000F04F15F07CBF28202070228FA18909B0C7 +:108EC0000A20BDE8F04FFDF787B92A20207009B0CD +:108ED0002046BDE8F04F15F055BF2C20207009B09A +:108EE0002046BDE8F04F15F06DBF2620207004F13C +:108EF0004E000090B4F84C20A18902231220FDF707 +:108F0000B9FB48E726E011E008E0FFE72E202070DB +:108F100009B02046BDE8F04F15F019BF3020207091 +:108F200009B02046BDE8F04F15F00CBF16F060FA0E +:108F300000288FD034202070A86D216C01AB0091E7 +:108F4000394A15C3A38F228FD22105F1480016F0AC +:108F500059FA20E736202070A96DB4F80C90228FC2 +:108F6000B4F83C80D223266C8DF81030ADF8112077 +:108F7000059104F158000DF1140A06A915F016FE2A +:108F80000C20CDE902A0CDE90068032304AA042146 +:108F9000484603F0C9FE27702046FFF7E1FCA86DA4 +:108FA000401CA865F7E600005C6900202D20686180 +:108FB0006E646C655F7065726970686572616C5F24 +:108FC0006C6973742C206D747520737461746520E2 +:108FD00025752C20636C69656E74207374617465EB +:108FE00020257500676174745F636C69656E745FDA +:108FF00072756E3A2076616C7565206C656E202501 +:1090000075203E204D5455202575202D20330A0013 +:10901000676174745F636C69656E745F73746174A7 +:109020006520257500000000D56500002DE9F0479A +:1090300007461D46164689460846DDF8208014F08E +:109040001BFF0446007850B9484616F0BFFF0146A2 +:1090500060650AA0FBF77AFF606D002802DA9520B0 +:10906000BDE8F087A7602687A5873320C4F8408035 +:109070002070FFF7F3FD0020F2E700006C655F64ED +:1090800065766963655F6B6579206973203A30782E +:1090900025780A0070B50A4E0546002456F82400CB +:1090A000A84207D1A98907A0FBF750FF7F212846D6 +:1090B000FFF7C3FD641CA4B2082CEFD370BD000001 +:1090C0005C6900204741545420636C69656E7420CC +:1090D00074696D656F75742068616E646C652C20B1 +:1090E00068616E646C65203078253032780000004D +:1090F0002DE9F04106461C4615460846069F14F029 +:10910000EFFE20B1017821B19520BDE8F081562015 +:10911000FBE7866005878487002141872B21076450 +:109120000170FFF79BFD0020EFE770B506461D4676 +:109130001446084614F0D4FE18B1017819B19520F0 +:1091400070BD562070BDE90704D0A179C90601D4CD +:10915000982070BDA90704D5A179890601D499206A +:1091600070BD866061888185A188C185A0F84E5058 +:1091700023210170FFF772FD002070BD1CB5049C17 +:10918000CDE90034002300F001F81CBD2DE9F041C9 +:109190000646DDE906781C461546084614F0A0FE92 +:1091A00020B1017821B19520BDE8F0815620FBE780 +:1091B00086600587878744872D21C0F8408001702D +:1091C000FFF74CFD0020EFE71CB5049CCDE900340F +:1091D000002300F001F81CBD2DE9F0410646DDE951 +:1091E00006781C461546084614F07AFE20B1017830 +:1091F00021B19520BDE8F0815620FBE78660058708 +:10920000878744871921C0F840800170FFF726FD49 +:109210000020EFE72DE9F04106461C4615460846BA +:10922000069F14F05DFE20B1017821B19520BDE8C4 +:10923000F0815620FBE78660058784871721076445 +:109240000170FFF70BFD0020F1E7F8B51E4615464B +:109250000F4614F011FE040003D0207818B19520B9 +:10926000F8BD5620F8BD204614F068FCC01EA84288 +:1092700001DA9720F8BD0096A1892B463A46522084 +:10928000FDF7F8F9C0B2F8BDF0B50024234601257A +:10929000C65C002205FA02F73E4207D08C4203D199 +:1092A00002EBC300C0B2F0BD641CA4B2521CD2B227 +:1092B000082AEFD35B1CDBB2052BE9D3FF20F0BDFE +:1092C000082803D2024951F8200070470020704757 +:1092D0005C6900204278891A0844B0F8030070479E +:1092E0002DE9FC41164C18271E46D4F808C0BCF1E5 +:1092F000000F11D04978D9B12178002579B1FCF758 +:109300007DFB237862882570658002B0394630463F +:10931000BDE8F04115F08EBD03230022F5E70023E0 +:1093200000950195B0F8060102221946E04701E0D8 +:10933000FCF764FB192030700120BDE8FC810000BF +:10934000A40000202DE9FF4F87B01D46DDE914730E +:109350008946824600264FF0060B0124B0463A4665 +:1093600029463448FBF7EEFDDDE9161013F096FCB4 +:10937000BD4204D81DB1DAF82401009046E0012373 +:1093800051E06846FCF7F4FDBDF8080008B1A842BA +:109390003CD3B8423DD8CEB158B14FF420516846C5 +:1093A000FCF72FFE28B942F601016846FCF729FEBA +:1093B00060B1414620A0FBF7C5FD29F80480A41C3C +:1093C000A4B209990026201D884222D8BDF80800C1 +:1093D0005FEA00081AD068461599FCF712FEA8B19A +:1093E000BDF810201698824210D105991798FBF706 +:1093F00064F858B9BDF8081016A0FBF7A3FDBDF836 +:10940000081029F80410A41CA4B201260098002812 +:10941000B7D1012C06D0072189F8001020460BB0E7 +:10942000BDE8F08F0A232A465946484615F002FD4A +:10943000F5E70000E8350200456E64206F6620679E +:10944000726F75702C2068616E646C6520307825B1 +:1094500030347800426567696E206F662067726FEE +:1094600075702C2068616E646C652030782530340E +:10947000780000002DE9F04F87B09346109F884692 +:1094800081461E464FF0040A012400253A4619463B +:1094900028A0FBF757FDBE4204D81EB1D9F824011D +:1094A000009033E001233EE06846FCF761FDBDF823 +:1094B000080070B3B8422CD8B04227D3BDF80610CC +:1094C000880501D5102000E00220012C02D9A84215 +:1094D00021D109E008D10546880501D5022100E027 +:1094E000012188F8011002246019801C584510D809 +:1094F000BDF8081028F80410A41CA4B208EB04005E +:109500002A460399FAF7A0FF601984B20098002850 +:10951000CAD1012C06D0052088F80000204607B0EB +:10952000BDE8F08F0A2332465146404615F082FCD2 +:10953000F5E700004154545F46494E445F494E46AA +:109540004F524D4154494F4E5F524551554553542A +:109550003A2066726F6D202530345820746F2025B4 +:10956000303458002DE9F04F2C4C8346B1F80150AF +:10957000B1F803A0A06889B0984691460E46162718 +:1095800058B12A4602A95846FCF7DBFB38B1BDF8B2 +:109590000E00010701D5C00503D403231DE00123FC +:1095A0001BE002A95846FDF733F808B1034614E062 +:1095B000A9F10500711D80B2CDE90010D4F808C0F2 +:1095C000BBF80601534601222946E04710F0FF038D +:1095D00019D0072B09D00D2B07D02A463946404613 +:1095E00015F028FC09B0BDE8F08F0D2B02D0072B39 +:1095F00006D008E020780D2805D02370658002E0B1 +:1096000020780028F9D04A4631464046FAF71CFF38 +:10961000172188F800104846E4E70000A400002065 +:109620002DE9F04387B016460E9D0C460746994635 +:109630004FF00C082A46194621A0FBF783FC4A4646 +:1096400001A93846FCF77DFB28B1BDF80A00800768 +:1096500003D4022307E0012305E001A93846FCF703 +:10966000D7FF030007D04A464146204615F0E2FBEB +:1096700007B0BDE8F083B7F8061101A8FCF7B2FF08 +:10968000BDF81400A84201D20723ECE7401C401BA0 +:10969000B04203DD7019401EADF81400B7F80601A2 +:1096A0000090BDF81400621C401B83B2294601A83B +:1096B000FCF7E0F9401C0D2180B22170D8E70000D2 +:1096C0004154545F524541445F424C4F425F5245C2 +:1096D00051554553543A2068616E646C65202530BD +:1096E00034782C206F666673657420257500000041 +:1096F0002DE9FF4F89B00024DDF858901020CDE906 +:1097000006041E468A460125A0460894A3464A46FA +:10971000314645480B9BFBF715FCDDE9171013F0AC +:10972000BDFA4E4513D896B1DDE91707022810D0CF +:10973000384601F099FF40B1B7F80C004FF42057BC +:10974000B84208D0791C884205D0102366E0012376 +:1097500064E03888F2E70998D0F82401009050E0DE +:109760006846FCF705FCBDF8080008B1B04248D3D4 +:10977000484549D8B8F1000F23D050B13946684662 +:10978000FCF73FFC28B942F601016846FCF739FCBA +:10979000B8B108992AF80510AD1CA8B22AF800B093 +:1097A000801C85B20AEB0500221F0799FAF74CFED0 +:1097B0002819001F85B20B9829194FF00008814223 +:1097C00022D8BDF808005FEA000B1AD0DDE91721A6 +:1097D0006846FCF7F1FBA0B1BDF81000001D80B297 +:1097E000012D02D9A04211D104E003D104468AF828 +:1097F00001000225BDF80800089005984FF0010807 +:10980000079000980028ABD1012D06D011208AF8CE +:10981000000028460DB0BDE8F08F0A2332465046BE +:10982000069915F007FBF5E7303602002DE9FF4FEA +:1098300087B08846149F81464FF0000A1D464FF0BE +:10984000080B012456463A4619463FA0FBF77AFB1F +:10985000DDE9151013F022FABD4204D81DB1D9F884 +:109860002401019058E0012362E001A8FCF780FB8D +:10987000BDF80C00E8B3A8424ED3B8424FD8DDE99A +:10988000152101A8FCF798FBA0B3BDF80A008007DA +:1098900003D47EBBBDF80C603EE001A94846FCF74E +:1098A000B7FE030002D0012C3BD841E0B9F8061105 +:1098B00001A8FCF797FEBDF81400801C80B2012CB3 +:1098C00002D982452DD104E003D1824688F80100F7 +:1098D0000224099804EB0A01814207D9022C20D8FE +:1098E000001FADF81400801C88F80100BDF80C10B2 +:1098F00001E014E010E028F80410B9F80601A41CF7 +:109900000090A4B2BDF8143008EB0402002101A8B5 +:10991000FCF7B0F8204484B201980028A5D1012CAE +:1099200008D9092188F8001020460BB0BDE8F08F57 +:109930002A4602E036B1022332465946404615F027 +:1099400079FAF2E70A23F3E74154545F5245414460 +:109950005F42595F545950455F52455155455354E4 +:109960003A2066726F6D202530345820746F2025A0 +:109970003034582C20747970653A20002DE9FF4F5F +:1099800087B0884683461F464FF00E0901241946CA +:1099900024A0DDF850A0FBF7D5FA00253BE000BF7E +:1099A0003AF815605EB1324601A95846FCF7C9F98C +:1099B00028B1BDF80A00800703D4022307E0012381 +:1099C00005E001A95846FCF723FE030007D0324604 +:1099D0004946404615F02EFA0BB0BDE8F08FBBF8B3 +:1099E000061101A8FCF7FEFDBDF814000119099845 +:1099F000814202D9401EADF81400BBF80601009068 +:109A0000BDF8143008EB0402002101A8FCF732F87D +:109A1000204484B26D1CBD42C2DB0F2188F80010C7 +:109A20002046D9E74154545F524541445F4D554C5F +:109A30005449504C455F524551554553543A206E58 +:109A4000756D2068616E646C65732025750000007B +:109A50002DE9F04387B015460C46064699464FF06F +:109A60000A081A4601A9FCF76CF9074649461BA0EB +:109A7000FBF768FA2FB1BDF80A00800703D4022370 +:109A800007E0012305E001A93046FCF7C1FD030012 +:109A900007D04A464146204615F0CCF907B0BDE84C +:109AA000F083B6F8061101A8FCF79CFDBDF8140080 +:109AB000401CA84202D96D1EADF81450B6F806013C +:109AC0000090BDF81430621C002101A8FBF7D2FF02 +:109AD000401C0B2180B22170E0E700004154545F2C +:109AE000524541445F524551554553543A206861AF +:109AF0006E646C6520253034780000002DE9F0415B +:109B0000154F8046B1F80150B86888B016460C462B +:109B100000281ED02A4602A94046FCF712F9002868 +:109B200017D0BDF80E00C10513D5400711D502A905 +:109B30004046FCF76DFD00280BD1F61EE41CB0B2C8 +:109B4000CDE900400023BC68B8F806011A46294652 +:109B5000A04708B0BDE8F081A40000202DE9F0473F +:109B6000B1F8015088B090460C461E4681464FF031 +:109B7000120A2A4602A9FCF7E4F850B1164FB86859 +:109B800028B1BDF80E00010701D5C00503D4032399 +:109B900016E0012314E002A94846FCF739FD030052 +:109BA0000ED1A8F1030080B2E41CCDE90040BC68EE +:109BB000B9F806011A462946A04710F0FF0307D05E +:109BC0002A465146304615F035F908B0BDE8F08711 +:109BD000132030700120F8E7A4000020AFF30080CC +:109BE0002DE9F0411E4F002600F1130497F82410D0 +:109BF0003546491C87F82410017CB9B1012923D0CE +:109C0000032917D0042925D040F2931215A1002072 +:109C1000FBF7EAFE0E202070E81C607097F8240025 +:109C2000A070A4F80360681DBDE8F0818068114948 +:109C30001A3804E080681049A0F540302B3801EB59 +:109C4000C00046884578E5E780680C49A0F580307B +:109C50001A38F4E780680A49A0F10410EFE7000021 +:109C6000D4780020626C655F686369635F6D7367B9 +:109C70002E63000098430200384402003845020079 +:109C8000304602002DE9F0411F4F054600F1120455 +:109C900097F824000026401C87F82400287CC0B1D7 +:109CA000012820D0032817D0042824D040F24732BE +:109CB00016A10020FBF798FE0F2020700420607092 +:109CC000287EA07097F82400E070A6800620BDE8EA +:109CD000F0811249A86801E01149A86801EBC000B1 +:109CE00030F8CE6CE8E70F49A86801EBC000A0F59A +:109CF0000020CE3806E00C49A86801EBC000A0F5B2 +:109D000000101E380688D7E7D4780020626C655FA3 +:109D1000686369635F6D73672E6300009843020098 +:109D20003844020038450200304602001A2101750D +:109D3000012141750320704710B5837E4FF6FF74F3 +:109D400004EA0333048B016AC4F30B04828B2343BC +:109D50008B82808BC882101D10BD05228275042263 +:109D6000C275428BA0F81920017FC176062070478A +:109D700008230178002200F045B8000010B50488DF +:109D8000A0F11801082C04D2012202EB0422CA60BF +:109D900013E0084613F014F90623012205210948AF +:109DA00013F0FAF90849B1F8382191F83A1142EA6A +:109DB00081210180022181708480BDE8104013F070 +:109DC0004BBB00002F000100D4780020FF21C170A0 +:109DD0000021817113F040BBFF21017100218171CD +:109DE00013F03ABBFF21417000218170FFF7EEBFF5 +:109DF00008230188042200F005B8FF21C170FFF795 +:109E0000EBBF000070B5044618381546994207D2DA +:109E100042EA0121C1602046BDE8704013F01CBB3E +:109E200013F0CEF806484222B0F8381190F83A0103 +:109E300041EA802081B22846BDE8704000F014BBA2 +:109E4000D4780020082282750422C275428BA0F8C3 +:109E50001920017FC17606207047302181750321CA +:109E6000C17500F11901408B08800520704700F092 +:109E7000D6BB00F0D3BBF0B58FB0044610F8011B81 +:109E80008DF8001001788DF8011041788DF80210DE +:109E900050F8021FCDF803108188ADF8071000229A +:109EA0008579C01D114601276B4607FA01F62E423F +:109EB00005D002EB02161E44521C7172D2B2491C2C +:109EC000C9B20229F1D9002515E005EB05111944A5 +:109ED00006884E8146888E818688CE81C6880E820D +:109EE00006894E8246898E828689CE82C689103046 +:109EF0006D1C0E83EDB29542E7D3032005E002EB23 +:109F000002111944521C4872D2B2032AF7D33C22E0 +:109F100069462046FAF798FA204613F09DFA0FB0EA +:109F2000F0BD0000084A00F1130113785B1C1370A8 +:109F30000E23C3740423037512784275028BC28208 +:109F4000807E487106207047F87800200A4A00F1A8 +:109F5000130113785B1C13700E23C374062303755F +:109F600012784275028BC282827E0276B0F81B00A4 +:109F7000C880082070470000F8780020084A00F1E7 +:109F8000130113785B1C13700F23C3740423037530 +:109F9000837E437512788275008B88800620704717 +:109FA000F878002070B500230B4D04466322981802 +:109FB00000EBD070411001EB410005EB80000688FA +:109FC000A64208D002D9A1F1010201E001F101038A +:109FD0009342ECDD002070BDE83E0200B0F80310B3 +:109FE0008180B0F80510C18013F036BA30B4017822 +:109FF0000BE000BF00EB810232F8034D20F8114066 +:10A00000538800EB4102491E13820029F2DC30BC68 +:10A0100013F022BA102181750121C1750320704708 +:10A0200010B500220F49052012F0DAFE0E4C206810 +:10A0300008B9A06800B1012040F20E520BA1FBF755 +:10A04000D3FC0020E0620A2084F8240000F016F817 +:10A0500005481830FCF7D0FDBDE810400649042043 +:10A0600013F02ABAD83E0200D4780020626C655FF3 +:10A07000686369632E63000025A600000348002181 +:10A08000418001704171C16070470000F478002088 +:10A090002DE9F0418CB000F118063E2100F8161FA2 +:10A0A000451C041D022096F80180287000272FE02F +:10A0B00007EBC70000EB47108119891C292268466D +:10A0C000FAF7C2F99DF8000020709DF80100607059 +:10A0D000DDF8020044F8020FBDF80600A0809DF8EC +:10A0E0000810A171E41D00206A4605E01318401C09 +:10A0F0005B7A04F8013BC0B28142F7D89DF8280092 +:10A1000004F8010B287808440A307F1C2870FFB23D +:10A110004745CDD328780CB0801CBDE8F08157218D +:10A12000C17400F11802022100F8141F411C1088AC +:10A130000880042070473E2181751321C1751520C8 +:10A1400070473E2181750A21C1750C2070473E225F +:10A15000C2740B220275027E4275428BC282028C4F +:10A160000283418C41830D2070473E2181750D2172 +:10A17000C175418B00F11802A0F819101B300021A5 +:10A180005318491C1B79C9B200F8013B0829F7D3C1 +:10A19000918901800F2070473E228275C175881C0D +:10A1A00070470621FFF7F8BF0421FFF7F5BF242110 +:10A1B0000D22095C02EB4101C9B2FFF7EDBF252179 +:10A1C0000E22095C02EB4101C9B2FFF7E5BF042191 +:10A1D000FFF7E2BF1F21FFF7DFBF312200F11601B9 +:10A1E000105C3E221A30C0B20A704870801C704762 +:10A1F0000621FFF7D1BF1421FFF7CEBF1021FFF7D3 +:10A20000CBBF0321FFF7C8BF00F11601C07F3E227C +:10A210000830C0B20A704870801C70470B21FFF7ED +:10A22000BBBF0921FFF7B8BF0121FFF7B5BF00F1A0 +:10A2300018014A1CB0F819101180FFF7D1BC30B4D6 +:10A2400000F11801438BA0F819300A46CB1C0021FD +:10A250005418491C2479C9B203F8014B0529F7D3D6 +:10A2600030BCFFF7BDBC3E2181750C21C1750E20AD +:10A27000704700F118014A1C418B1180FFF7B0BCF8 +:10A280007CB515460D4A41F65154012809D00228E3 +:10A290000DD0042804D1CDE9003200238A1CA04748 +:10A2A0007CBDCDE900320123CA1C1846F7E7CDE991 +:10A2B00000320A1D2B460220F1E70000354F000056 +:10A2C00070B5044603790D4D90F90500E18804F15D +:10A2D0001802022B04D02B68BDE8704010441847C8 +:10A2E00093681688184418300A466D68014630464F +:10A2F000A8472046BDE8704012F062BED478002026 +:10A3000030B500F11601027E13200870012000EB29 +:10A3100082008B1C4870C91C002008E003EB40043D +:10A3200065880D80648A4C80091D401CC0B2904233 +:10A33000F4D39000C01C30BD10B50820FCF7F2F932 +:10A34000002010BD10B504460B48006840B1FAF774 +:10A3500079FB2046FFF7B4FFBDE81040FAF77CBB5D +:10A360000548002221461830FCF726FCBDE81040C5 +:10A37000042013F0C3B80000D4780020B0F81930DE +:10A38000A0F81930838B8383C28BC283FFF728BC6C +:10A3900000F118010A46491DD3880B8012894A80B2 +:10A3A000FFF71EBC0C2282750822C275428BA0F8F2 +:10A3B0001920027FC276C28B8283018CC1830A205E +:10A3C0007047438BA0F81930027FC276FFF708BCB4 +:10A3D000438BA0F81930027FC276FFF701BC000062 +:10A3E00070B50C460546FF2201231146002012F0ED +:10A3F000D3FE0D4BA0F118011A78521C1A700F22CF +:10A4000000F8062D0422427085701B78C370047119 +:10A41000230A43710A71FA2048710620C880BDE8FA +:10A4200070400846FFF78EBFF87800202DE9F04114 +:10A4300007460C4601201D46164600EB04210C235E +:10A4400005220848DDF8188012F0A6FE048005B148 +:10A4500001268670A0F804808760BDE8F04112F004 +:10A46000FBBF00000F00010070B514460D46024608 +:10A4700003230521044812F08FFE05808470BDE897 +:10A48000704012F0E9BF00000200050070B51D46E3 +:10A4900014460E46052302461946054812F07CFE76 +:10A4A00006808470A0F80350BDE8704012F0D4BF5D +:10A4B0000400050070B514460D460246032305212D +:10A4C000044812F069FE05808470BDE8704012F007 +:10A4D000C3BF00000300050070B5A1F11804A0F58A +:10A4E0008031373907D12046FFF726FCE080022073 +:10A4F0002071FC2017E0010C0425062923D2DFE897 +:10A5000001F003142206191D1A38144903E0A0F5BE +:10A51000403013492B3801EBC0062046716888474C +:10A52000E08025713078607112E0A0F580301A3833 +:10A530000C49F0E7A0F104100B49ECE7A0F5A020CE +:10A54000801E0A49E7E78C2209A10020FBF74CFA9C +:10A550002046FFF7F7FE012070BD0000984302007F +:10A560003844020038450200304602001846020016 +:10A57000626C655F686369635F7461736B2E63000F +:10A580002DE9FF41044610F8011B8DF800100178F9 +:10A590008DF8011000224578801C114601276B467A +:10A5A00007FA01F62E4206D002EB420603EB4606FE +:10A5B000521CB170D2B2891CC9B20229F0D9002153 +:10A5C0000EE000BF01EB410503EB450510F8016B00 +:10A5D000EE700688AE804688001D491CEE80C9B228 +:10A5E0009142EFD3032006E002EB420103EB41016D +:10A5F000521C8870D2B2022AF6D30E221946204687 +:10A60000F9F722FF204612F027FFBDE8FF81000086 +:10A61000014AC2E900017047D47800207047012048 +:10A62000704700002DE9F047042012F08DFBDFF8A1 +:10A63000B8804FF0000908F1180634686CB1E08862 +:10A64000401C87B2B8F82200B8421CD33046FCF751 +:10A65000E3FA2079022807D00FE0A8F82290BDE89D +:10A66000F0470220FCF75EB8206A417921F0200112 +:10A670004171C17921F08001C171204612F0A0FC26 +:10A68000A8F82290D9E72179022907D094F905305A +:10A6900004F118029D186D1E30B10EE094F90530DA +:10A6A000226AD5181835F6E72970207900B1012003 +:10A6B00040F2EF420DA1FBF797F90220FCF758F8A2 +:10A6C00044460BE0A1682069884700280AD1608CC5 +:10A6D000295C401C6084D4E903209047608CB84218 +:10A6E000ABD2EFE7BDE8F087D4780020626C655FFD +:10A6F000686369632E630000094A00F1130113784F +:10A700005B1C13700E23C374062303751278427505 +:10A71000028BC282827E0276808BC88008207047BE +:10A72000F87800200146024800683830FCF78BB802 +:10A73000BC3702000149096888637047BC370200D2 +:10A7400000B500F013F9002805D08069810401D418 +:10A75000400401D5012000BD002000BD084910B50E +:10A76000096802200968096911B18847002804D0E6 +:10A7700000F09AFB002801DD012010BD002010BD73 +:10A78000BC370200FFF7EABF10B50B4C2068006829 +:10A79000016919B10120884700280BD0206890F882 +:10A7A000521006A0FAF7D3FB206890F85200002858 +:10A7B00000D0012010BD0000BC370200636D642092 +:10A7C0007061636B657420307825780A00000000A2 +:10A7D00070B5094C2568143507E020681621408BB8 +:10A7E00000F05EF9284600F0E7FD20681430F4D14F +:10A7F000BDE8704000F06EBBBC3702002DE9F047A9 +:10A800004FF0000415460F000646A0467DD10020FB +:10A81000BDE8F08744284FD00EDC342828D006DC71 +:10A82000312816D0322814D0332832D120E04128E4 +:10A8300078D042282DD12DE04E284CD004DC45287C +:10A8400042D0482825D104E0502864D056287CD135 +:10A8500071E035F8040B1FFA80F806F804803878A8 +:10A86000641C322801D048286FD14FEA18200EE02E +:10A8700001CD3055641CC0F307213155641CC0F371 +:10A88000074131553978641C34295ED1000E3055AA +:10A89000641C5AE001CD41793155641C0179315570 +:10A8A000641CC1783155641C81783155641C417831 +:10A8B0003155641C0078EAE701CD3119083402688B +:10A8C0000A604068486040E002CD3019F022F9F794 +:10A8D000BBFDF03439E055F804AB5046F9F7E6FD1E +:10A8E0001FFA80F9B9F1F80F01D94FF0F8093019C2 +:10A8F0004A465146F9F7A8FDB9F1F80F09D204EB21 +:10A900000900C9F1F801304401E01FE00AE0F9F75D +:10A91000C2FDF83419E002CD30191022F9F794FD88 +:10A92000103412E002CD08F0FF023019F9F78CFD67 +:10A9300008F0FF0008E0301902CD814610F8012C24 +:10A94000F9F782FD19F8010C04447F1C38780028BF +:10A950007FF460AFA0B25BE70FB410B504AA03990F +:10A96000FFF74CFF10BC5DF814FB0000082805D26F +:10A970000349096801EB8000406970470020704777 +:10A98000BC37020038B50446FCF7B2F8616B42F2FE +:10A9900010721144884210D90848007800280CD160 +:10A9A00073208DF8000002208DF80100E088ADF8DA +:10A9B00002000421684600F087F838BDF800002046 +:10A9C0004FF0FF314180018070470000B0F9021064 +:10A9D000B0F90020914205D0082901DA0120704722 +:10A9E00000207047491C4180074A07E0136803EBC9 +:10A9F00081035B69002BF1D1491C4180B0F9021041 +:10AA00000829F3DBECE70000BC37020010B5044670 +:10AA1000B0F90200B4F90010884204D12046FFF7D3 +:10AA2000D5FF002804D0B4F90200082801DB00207B +:10AA300010BD03492080096801EB8000406910BD0A +:10AA4000BC3702000149012008707047F80000205F +:10AA500000B5FFF78BFF002803D0418A41F00801C1 +:10AA6000418200BD30B4044C2468002C02DB30BCB1 +:10AA700013F0A6B930BC7047FC000020074A30B480 +:10AA80001268546B002C06D00B46A44602460021E7 +:10AA900030BC0220604730BC70470000BC37020069 +:10AAA0001CB505228DF8002004228DF8012000221B +:10AAB0008DF80220ADF803008DF8051006216846D8 +:10AAC00000F002F81CBD0000FEB506460B480D461E +:10AAD000016868463831FBF7DEFE08E06846FBF7A0 +:10AAE000E0FE002144682B4632460420A047684619 +:10AAF000FBF7C2FE0028F1D1FEBD0000BC3702000A +:10AB000008B562208DF8000000208DF801000221B8 +:10AB10006846FFF7D9FF08BD08B512F0D7FF014618 +:10AB200008A0FAF714FA61208DF8000001208DF8D2 +:10AB3000010012F0CBFF8DF8020003216846FFF7F9 +:10AB4000C3FF08BD4254535441434B5F4556454EE5 +:10AB5000545F4E525F434F4E4E454354494F4E5300 +:10AB60005F4348414E474544202575007CB5044667 +:10AB700002460D4608A0FAF7EAF9E0208DF8000039 +:10AB800003208DF80100ADF802408DF80450052136 +:10AB90006846FFF799FF7CBD6863695F656D6974FE +:10ABA0005F73656375726974795F6C6576656C2037 +:10ABB000257520666F722068616E646C652025784B +:10ABC0000000000038B50B4C206890F868100AA00F +:10ABD000FAF7BDF960208DF8000001208DF8010022 +:10ABE0002068032190F868008DF802006846FFF79E +:10ABF0006BFF38BDBC3702004254535441434B5F96 +:10AC00004556454E545F5354415445202575000028 +:10AC10000FB438B50498416801B101210E4A00888B +:10AC20001268126853696A469847044600980028DB +:10AC30000DD00498416821B164B105AA2046FFF700 +:10AC4000DDFD2146009A049800F07EFB002038BC10 +:10AC50005DF814FB5620FAE7BC37020010B5FB2163 +:10AC600001805F218170002100F8031F6022417084 +:10AC70008170C1700271417140228271C1711649A7 +:10AC80000A6882604968C16014490C46B1F85221D3 +:10AC90000282B1F85421428204F18002436944F8EF +:10ACA000DC3F83696360C3F3407381F8EC30C169B2 +:10ACB0005166016A9166416A1167816A5167102184 +:10ACC00000F82C1F40F27261A0F801100821C17039 +:10ACD0000521017110BD0000743E02003075002096 +:10ACE00070B5104C0E460546E0212068F9F7D3FBFD +:10ACF0002068056020684660E9680B48884721683D +:10AD0000002081F868002268084911642268012146 +:10AD100082F88A10226882F85110216881F88C002C +:10AD200070BD0000BC37020009DB01000C027A0094 +:10AD300040F2112202A10020FAF756FE72B6FEE799 +:10AD40006863692E6300000010B501780E2927D1D1 +:10AD5000144CB0F80300216891F96910491C1FD107 +:10AD600018B11149098881421AD12168002081F85F +:10AD70006900216881F8DE0020686C30FBF7BAFEBC +:10AD800000F0A0FA2168012081F869002168022002 +:10AD900081F86800FFF716FFBDE8104000F09EB98B +:10ADA00010BD0000BC370200783A020010B5FFF772 +:10ADB000EBFC104C0246206890F969100EA0FAF7DF +:10ADC000C6F8206890F96900B0F1FF3F10D1206803 +:10ADD000154A6C3081210446FBF7AAFE0022134974 +:10ADE0002046FBF7BDFE2046BDE81040FBF772BED3 +:10ADF00010BD0000BC3702006863695F696E69744A +:10AE000069616C697A696E675F72756E3A207375F5 +:10AE10006273746174652025752C2063616E2073E4 +:10AE2000656E642025750000400D030031AD000003 +:10AE300002F0D2B902F011B900487047083E020092 +:10AE40000248006890F8DE0070470000BC3702003E +:10AE5000044909685E3102D008B101207047002022 +:10AE600070470000BC37020000B50A46FFF77EFDC0 +:10AE7000002804D090F8810010B10AB1012000BD73 +:10AE8000002000BD02480068B0F854007047000080 +:10AE9000BC3702000348006890F85C00C0F38010E3 +:10AEA00070470000BC37020010B5094C002108466D +:10AEB000D4F8003003EB8002526912B192F84020BE +:10AEC0001144401C0828F5DB93F85300401A10BDCC +:10AED000BC37020070B52C4C05462946206890F816 +:10AEE00068202AA0FAF733F820680522022190F89A +:10AEF00068600320062E40D2DFE806F003101C2015 +:10AF0000302C35B3012D38D100F078F804002ED064 +:10AF1000014628A0FAF71BF8204670BD25B1012D87 +:10AF20002BD0022D29D102E000F054F825E000F0EA +:10AF30008BF822E0F5B1012D03D11EE04DB1012DBA +:10AF400015D0022D19D1206880F86820206880F87B +:10AF5000691012E075B1012D0FD108E055B1012D36 +:10AF60000BD12068C06810B1006900B1804700F0C3 +:10AF70007BF802E0216881F86800FFF723FE00F00B +:10AF8000ADF8002070BD0000BC3702006863695F47 +:10AF9000706F7765725F636F6E74726F6C3A2025A5 +:10AFA000752C2063757272656E74206D6F646520F8 +:10AFB000257500006863695F706F7765725F636F06 +:10AFC0006E74726F6C5F6F6E2829206572726F727B +:10AFD0002025750010B5084C2068006880688047FF +:10AFE0002068C06810B1806800B1804721680020E7 +:10AFF00081F8680010BD0000BC37020070B5114C2C +:10B000002068C06820B1406810B18047050012D1A7 +:10B0100020680068016811B120684068884720688E +:10B02000006840688047050009D02068C06810B1FA +:10B03000806800B18047FFF763FD284670BD00209F +:10B0400070BD0000BC37020010B5064C2068C06817 +:10B0500010B1C06800B180472168042081F8680001 +:10B0600010BD0000BC37020006480121026882F8CA +:10B070005210026882F868100068FF2180F8691099 +:10B0800070470000BC3702000149096848637047F7 +:10B09000BC37020000B5FFF769FC002800D0C07D76 +:10B0A00000BD00002DE9F0410B4D07462868C46B38 +:10B0B0000AE0266827B12968E06809688969884735 +:10B0C0002046FBF719FC3446002CF2D129680020F9 +:10B0D000C863BDE8F0810000BC37020070B54B4D7D +:10B0E000286890F88C0020B12968002081F88C0035 +:10B0F00070BD0021286800EB81004069B8B3428A26 +:10B10000D30706D091B221F001014182C1884048A5 +:10B110001CE0130706D591B221F008014182C188D5 +:10B12000052209E0D30609D591B221F0100141F4BE +:10B1300080714182C1881322364814E0930609D5F4 +:10B1400091B221F020014182C1883348BDE87040AE +:10B15000FFF75EBD52060AD5418A012221F0400167 +:10B160004182C1882D48BDE87040FFF751BD491CA0 +:10B170000829BFDB00F050F9286890F86800012822 +:10B180000ED022490C68143403280DD00528AFD105 +:10B19000286890F9690002281ED00428A8D12FE061 +:10B1A000BDE87040FFF702BE9CB1E588FFF7ECFAFE +:10B1B00000289DD02A46214619A0F9F7C8FE16217D +:10B1C0002846FFF76DFC204600F0F6F813222946CA +:10B1D000B2E7FFF7FFFE15E094B1FFF7D5FA0028BC +:10B1E00086D0E288214619A0F9F7B1FEE188132242 +:10B1F0000848FFF70DFD2046BDE8704000F0DCB8C0 +:10B20000FFF722FFBDE87040FFF7DCBCBC3702004F +:10B21000683A0200503A0200583A0200603A0200CE +:10B220004843495F53544154455F48414C54494E4B +:10B23000472C20636F6E6E656374696F6E20257096 +:10B240002C2068616E646C65202575004843495F59 +:10B2500053544154455F46414C4C494E475F41531E +:10B260004C4545502C20636F6E6E656374696F6E3C +:10B270002025702C2068616E646C652025750000A7 +:10B280000FB42DE9F0410D460646FFF76FFB0400B1 +:10B290000BD00B4809ABBDF8202000682946006898 +:10B2A000076A3046B84720B15720BDE8F0015DF885 +:10B2B00014FB14F8400F401C20700020F5E700003C +:10B2C000BC37020000B58DB034216846F9F7E3F8C9 +:10B2D0004FF0FF30CDF817008008CDF81B004FF479 +:10B2E0000000CDF81F001648CDF827006846FFF78C +:10B2F000B5FC1448BDF800100268A2F854100268AA +:10B300009DF8021082F853100168DDF8032041F81F +:10B31000562FDDF807204A600168DDF80B2041F860 +:10B320005E2FDDF80F204A600268BDF81310A2F806 +:10B33000DA100068BDF81510A0F8DC100DB000BDE3 +:10B340007FFEFF00BC3702002DE9F041144C0F4690 +:10B350000546206821681646B0F88600C96B084388 +:10B36000206812D090F8520000B1401E216881F888 +:10B3700052001020FBF7BEFA021D0146E0C2206811 +:10B38000BDE8F0413C30FBF75EBA00683146C26967 +:10B390003846904721682888A1F88600BDE8F081EA +:10B3A000BC37020003490A68D0600968026849682E +:10B3B00008461047BC37020010B50446FBF772F987 +:10B3C0000246E1880AA0F9F7C2FD04F11C00FBF770 +:10B3D00091FB2046FBF798FA0E4AE188002012689C +:10B3E00002EB81014861BDE81040FFF795BB00000A +:10B3F000436F6E6E656374696F6E20636C6F736507 +:10B40000643A2068616E646C6520307825782C2061 +:10B4100025730000BC3702000F4810B50168B1F871 +:10B420008610002917D10168CC6B002C13D002685C +:10B430002168D163616802680988A2F886100068F3 +:10B44000D4E902120068C369104698472046BDE857 +:10B450001040FBF751BA10BDBC370200024800682B +:10B46000B0F8660070470000BC37020030B589B004 +:10B470000525144601950C9A06250DF10C0C029534 +:10B480000692ACE81900ADF81C1010490978C907FC +:10B4900005D0C0B2012300222146FEF7F1FE0C4880 +:10B4A00000235A1E6946006817F0B8F844B2012C10 +:10B4B00008D00020382207A1FAF796FA012C03D011 +:10B4C00072B6FEE70120F5E709B030BD00000020AC +:10B4D00008000020636F6E74726F6C6C657274612B +:10B4E000736B2E630000000008B5009313460A46F4 +:10B4F00001460220FFF7BAFF08BD0000F8B5044678 +:10B50000094815460E460078400704D56278207831 +:10B51000A11C16F065F9334622460021042000954F +:10B52000FFF7A4FFF8BD00001C00002070B5084A1A +:10B5300005460C461278D00703D00122284601F0B8 +:10B5400013FE21462846BDE8704001F077BE00009A +:10B550000000002010B50020F9F748FC0120F9F7A1 +:10B5600045FC0020F9F75AFC0120F9F757FC0720A9 +:10B57000F9F754FCBDE810401320F9F74FBC000068 +:10B580000149086070470000F0010020002070476A +:10B590000020704750F831201AB100EBC10040681C +:10B5A000104700207047000010B5114B0C461049A1 +:10B5B00053F8303001EBC00112B172B60BB907E09D +:10B5C00023B149682046BDE810401847002010BD4F +:10B5D000052806D007280AD1214606A0F9F786FCDF +:10B5E00005E00648D0E9001205A0F9F77FFCFEE768 +:10B5F000A00400206F6F6D2564000000140000207F +:10B600005B4552525D4025733A25640001B5002226 +:10B6100069461046FFF7C8FF08BD70B5022100203B +:10B62000F9F714FC02210120F9F710FC022460B2A2 +:10B6300003210546F9F70AFC2846F9F7E3FB641CE9 +:10B64000E4B21C2CF3D970BD182804D018B101281D +:10B6500001D00020704701207047C068884201D1A6 +:10B66000012070470020704710B504460C2208499D +:10B67000F8F723FF38B9064902220E3104F10E0013 +:10B68000F8F71BFF08B1002010BD012010BD00001D +:10B69000683502000348026812B141680020104773 +:10B6A00000207047B804002070B5B1F80140058F44 +:10B6B000B1F80330A54209D1448F9C4206D1006CF9 +:10B6C000521F2044491DF8F7F8FE08B1002070BD54 +:10B6D000012070BD074910B5496919B10548FBF74C +:10B6E00042FA01E0002804D0BDE81040002000F03C +:10B6F0000FB810BD5C6E002008B5002000906946B0 +:10B70000024800F0D1F8009808BD0000716D0000FB +:10B7100004480268002A03D04FF4806102481047B1 +:10B72000704700000C0100205C6A002010B50C4638 +:10B7300000F09EF8002804D014B10178891E218001 +:10B74000801C10BD2DE9F0410F46804600221349B0 +:10B750001348FBF705FA41F2883240F681011048A0 +:10B76000FBF7E6F90F4C0025A61C258047B14FF4E6 +:10B7700080612046B847208840F2FD31884204D8D5 +:10B7800020888555FFF7B8FF00B12580208806493D +:10B790008555C1F80080BDE8F081000011B70000B8 +:10B7A0005C6E00205C6A00200C0100202DE9F0474F +:10B7B00016468A468146FD2A15DC00F059F8B41C6D +:10B7C00050B10178A14205D132465146801CF8F7AC +:10B7D0003BFE20E000F032F8114940F2FD330888CA +:10B7E00002199A4202D90120BDE8F0870C4F884621 +:10B7F000BF1CC51932462C7085F801905146A81C13 +:10B80000F8F722FEB8F800002978084480B2A8F8BA +:10B8100000000021C15500F03BF80020E4E70000E3 +:10B820005C6A002010B500F023F8002805D000F075 +:10B8300005F8BDE8104000F02BB810BD10B5074C5E +:10B840000278238811189A1A92B22280F8F7FCFD28 +:10B8500000212288A01C115410BD00005C6A002049 +:10B86000024800210180817000F012B85C6A00205B +:10B8700010B50649034608460A7822B144789C422E +:10B8800002D01118F7E7002010BD00005E6A00200A +:10B8900003484069002802D00148FBF73BB97047D4 +:10B8A0005C6E0020FFF7F4BF2DE9F041094D0F4613 +:10B8B00006462A782C46002A09D0921E60783B461C +:10B8C000A11CB047002802D120780544F1E7BDE86B +:10B8D000F08100005E6A00202DE9F0411188D088D7 +:10B8E000C1F30B081C491F461446A3F1080602F1D8 +:10B8F0000805042810D005281FD0062814D000F011 +:10B90000E9FA010004D0B3B22A460220F9F716FA88 +:10B91000BDE8F04100F0D8BF0C68002CF8D0B3B2FD +:10B920002A464146082006E08C68002CF0D0B3B2CD +:10B930002A4641460920A047EAE7082508E066199B +:10B940003146404600F048FD70882D1D284485B2E0 +:10B95000BD42F4D3DCE70000506F002001460148EF +:10B96000FAF771BF24010020FEF70CBF10B500F0FC +:10B97000B1FA002804D0408DBDE81040FEF702BFA8 +:10B9800010BD00002DE9F04115460E46074600F0B7 +:10B99000A1FA040010D0E08FA8B1642D16D8ADB183 +:10B9A00094F844100120884394F84310884210D141 +:10B9B0006FF00400BDE8F081394616A0F9F7C8FA27 +:10B9C0004FF0FF30F6E76FF00500F3E76FF003008C +:10B9D000F0E784F8440004EB40002A46A0F8465003 +:10B9E00094F8440000F0010000EBC00101EB0010EE +:10B9F000124901EB80003146F8F726FD94F8430028 +:10BA0000FF2802D1002084F843002046BDE8F04121 +:10BA1000F9F79EB86C326361705F73656E64206E77 +:10BA20006F206368616E6E656C20666F722063695B +:10BA3000642030782530327800000000746E0020D9 +:10BA40002DE9F047824698469146104600F060FA8C +:10BA500006464046FEF78AFF050005D014F082F93D +:10BA60006FF0010740B112E0414625A0F9F770FAE6 +:10BA70004FF0FF30BDE8F087307C012802D995F8FF +:10BA80006810D1B3032802D195F86900A8B3FAF77A +:10BA900091FF040032D04C21F8F7FDFC294604F157 +:10BAA0002400FAF7FAFDA4F83890A4F82A80F06888 +:10BAB000606000F0BFFDE0854FF6FF702086F088E3 +:10BAC000642800D9642060861720A086307C84F822 +:10BAD0003A00A4F840A0FF2084F8440084F8430012 +:10BAE0000E2084F820000020608421460C48FAF7DC +:10BAF0009FFE00F0E9FE0020BCE7FFE73846B9E70B +:10BB00006E6F206863695F636F6E6E656374696FE3 +:10BB10006E20666F722068616E646C65202575000A +:10BB2000140100202DE9F0471D461646894680463F +:10BB3000089FFAF73FFF04464846FAF7B3FD01466F +:10BB40002B46324618A0F9F703FA54B34C2120468D +:10BB5000F8F7A1FCF72D00D9F725494604F1240098 +:10BB6000FAF79BFD1C343020A6830026E68144F8BA +:10BB7000188C2083E58200F05DFD60820220207138 +:10BB8000E68026746674A0771C3C21461248FAF7BA +:10BB90004FFE0FB1E08D388000F096FE0020BDE82A +:10BBA000F0875620FBE700004C324341505F435280 +:10BBB000454154455F4348414E4E454C20616464C5 +:10BBC000722025732070736D2030782578206D7475 +:10BBD0007520257500000000140100202DE9F041BA +:10BBE0000824069D4180027106464371122A01D342 +:10BBF000921FD2B2184800EB820050F8047C21E07A +:10BC0000312804D0322802D044281AD10DE035F86A +:10BC1000040B80B23055641C3978A4B2322910D19B +:10BC2000000A3055641CA4B20BE0288869681FFA2A +:10BC300080F8083530194246F8F706FC04EB080096 +:10BC400084B27F1C38780028DAD1201F3080001F92 +:10BC5000F0802046BDE8F0813401002070B50D462B +:10BC6000064600F037F904462A46314605A0F9F7A2 +:10BC70006FF914B10C2084F82000BDE8704000F08A +:10BC800023BE00004C324341505F444953434F4E62 +:10BC90004E454354206C6F63616C5F636964203070 +:10BCA00078257820726561736F6E20307825780072 +:10BCB00030B40D464468C18D2846A44630BC604768 +:10BCC00038B505460C460BA0F9F742F978208DF8F7 +:10BCD000000002208DF801000423ADF802406A46FE +:10BCE00000211846FEF7BEFE04236A462146184688 +:10BCF000A84738BD4C324341505F4556454E545FCE +:10BD00004348414E4E454C5F43414E5F53454E4480 +:10BD10005F4E4F57206C6F63616C5F6369642030C6 +:10BD20007825780038B50446C18D0CA0F9F710F9D4 +:10BD300071208DF8000002208DF80100E08DADF833 +:10BD4000020004236A4600211846FEF78BFE0423F6 +:10BD50006A4619462046FFF7ABFF38BD4C324341D7 +:10BD6000505F4556454E545F4348414E4E454C5FEB +:10BD7000434C4F534544206C6F63616C5F6369644F +:10BD80002030782578000000F0B5044624308DB0CE +:10BD90000D460646FAF786FC0246208E0DF1080C89 +:10BDA000E78EA38E618EACE88B00E18D208FCDE90C +:10BDB0000001638D29461948F9F7CAF870208DF8FB +:10BDC000180015208DF819008DF81A500DF11B017F +:10BDD000304612F0EEFE608DADF82100208FADF8F8 +:10BDE0002300E08DADF82500208EADF82700608E91 +:10BDF000ADF82900A08EADF82B00E08EADF82D0037 +:10BE0000172306AA00210420FEF72CFE172306AAFA +:10BE100004212046FFF74CFF0DB0F0BDE03B0200CF +:10BE200030B50446243087B00546FAF73BFC01469E +:10BE3000228EE08DCDE90002238F628D1348F9F741 +:10BE400087F872208DF808000E208DF809000DF19A +:10BE50000A01284612F0ADFE608DADF81000208F6B +:10BE6000ADF81200E08DADF81400208EADF816008C +:10BE7000102302AA00210420FEF7F4FD102302AAD9 +:10BE800004212046FFF714FF07B030BD983C0200A4 +:10BE900010B50446012084F820002046FFF742FF39 +:10BEA000204600F0DDFF21460348FAF713FD204647 +:10BEB000BDE81040FAF778BD14010020042804D032 +:10BEC000062804D04FF0FF30704700207047012053 +:10BED000704700003EB5044608496846FAF7DBFCA7 +:10BEE00005E06846FAF7DDFCC18DA14204D0684642 +:10BEF000FAF7C2FC0028F4D13EBD00001401002076 +:10BF000010B5FFF7E7FF002800D0808E10BD0000BD +:10BF10003EB504460C496846FAF7BDFC0DE068469C +:10BF2000FAF7BFFC05468188224608A0F8F7DEFF35 +:10BF3000A888A04201D128463EBD6846FAF79CFC7D +:10BF40000028ECD13EBD0000180100206C655F7038 +:10BF5000736D3A20307825782C307825780A0000E7 +:10BF60002DE9FE4F0746984692468B461046FFF74E +:10BF7000CFFF05000CD03846FEF7F8FC060009D0CC +:10BF800044463F496846FAF786FC4FF0000914E042 +:10BF9000022335E003B03946BDE8F04F39A0F8F789 +:10BFA000D7BF6846FAF77DFC018EA14205D1428DCC +:10BFB000BA4202D130B10A2322E06846FAF75CFCAB +:10BFC0000028EED1FAF7F6FC040005D0287C022800 +:10BFD00010D003280BD01BE0042311E008230FE04E +:10BFE00096F86A00697C884212D2072308E096F826 +:10BFF000690020B196F868000028F1D1EEE705232A +:10C0000003B05A463846BDE8F04F142100F0D4BBC7 +:10C010004C212046F8F73FFA314604F12400FAF7A4 +:10C020003CFBA4F838A06785E868606000F002FB7C +:10C03000E085A4F83080E888642800D9642024F8DA +:10C04000320F0D98608004F806BC287C20720C9892 +:10C05000A08184F81390FF21A1746174162104F863 +:10C06000121C24F8109C323C21460EA0F8F73EFF2B +:10C0700021460348FAF7DCFBBDE8FE4F00F024BC84 +:10C08000140100206E6F206863695F636F6E6E65D8 +:10C090006374696F6E20666F722068616E646C6590 +:10C0A00020257500746865206368616E656C2031B9 +:10C0B0003A2030782578200A000000007FB5044639 +:10C0C00088890D46ADF80000012650B1801E002180 +:10C0D000092844D2DFE800F0354335181818182F26 +:10C0E0002F00204600F0BCFEE888A0866889E08723 +:10C0F000A888208684F842600A2084F82000632102 +:10C100002046FFF741FE2AE0164901A8FAF7C3FBD3 +:10C1100008E001A8FAF7C5FB02234568618D6A466D +:10C120000A20A84701A8FAF7A7FB0028F1D114209C +:10C1300084F8200013E0618400F0C6FB012004B005 +:10C1400070BD84F820606184204600F089FE0548B7 +:10C1500021461038FAF7BEFB2046FAF725FC0020EE +:10C16000EDE700002401002091F82020032A01D0EF +:10C17000022A03D14885042081F82000704700007E +:10C1800010B5044690F8200004281AD1208F00F042 +:10C190003BFD0246218F0B48F8F7DAFE608DFCF775 +:10C1A00005F800280DD0208F00F02EFD002808D1C2 +:10C1B000062084F82000608DBDE810400221FBF7C6 +:10C1C000C5BC10BDF43C0200FEB510780326144631 +:10C1D0003E2842D00CDC0E2817D004DC052817D0EE +:10C1E0000B2814D16DE00F280FD01328F9D12FE0C0 +:10C1F0006E282DD0732846D0E02879D0FB28F0D1C6 +:10C200005088FEF7B3FB01213AE000F05DFBA6E0A9 +:10C21000B2F8035053496846FAF73DFB12E068460E +:10C22000FAF73FFB0446408DA8420BD12046FFF7AA +:10C2300079FD204600F014FE6846FAF743FB2046DD +:10C24000FAF7B2FB6846FAF717FB0028E7D186E059 +:10C2500000F03AFB00F002FA81E0A07803287ED1DA +:10C260009088FEF783FB002879D090F841100029D0 +:10C2700075D0017C012902D080F841606FE0002177 +:10C2800080F841106BE054882046FEF759FA38BB1D +:10C2900034496846FAF7FFFA05E06846FAF701FB09 +:10C2A000408DA0425BD06846FAF7E6FA0028F4D148 +:10C2B000FEF76AFAA0B1132221462B48FEF7A8FC2C +:10C2C0004DE0B2F8034027496846FAF7E4FA09E07E +:10C2D0006846FAF7E6FA418DA14203D1FFF750FF15 +:10C2E0003DE005E06846FAF7C7FA0028F0D136E0ED +:10C2F00067881C496846FAF7CEFA2BE06846FAF7D9 +:10C30000D0FA0546408DB84224D115F8201F17A059 +:10C31000F8F71EFEA87E15F820292179052A02D0FB +:10C32000062A17D10DE0814206D3072085F82000A8 +:10C330002846FFF775FD0DE020351720EE762870B2 +:10C3400008E0814203D30E2085F8200002E0384641 +:10C35000FEF77EFB6846FAF78FFA0028CED100F090 +:10C36000B3FAFEBD14010020503A02006C32636142 +:10C3700070202D2073746174652025750000000005 +:10C380000D4910B50020C86048600C4A88600861FB +:10C39000D06510665066906688701831084848600D +:10C3A0000846FEF7BFF90748FEF76EFEBDE81040ED +:10C3B0000020FBF7B9B9000010010020F46E002046 +:10C3C000C9C10000D9B8000008B5009313460A4659 +:10C3D000162100F0FDFC08BD2DE9F0470C460E7853 +:10C3E0004978DFF840A28EB081460F46132E14D054 +:10C3F00008DC012E7ED0062E7DD0072E0DD0122E09 +:10C4000006D110E0142E7CD0152E06D0162E74D036 +:10C410000A4600231F2100F0CFF9824904A8091D14 +:10C42000FAF739FAF8E076208DF81C0008208DF82C +:10C430001D00E068CDF81E002069CDF82200022022 +:10C44000FEF706FD012805D102214846FEF70CFD46 +:10C4500001287DD04846FEF789FA05003AD0287CAD +:10C46000002875D10AA8FBF74DFAA288E388218934 +:10C470006089A2F1060840F67A4CE04525D8A3F180 +:10C480000608E04521D89A421FD8B1F5FA7F1CD89A +:10C490000A281AD3B0F5486F17D80C354FF0020CA4 +:10C4A00085F835C02A876B87A987E8874FF6FF7C18 +:10C4B0004FF00008CDE90010CDE9028C35F8061CDC +:10C4C0000C3D5948FEF7A4FB02E0052085F8410029 +:10C4D00085F842700A2307AA00210420FEF7C2FA59 +:10C4E000DAF81050002D98D00A23002107AA042062 +:10C4F000A84703E033E01BE003E00CE00EB0BDE82A +:10C50000F08725892279A089E388CDE9000548468E +:10C51000FFF726FDEDE7A088E588FFF7DBFC804606 +:10C5200001222946F8F7E5FB4046F8F7B1FB74E72E +:10C53000A0883D46FFF7CEFC90F82010092905D0D1 +:10C540000A2903D00C2901D00B29F0D1203000E0BA +:10C5500031E005730D21017000F0B6F95DE7314956 +:10C560006846091DFAF797F9002507E06846FAF7CB +:10C5700098F9054690F82D00B84204D06846FAF7BD +:10C580007BF90028F2D1002DD1D02846FFF780FC9E +:10C5900043E704A8FAF785F9428D4A453CD190F863 +:10C5A0002D10B942A5D1012EA3D0072E12D0132EE3 +:10C5B00017D0152E06D000233A461F21484600F01A +:10C5C000FBF896E790F820100F2992D12146FFF74B +:10C5D00075FD8EE790F820100B298AD1FFF758FCE3 +:10C5E00087E7A08977228DF8002004228DF80120AA +:10C5F000ADF80400ADF8029006236A46002104203D +:10C60000FEF730FADAF81040002CDAD006230021C9 +:10C610006A460420A0476CE704A8FAF72DF9002821 +:10C62000B7D166E710010020C03A0200F72070473A +:10C63000F720704702494888421C4A807047000032 +:10C640003001002004490878FF2803D0401C0870FE +:10C65000C0B270470120FAE730010020FEB51D4945 +:10C660006846FAF718F9002610E06846FAF719F953 +:10C67000044690F83C0048B1608DFEF783F828B17D +:10C6800084F83C60E18D6068FFF71AFB6846FAF7B2 +:10C69000F3F80028E9D1104D002400BF55F834000C +:10C6A00080B105EBC407387960B1FEF757F848B19F +:10C6B0003E715CB1012C0BD05FF0000155F83400E5 +:10C6C000FFF7FEFA641C022CE8DBFEBD0421F5E74F +:10C6D0000621F3E714010020506F002010B5044636 +:10C6E0000846FFF7EBFB002802DB024941F8304027 +:10C6F00010BD0000506F0020014908617047000024 +:10C70000100100202DE9F0410646984615460C46DA +:10C710000846FFF7FDFB07462A4621460EA0F8F71C +:10C7200017FC37B1214616A0F8F712FC6920BDE8C6 +:10C73000F081FAF74BF901000CD08C80CD80CE60EF +:10C7400081F810801B48FAF773F80120FAF7ECFF24 +:10C750000020ECE75620EAE74C324341505F524557 +:10C760004749535445525F534552564943452070FB +:10C77000736D2030782578206D7475202575000044 +:10C780006C326361705F72656769737465725F7341 +:10C790006572766963653A2050534D202575206196 +:10C7A0006C7265616479207265676973746572651E +:10C7B0006400000018010020F0B40A4DEC68032C5E +:10C7C0000EDA094E04EB4407641C26F8170006EB4A +:10C7D0004700C17082708380EC60F0BC00F074B8D8 +:10C7E000F0BC7047100100203C6F002010B50846D7 +:10C7F000FFF764FB002808DB044A012102EBC000BC +:10C800000171BDE81040FFF729BF10BD506F002037 +:10C8100010B5FFF75FFB002806D0012180F83C101F +:10C82000BDE81040FFF71ABF10BD2DE9F0411C46CE +:10C8300015460E46069FFEF799F860B120F8446F42 +:10C84000012145808480C78000F8031C00F03CF87B +:10C850000020BDE8F0810220FBE700000149012033 +:10C86000887070471001002010B5044601460B483F +:10C87000F9F7F9FF002810D0E18D09A0F8F768FB5F +:10C8800068212046FFF780FA21460448FAF722F88B +:10C890002046BDE81040FAF787B810BD140100200B +:10C8A0006C326361705F7274785F74696D656F7507 +:10C8B0007420666F72206C6F63616C206369642002 +:10C8C00030782530327800002DE9F04387B0AE4D46 +:10C8D000AE4E002438E02F883846FDF753FFB0B342 +:10C8E000F06895F80290401EAB8895F8038000210F +:10C8F000F0600CE001EB410205EB4202491CD2F86A +:10C9000006C0C2F800C0B2F80AC0A2F804C0814252 +:10C91000F0DBB8F1140F0DD0B8F1160F14D0B8F148 +:10C920001F0F11D100944A4601213846019400F0AE +:10C930004FFA09E0CDE902430094019400234A46EE +:10C940001521384600F044FAF0680028C3D18F4919 +:10C9500004A8091DF9F79FFF18260127CAE004A8BB +:10C96000F9F79FFF054690F820000D2844D008DC19 +:10C9700005280DD007280BD00A28EFD00C28EDD1C0 +:10C980004EE00E2860D016287ED01728E6D116E09B +:10C99000688DFDF7F7FE0028E0D0688C4105DDD5F5 +:10C9A00020F480606884288ECDE900070294EB8D26 +:10C9B00095F82C20688D152100F00AFA9AE0688D10 +:10C9C000FDF7E0FE0028C9D005F8206FE87E298A2F +:10C9D000CDE900100294EB892A7B6889203D15215E +:10C9E00000F0F6F9284600F03BFA04A8F9F76AFFD0 +:10C9F0002846F9F7D9FF7DE0688DFDF7C3FE0028D2 +:10CA000078D085F82060288E0090EB8D95F82C204A +:10CA1000688D072100F0DCF92846FFF739FA69E054 +:10CA2000688DFDF7AFFE002864D0FFF70BFE2035C0 +:10CA3000024668730B202870E88900902B8A688969 +:10CA4000062100F0C5F955E0688DFDF79BFE002832 +:10CA500050D0FFF7F7FD2035024668730F2028708D +:10CA6000688A298CEB89CDE90030CDE902012B8B56 +:10CA70006889203D142100F0ABF92846AD6100F033 +:10CA8000EFF9E98D42A000E013E0F8F761FA2A46D9 +:10CA900005F1080048490546FAF762F842F21072BB +:10CAA00040F281112846FAF743F82846FAF712F8BF +:10CAB00020E0688DFDF766FEE0B10A2085F82000D1 +:10CAC00085F842705220A5F84000298E2A463BA0E6 +:10CAD000F8F70CFA63212846FFF756F92A3501AA20 +:10CAE000E98A2889009013C2AB88AA782888152182 +:10CAF00000F06EF904A8F9F7BFFE00287FF42FAF0D +:10CB000003A8FDF75DFF36E003A8FDF77FFF0546AC +:10CB1000007A08B101282ED1E888FDF733FE50B322 +:10CB200095F84100012804D0032814D0052822D10B +:10CB300018E024352AA06C77F8F7D8F9688CEA8CCD +:10CB4000A98C8DE807002B8CAA7F35F81E0C1221CA +:10CB500000F03EF90FE085F8414095F84220E88862 +:10CB6000002305E085F8414095F84220E88801233C +:10CB7000132100F02DF903A8FDF728FF0028C3D1E9 +:10CB800007B0BDE8F08300003C6F002010010020DA +:10CB90006C326361705F73746172745F7274782059 +:10CBA000666F72206C6F63616C20636964203078FB +:10CBB000253032780000000069C8000074686520E4 +:10CBC00072656D6F7465206964203D30782578202A +:10CBD0002C2061646472203D307825780A000000C2 +:10CBE00073656E6420636F6E6E656374696F6E202B +:10CBF0007570646174652066726F6D206C3263615C +:10CC0000702E630A20000000012802D103488078BA +:10CC100008B100207047012070470000100100207B +:10CC20002DE9FF4115460E460746FFF753F904006C +:10CC300004D0FEF72FF950B1002109E039460CA0CD +:10CC4000F8F786F94FF0FF3004B0BDE8F08102211B +:10CC5000ADF80C50208EADF80E0004200090CDE908 +:10CC600001652D1DAAB2608D03ABFEF709FBEBE752 +:10CC70006C326361705F73656E64206E6F206368F1 +:10CC8000616E6E656C20666F722063696420307817 +:10CC900025303278000000002DE9F04786B01C46B0 +:10CCA000DDE90E9690460D468246FEF7F3F808B190 +:10CCB000002700E002272A4651460CA0F8F748F961 +:10CCC000A019ADF81400ADF816500421CDE90018F4 +:10CCD000001DCDE9024982B20496394605AB5046A3 +:10CCE000FEF7CEFA06B0BDE8F08700006C32636153 +:10CCF000705F73656E645F70726570617265645FAA +:10CD0000636F6E6E656374696F6E6C6573732068B4 +:10CD1000616E646C652025752C2063696420307811 +:10CD200025303278000000002DE9FF4F89B01C4605 +:10CD3000DDE918A5DDE916B691468846FEF7AAF8A2 +:10CD400008B1002700E0022742460EA00999F8F733 +:10CD5000FFF8A0192844ADF81C000422ADF81E808D +:10CD6000CDE90029CDE9024B0496CDE905A5001DCA +:10CD700082B2394607AB0998FEF782FA0DB0BDE8DA +:10CD8000F08F00006C326361705F73656E645F707A +:10CD9000726570617265645F636F6E6E65637469FE +:10CDA0006F6E6C6573732068616E646C65202575A9 +:10CDB0002C20636964203078253032780000000030 +:10CDC00008B5134600917722082100F001F808BD4C +:10CDD0000FB470B50C460546FDF7D4FC68B121468A +:10CDE00007A0F8F7B5F807AB9DF8182021462846AC +:10CDF00000F018F870BC5DF814FB5720FAE700004B +:10CE00006C326361705F73656E645F7369676E61D6 +:10CE10006C696E675F7061636B65742074797065AF +:10CE2000202575002DE9F8431D4616460F4680461D +:10CE3000FEF730F808B1002400E0022433463A46F9 +:10CE4000052106480095FEF7C9FE02460090034BF7 +:10CE500021464046FEF714FABDE8F883606F0020D3 +:10CE600010B50446C18D0448F8F772F804F10800C3 +:10CE7000BDE81040F9F73EBE743C020070B50546AF +:10CE8000FFF746F8044629460BA0F8F761F8002C96 +:10CE900010D021461148F9F71DFD2046F9F790FD05 +:10CEA0000E48F9F7DAFC002804D0BDE870400020F5 +:10CEB000FAF73ABC70BD00004C324341505F554E0A +:10CEC00052454749535445525F534552564943458D +:10CED0002070736D20307825780000001801002044 +:10CEE0002DE9FC4705464FF0FF300027CDE900074C +:10CEF00091461E4688466A46284600F061F80400BE +:10CF00002BD101A92248FEF7CFFC00200199012373 +:10CF100003FA00F20A4200F1010007D00428F7DB0F +:10CF20000098002804DA0020BDE8FC870090F8E7AC +:10CF3000C0B25C220021FEF739FC00980021C0B28B +:10CF4000FEF7F4FB04465C21F7F7A5FA2570D8F844 +:10CF500000106160B8F8040020814046F9F7A2FB98 +:10CF6000024629460BA0F7F7F4FF494613A00FF03D +:10CF700097FE1022494604F10A00F7F765FA676444 +:10CF8000FEF790FC0EB1009830602046CCE7000020 +:10CF90000D23020043656E7472616C2044657669EE +:10CFA000636520444220616464696E67207479700F +:10CFB00065202575202D20257300000069726B0007 +:10CFC0001FB5084B1446D3E902238DE80F006946CC +:10CFD0000548FEF769FC0CB102982060039804B084 +:10CFE00010BD0000443D0200256E0000C0B20021CB +:10CFF000FEF79CBB406870470078704700210170C5 +:10D000004160704710B504460020606005E00021D3 +:10D01000FEF78CFB08B1606010BD2078401C2070CA +:10D02000C0B20528F3D3002010BD002802DBC0B237 +:10D03000FEF7F8BB704738B10C2807D0272804D07A +:10D040000C2805D2401E04E025207047262070479A +:10D05000801EC0B270470FF0F7BE18380FF0B0BF97 +:10D0600070B51400054615D0F7F7ECFC0A4850F8E7 +:10D07000250058B18179012908D1A0F8864040F2F5 +:10D0800071214C43816FA14200D9C467BDE8704053 +:10D09000F7F7E2BC70BD0000287A0020022110F0F2 +:10D0A0002DBB00002DE9F04116460D460746FCF762 +:10D0B00079FF0400306005D045B1A078A84208D3BC +:10D0C000012007E039460120FDF78AF90020BDE87C +:10D0D000F08100204FF44F7209A1F8F785FC6568D4 +:10D0E000A378E078290C834200D8034609B94FF4AD +:10D0F00000612846BDE8F041052210F081BB000028 +:10D10000626C655F686369635F6569662E630000D2 +:10D110002DE9F0410C4602F0CFFF074600252678A6 +:10D1200012E0B74201DA384600E0304680B280466D +:10D1300008F0F4FA88B10C3004EB85016D1C4860EE +:10D14000A6EB0800EDB206B2002EEADCA77065700F +:10D150000020E0702846BDE8F0816570204600F0B0 +:10D160005BF80020F7E7000070B5164605460C0096 +:10D1700001D0012000E0002040F269320EA1F8F752 +:10D1800033FC0122002321461046FDF779F8002EDA +:10D1900010D0002606E000BF15F8011B0AA0F7F723 +:10D1A000A5FE761CA078B042F6DCBDE8704008A071 +:10D1B000F7F79CBE70BD0000626C655F68636963D1 +:10D1C0005F6569662E63000025303278200000001C +:10D1D0000A00000010F03CBD70B50C460546F7F79C +:10D1E00031FC0C4850F8250078B1C1690846A042CE +:10D1F00008D1607920F020006071E07920F0800093 +:10D20000E07102E000688842F1D1BDE87040F7F7B4 +:10D2100023BC0000287A002070B50546002407E0F2 +:10D2200005EB840040680C3808F0F6FB641CE4B29F +:10D230006878A042F4D80020687070BD70B50546CB +:10D240000C0001D0012000E0002040F24F321AA172 +:10D25000F8F7CAFB1C490878A0F1010008701B48C8 +:10D260000078800704D5A2782088294614F09AFA1D +:10D27000E07868B10DB1012000E000204FF4567253 +:10D280000DA1F8F7B1FB2846A168BDE8704008473A +:10D290004DB1002040F25D3207A1F8F7A5FB6068B0 +:10D2A000010C02D003E00120F4E74FF40061BDE877 +:10D2B0007040052210F0E4B8626C655F68636963D2 +:10D2C0005F6569662E630000F87800201C0000206E +:10D2D0002DE9F843002415460F468046D6782346AC +:10D2E0001CE000BF05EB8400A97840680C38B1420F +:10D2F00000D93146721A16B2827A002E02DC42F050 +:10D30000010201E022F001028272C9B200913A46A4 +:10D310004146FDF78BF80123641CE4B2002EE1DCEA +:10D3200008E000BF05EB840040680C3808F074FB8F +:10D33000641CE4B26878A042F4D8002068702870B9 +:10D34000BDE8F88330B5082811D201F0010383400D +:10D3500001218140CD43064902F0010282400C7850 +:10D360002C401C430C70487828401043487030BD56 +:10D3700033780020044981F8FC0204490A6822F04D +:10D38000FF0202430A607047307500200002094026 +:10D39000014981F8630170473075002001494870E8 +:10D3A00070470000F40100200F49152801DA07201A +:10D3B00002E01F2802DA062008707047332801DADD +:10D3C0000520F9E74C2801DA0420F5E7652801DAA1 +:10D3D0000320F1E7972801DA0220EDE7FB2801DAC4 +:10D3E0000120E9E70020E7E7F40100202DE9F047FC +:10D3F0000E461D460178002406EB050990460746B7 +:10D40000494501D3012000E0002040F2FE221DA189 +:10D41000F8F7EAFA87F80390B87803E0311A641C49 +:10D420008EB2E4B2B042F9D93EB3801BA84200DD0F +:10D4300028461FFA80F907EB84004A4640684146B7 +:10D440003044F7F701F8A5EB090085B2641CE4B29B +:10D4500008EB090010E0BE78AE4200D92E4607EB7B +:10D460008400324640684146F6F7EEFFA81B85B2BD +:10D47000641CE4B208EB06008046002DEBD1BDE849 +:10D48000F0870000626C655F686369635F65696669 +:10D490002E6300002DE9FC4707462A4889462A4E9C +:10D4A000D0F83B11009190F83F018DF8040000BFC7 +:10D4B00056F82710052201F22D116846F6F7FDFFF8 +:10D4C00000283CD0F6F7AEFFC0B22521B0FBF1F248 +:10D4D00001FB1204E508684204EBC001012088400A +:10D4E00000F0FF08252C01D2012000E0002040F2CE +:10D4F000212216A1F8F778FA1DF8050010EA080FA6 +:10D500001AD056F8271005F22D15485D024610EA8C +:10D51000080F11D142EA08024A5556F8272004F1B3 +:10D52000DC010020505456F8271004F2011408556D +:10D53000A9F1010000F0FF09B9F1000FB8D1BDE871 +:10D54000FC87000030750020287A0020626C655F3F +:10D550006C6C632E630000000A7D52060DD4837A42 +:10D560004A7D63F305024A75817AC27A1144252205 +:10D57000B1FBF2F302FB1311817270472DE9F04108 +:10D580002F4C0D46074654F8250058B3002056226C +:10D590002CA1F8F729FA4FF4DC76002130460FF081 +:10D5A000F1FD44F82500E8B33146F6F774FF54F86E +:10D5B0002540FF202580A070E0702548B0F8470185 +:10D5C000A4F8D100012084F898010620A4F8940062 +:10D5D00004F11C0008F0D8F900262663052D03D8B5 +:10D5E000082006E00120D2E70A2D01D8042000E03F +:10D5F000022084F83C00C0B2FF2108F071F8E0611D +:10D60000A06928B90021384607F0E6FFA06148B1BB +:10D61000E06938B1A063A169CA6860F31E02CA60FC +:10D62000A06900E00AE04660A069001D00F0CEFCA1 +:10D6300008F060FA60630020BDE8F0810720FBE796 +:10D64000287A0020626C6535305F6C6C632E630055 +:10D6500030750020002909D00B78827F63F3060221 +:10D66000827711F8012B6830F6F7EEBE70472DE98E +:10D67000F0410C4601468569B4F83B002D1D4FF67C +:10D68000FF7202EA40006885B4F83B0040F2E242D3 +:10D690004243A262B4F83920D4E9066340F2E2477B +:10D6A0007A43D717B2187B41C4E90623E28E40F2D1 +:10D6B00071235A43E262897909B32C34002184F83A +:10D6C0002610217F08F00CFB2081B4F80D00217B8F +:10D6D0000844401C80B2217F08F002FB606015F80E +:10D6E000200F40F001002870207B8100288861F322 +:10D6F0004E00288054F82C0908B9A06AE062D4E9E9 +:10D700000A01814200D9E062BDE8F08170B5C2F340 +:10D710000B261846012101EB0624024602230521AF +:10D7200009480FF039FD05460680074821461430A8 +:10D730000FF01AFB0448214616300FF015FB28465F +:10D740000FF08AFE002070BD2400010070B50B4967 +:10D75000C2F30B24104651F824500FF07FFC002830 +:10D7600005D0012807D0E878FF2801D0022070BD3D +:10D77000204602F073F8002070BD0000287A0020D7 +:10D780002DE9F04100251C4F1C4E80462C4600BF61 +:10D7900057F8240048B390F83A1105F1010509073C +:10D7A00023D4C178FF2920D1817939B1327890F81A +:10D7B0009800A8EB0201084400F0FF08022007F0DF +:10D7C000ADFF020011D09188012021F4FF514031BA +:10D7D00091801D21117382F80D8086F80280A1B21C +:10D7E00000EB0420002303F0B9FA641C082CCFDB03 +:10D7F0002846BDE8F0810000287A0020F4010020CE +:10D80000F0B505469888174620F4FF50A030988060 +:10D8100018201873B5F892000E460A30A3F80F00CE +:10D82000A86903F10C043978007900F003027078DC +:10D8300002F0D0FD6070A86979780079C0F38102A8 +:10D84000307802F0C7FDA07062780021824212D0C9 +:10D850007278307882420ED10020930700D50120E3 +:10D86000D30701D000F10100520700D5401C012868 +:10D8700001D16170A170A8696378007900F003029A +:10D88000012000FA02F2934200D16170AB69A278E4 +:10D890001B79C3F381039840824200D1A170607864 +:10D8A00008B9A07848B103205435641CA87060887A +:10D8B00028802088A5F81100F0BDA4F80310F0BD61 +:10D8C00028B1012901D1012A01D00020704701208F +:10D8D0007047000030B40BB10F2300E01023137029 +:10D8E0008B88A2F803304B88A2F80130CB88A2F8CD +:10D8F00005300B89A2F8073001235372B0F892303B +:10D900004FF6FF741433538100239381012300BF2A +:10D9100002EB43055B1CDBB2AC81062BF8D3898894 +:10D9200030BC03F0FBBD00002DE9F047264D9A46C0 +:10D9300016468846244C1035089F03F08FFA49207C +:10D94000E073A11C5FF00000C0F10C0318F8032085 +:10D950000A54401C0D28F7DB0020DFF8709060703F +:10D9600027704FF00108C9F8048006F0B5FD0020CB +:10D97000315C2A5C5140C0F10F02401CA1541028B8 +:10D98000F6DB4646C846C9F8046006F0A5FD00204F +:10D9900008E000BF1AF800102A5C5140C0F10F02E5 +:10D9A000401CA154B842F5DB04E0295CC0F10F0231 +:10D9B000401CA1541028F8DBC8F8046006F08CFD68 +:10D9C0002868BDE8F0870000000208400000084019 +:10D9D0002DE9F0410C4607468AB000210D200FF0DA +:10D9E000D1FB0546002110200FF0CCFB8046202201 +:10D9F000414901A8F6F728FDA08804F10C06C0F300 +:10DA00004710001F81B2ADF80610CDF80E60B8695E +:10DA10003830CDF81200CDF81650CDF81A60CDF898 +:10DA20001E80102901D8012000E000204FF4D1729F +:10DA300032A1F7F7D9FFD7F8B001286097F8B40101 +:10DA40002871B979F1B300F07F002871B869816C51 +:10DA5000C5F80510C06CC5F8090010214046F6F75E +:10DA60001AFD012188F80110207900F0030040F030 +:10DA7000200188F80210F6F7E5FF03F0A1FFBDF8DA +:10DA80000600C0B20090DDF81A30DDF81E20DDF887 +:10DA90001610DDF81200FFF747FF074601A806F051 +:10DAA00045FC06F019FDA0881749C0F3471230461F +:10DAB000F6F7CAFC607940F040006071BDF80600DE +:10DAC000841900E014E0DDF81200294600F0A4FEFD +:10DAD00080EA07012160F6F7BFFF04F087FF2846C0 +:10DAE0000FF0B2F940460FF0AFF90AB0BDE8F0818F +:10DAF00040F08000A9E700000C480200626C653528 +:10DB0000305F6C6C632E6300000208402DE9F04327 +:10DB1000B0EB0208DDE90854DDF81CC02779B4F841 +:10DB200003604FF49679994118D2101A00EB050161 +:10DB3000A1F10101B1FBF5F189B2ACEB010201FBEE +:10DB400005F1A4F81520A1EB000011E0B0FBF1F005 +:10DB500060F30C06A4F80360BDE8F083801AB0FB04 +:10DB6000F5F189B20CEB010201FB1500A4F81520B8 +:10DB7000B90601D54946E9E71E21E7E72DE9F04F4F +:10DB800006461546B0F8CA0040F2712200FB02FBBF +:10DB900091B0002018705880B6F892001C460A30E8 +:10DBA000588159B108892081C888E0804888A080C0 +:10DBB000488809904889114648430BE06D1CE88865 +:10DBC0002081A888E0802888A08035F80109099084 +:10DBD00040F6C4100E906B89D6E91A01B6F892206F +:10DBE0009342A3EB020301D203F58033B26F534398 +:10DBF00013EB000841F1000A5FF0000705EB470056 +:10DC0000CDF83CB08189A1F57F40FF3868D040F263 +:10DC1000E2404143C81711EB080940EB0A000590A8 +:10DC200000203E49CDE90010029003906FF0FD0204 +:10DC3000059819EB020C40F1FF310FAA60460E9BCC +:10DC400008F01CFDF0B3002108F00AFE0F9841F621 +:10DC50004C51884240D300200CA90190CDE902012B +:10DC600004900090B5F8010040F2E2414843C1172A +:10DC7000059A10EB09005141284B5A4608F027FD40 +:10DC800000B3002108F0ECFD0C99B1EB090040F263 +:10DC9000E241B0FBF1F081B2B5F8030088421BD33A +:10DCA000687AB1FBF0F24243A280B26FB9EB080090 +:10DCB000B0FBF2F26B891A446281B0FBF1F201FB16 +:10DCC000120000E008E04FF00401617040F2E24110 +:10DCD000B0FBF1F0608003E07F1CFFB2062F8DD314 +:10DCE000608850B996F888006070B6F88910A088EE +:10DCF000B1FBF0F200FB12106080A188687AB1FBE2 +:10DD0000F0F1414388B2A0800999884202D2697A31 +:10DD10000844A08011B0BDE8F08F00004169010007 +:10DD200070B51C4E0546082056F82540503407F0C3 +:10DD3000F5FC02002CD00220A071B4F842000A3099 +:10DD4000A08056F8251001F58070D1F82D112161C1 +:10DD500090F831002075918821F4FF5101F5807110 +:10DD6000918001211173A388538256F8254001EB5D +:10DD7000052004F58073D4F82D41C2F80D4093F8C6 +:10DD8000313053742946BDE87040002302F0E6BFED +:10DD900070BD0000287A002010B58279002A08D0D2 +:10DDA00000F1500480F89810B0F88B0007F098FF4D +:10DDB000A08610BD10B5428881888A4217D8438951 +:10DDC0008489A34213D84FF4486399420FD8062A96 +:10DDD0000DD302899A420AD80A2A08D3C088B0F51E +:10DDE000FA7F04D2401C4843B0EB820F01DD1220C1 +:10DDF00010BD002010BD806820F00040014642792F +:10DE0000920601D50020704700688842F7D10120B2 +:10DE1000704730B5826B00230A6006E094680464A2 +:10DE200012680C685B1C944202D05479A406F5D4A5 +:10DE3000B0F8964054B9012B08DB0D68AD68456415 +:10DE40000D68ED7B05F0030580F848501C44A0F8F0 +:10DE500096408B80B0F892408C81826390F8992034 +:10DE60004AB1B0F8962032B10968097A490702D45C +:10DE7000002180F89910184630BD2DE9FF5F054656 +:10DE80000027D5E908469846B946F6F7DBFDBA46BD +:10DE9000C6F800A0A8F806A0A8F808A0A8F80AA04C +:10DEA00005F1200B26E02079C043800704D02046EE +:10DEB00000F0EAFF68B11BE0DDE90112237A284691 +:10DEC00001F078FEB8F8080000F10100A8F8080099 +:10DED0000EE0B8F8060000F10100A8F80600A07AEC +:10DEE000C00705D0B8F80A0000F10100A8F80A0040 +:10DEF000274624687CB360790006D4D404E0274622 +:10DF000024684FF0010924B1204600F0BDFF00282D +:10DF1000F5D1B9F1000F04D0A869417941F00801A9 +:10DF20004171C4B11FB1C7F800A06F6202E058464A +:10DF3000F8F762FE307940F010003071707920F00F +:10DF400020007071A86A3060AC62E86A00B9EE62C5 +:10DF5000286B00B92E63584607F03EFDBDE8FF5F11 +:10DF6000F6F77ABD2DE9F041074617480E46052120 +:10DF700050F8274030460DF05DFE8046A56901202F +:10DF80002D1D00EB072002210FF0E6FAB8F1000F7B +:10DF900014D03168C4F82811317984F82C11316813 +:10DFA00040F23110C4F82D113179015504F5947106 +:10DFB00005F11800BDE8F04108F029BF3846BDE87A +:10DFC000F0410C2103F0CEBB287A0020806820F0BD +:10DFD00000400146427922F02002427100688842E6 +:10DFE000F8D1704770B51C460423049D0FF0D4F897 +:10DFF00004704580BDE870400FF02EBA02465161B2 +:10E00000D37931B123F04003D37112688242F6D143 +:10E01000704743F04003F7E770B5044608781D46A3 +:10E02000C0F381032078049E63F383002070097895 +:10E0300061F301002070607820F00E006070207D98 +:10E0400062F3861040F001002075697D61F34500A0 +:10E050002075607D05F1100120F03F006075002003 +:10E06000E0822868E060A8882082A879A07404F182 +:10E07000180008F0CCFE96F89A00E07796F83C007D +:10E08000400884F82200687D00F01F00F07270BD27 +:10E090002DE9FF4F074680688DB000F104099046D6 +:10E0A0000E4602F10C0A4FF0000B0BA803F07EFBAA +:10E0B00018B10D2011B0BDE8F08F00248DF8064096 +:10E0C0000BA803F073FB002875D1BDF82C100120BC +:10E0D00000EB01208346FFF751FA00286BD116228E +:10E0E00051460DF11300F6F7AFF9307900F00F004B +:10E0F000072804D0B069CDF80D00B08B07E006F119 +:10E1000018000AF01FF80168CDF80D108088ADF8EE +:10E1100011000DF1070007F013FE7079C0098DF8AA +:10E12000040097F832008DF805004948BDF82C101E +:10E1300050F82150002005F15004A87104202864F3 +:10E1400058212046F6F7A7F90620A4F84400DAF88B +:10E150000710A163DAF80B10E1639AF80F0084F856 +:10E1600040003C4890F8450184F84A00D7E91C017A +:10E17000C4E9060198F8070000F0030299F80000CE +:10E18000C0F38101162013F043FCD4E906230146B5 +:10E19000891843F10000C4E90610109A12B140F248 +:10E1A0005A520BE099F80020C2F38102022A03D0F0 +:10E1B00040F63C2202E043E041F2EE12891840F1C1 +:10E1C0000000C4E9061097F86D0040F2712100EBE1 +:10E1D00000103844B0F84900E0864843E062214628 +:10E1E0002846FFF744FA98F80500C0F3001270794A +:10E1F000C0F300111098FFF763FB0246A8690323E0 +:10E20000001DC17821F07C010831C170417821F0F6 +:10E210000101417090F8201041F0010180F82010B8 +:10E22000018C63F34E010184534649460095FFF784 +:10E23000F3FEBDF82C002A46C1B2584602F00CF994 +:10E2400001ABBDF82C20594600F022FD32E700005A +:10E25000287A00203075002070B50D460646144619 +:10E26000012000EB05220A23052109480EF094FF46 +:10E27000032101704670458034F8031F8180618856 +:10E28000C180A1880181BDE870400FF0E5B80000B1 +:10E290002A00010070B511480D4650F8254094F849 +:10E2A0006E0110B994F86F0170B1002084F86E010E +:10E2B00084F86F0102200DF0E3FC28B104F188021C +:10E2C00029460020FFF7C8FF012084F86D0100EB0C +:10E2D0000520BDE8704002210FF03EB9287A0020E9 +:10E2E0001346002904D00A4601461846F6F7ACB892 +:10E2F000704700002DE9F05F344C54F820C09CF8C2 +:10E300006B21002A5FD18A884FF00108C2F34715BC +:10E310000A7E08EB002B1F2A24D29CF83A319E0774 +:10E3200002D5A5F10405EDB2A246DB0611D5D41E37 +:10E330000F2C09D2DFE804F00D0D0D0D0D08080DAE +:10E340000D080D0808080D00BDE8F05F3D2103F041 +:10E3500009BADFF87C9002EB420709EB8706337AB3 +:10E36000AB4204D0BDE8F05F114603F0ADB801F157 +:10E3700018041B2A13D0022A1ED05A46737A11465B +:10E3800070680EF009FF064659F8273032462946D4 +:10E39000204698473046BDE8F05F0FF05DB84A79F7 +:10E3A000520604D55A46604602F0B6FBE5E7002265 +:10E3B000594602F0BDFCE0E78CF86A815AF820006B +:10E3C000627880F86921BDE8F09F0000287A00207B +:10E3D000AC4802002DE9F047DFF88080C2F30B243F +:10E3E00091460E46002558F8247048460EF036FE39 +:10E3F000D0B1012818D058F8240090F83A01C0068E +:10E4000022D5F878FF2801D0387988B1B06807F0B4 +:10E41000CCF958F8240090F83A0140070AD53D217C +:10E42000204600F02FFA0AE0B06807F0BEF912E0CB +:10E43000022510E03D220021204600F00DFA3D218A +:10E44000204603F08FF906E000234A4605213046B6 +:10E450000EF0F0FC01252846BDE8F087287A002060 +:10E4600070B50646092007F059F9050000F10C04C3 +:10E4700001D0012000E0002040F2F3221BA1F7F7B9 +:10E48000B3FAA88820F4FF5000F59070A8801420FB +:10E4900020701A4850F8262002F58071D2F87421B5 +:10E4A000C4F80120896FC4F8051050F826000B212C +:10E4B00000F599700DF0DEFC68B9B4F8031040F671 +:10E4C0004800814201D9A4F80300B4F80710814242 +:10E4D00001D9A4F80700012000EB06202A463146A6 +:10E4E000BDE87040012302F039BC0000626C655F3A +:10E4F0006C6C635F6374726C2E630000287A00207A +:10E500002DE9F0410546012000EB052618480F468D +:10E51000314650F8254017480EF026FCFF20E070E9 +:10E5200057F8010FC4F87C017868C4F88001002214 +:10E530001146204603F036F818B994F88C010028EB +:10E5400013D00C480C23324605210C380EF024FE63 +:10E550000721017004F5C27445802168416061683B +:10E5600081600EF079FF00202072BDE8F08100008C +:10E57000287A00203A000100F8B50C00054601D0C9 +:10E58000012000E0002040F2DB1243A1F7F72CFA53 +:10E59000A08895F83A11C0F34710C90702D0A0F13E +:10E5A000040080B2217904F10C036FEA01018A07AB +:10E5B0003C4925D040B10978090705D500902A8843 +:10E5C0000021032013F054F9E889401CE8812079E8 +:10E5D00040F010002071607920F0E000607195F843 +:10E5E0009811E07961F30100E071F6F72BFAA96A5E +:10E5F00005F128064FF000004FF0010741B109E096 +:10E600000978C906E0D5009000212A880420D9E7BE +:10E6100085F8AA01204600F037FC98B995F83A0130 +:10E62000C0070FD0A079C00705D021462846FFF7C4 +:10E63000CFF985F8AA71D5E96C01401C41F10001C0 +:10E64000C5E96C0195F8AA01E0B92079C0438007BB +:10E6500018D1207B1B2800D16F72207B2072FCF721 +:10E66000F3FF78B1306868B101460279D24392076E +:10E6700000D1014600680028F7D1086810B1206079 +:10E680000C6004E0002221463046F8F795FABDE818 +:10E69000F840F6F7E1B90000626C6535305F6C6CEC +:10E6A000632E63001C0000202DE9F04110460C464B +:10E6B0000EF0D4FC60B101280AD020881D4E56F817 +:10E6C000200090F83A11090706D50220BDE8F08134 +:10E6D000A06807F0A1F92AE0A178890707D00127EF +:10E6E0002579B0F88801A84203D3012002E002276F +:10E6F000F6E7002040F21D720FA1F7F775F92088A8 +:10E7000056F8200090F83A01C00701D02D1DEDB257 +:10E71000A068017967F301010171818865F34C11EB +:10E7200081802088A16856F82000FFF725FF00208F +:10E73000CCE70000287A0020626C655F6C6C635F38 +:10E740007461736B2E63000070B505460C460120A2 +:10E7500000EB05210C230A460C480EF01DFD058038 +:10E76000A1880B4AC1F34711818052F8252092F805 +:10E770003A21920701D5091F8180217901F0030117 +:10E7800081708460BDE870400EF066BE3700010005 +:10E79000287A002070B515461C460E460246062310 +:10E7A000052105480EF0F8FC067004714580BDE8AF +:10E7B00070400EF051BE00001E0001002DE9F8432C +:10E7C000984616460C460C25C2F30B2710460EF051 +:10E7D00045FC90B1012810D0A07802F0ADFF58B1EF +:10E7E0000B490120002551F8271081F86A01A17812 +:10E7F000208802F023FE00E01225208800902B469E +:10E80000324641460348FFF7EDFB0020BDE8F883A0 +:10E81000287A00201A00010070B50D4D0E460C4CF0 +:10E82000103502F01BFB0121A21CE1735FF0000018 +:10E83000C0F10C03F35C1354401C0D28F8DB0020DE +:10E84000607020700348416005F046FE286870BD86 +:10E85000000208400000084070B50446154601203B +:10E860000E4600EB04220623052105480EF094FC19 +:10E87000448006710570BDE870400EF0EDBD0000EB +:10E880002200010070B5044601200D4600EB042271 +:10E890000423052104480EF07FFC44800570BDE888 +:10E8A00070400EF0D9BD00002300010070B5044691 +:10E8B0000D480D4650F8241055F80B3F01F58072B5 +:10E8C000C1F846316968C2F84A1050F82400A968B6 +:10E8D0000B3D80698164204600F0ACF82946204653 +:10E8E000BDE8704001F0CCBB287A00202DE9F0474C +:10E8F0000646172006F012FFDFF88890050000F1A9 +:10E900000C0459F8267001D0012000E0002040F2EC +:10E9100027121DA1F7F768F803202070A88807F5D3 +:10E92000807820F4FF5000F53870A880B7F84401D3 +:10E93000A4F80900D7F83C01C4F80100D7F8400159 +:10E94000C4F80500042104F1130002F051FF08216E +:10E9500004F10B0002F04CFF59F826000B342A4654 +:10E960008069A16881642068C8F846006068C8F8BA +:10E970004A00012000EB06203146BDE8F0470123A4 +:10E9800002F0ECB9287A0020626C655F6C6C635F02 +:10E990006374726C2E6300002DE9F041044601207F +:10E9A00000EB04260F462023324603211E480EF0BA +:10E9B000F3FB80464FF47A6231461C480EF016FE97 +:10E9C0001B4D55F8240090F83A1141F0100180F8E1 +:10E9D0003A1155F8241057F8012F01F58070C1F84D +:10E9E0004E217968C0F8521055F82410B8681022EA +:10E9F0008969C86455F82410404601F5AB71F5F7F4 +:10EA000023FD55F82410102201F5A37108F1100020 +:10EA1000F5F71AFD40460EF01FFD3046BDE8F04107 +:10EA200003210EF099BD0000110003003A0001001F +:10EA3000287A002070B505460D2006F06FFE06000E +:10EA400000F10C0401D0012000E0002040F2471248 +:10EA500015A1F6F7C9FF04202070B088042120F426 +:10EA6000FF5000F5D070B08004F1090002F0C0FE44 +:10EA70000821601C02F0BCFE0F48641C50F82520E1 +:10EA8000A1689269D16450F82510226801F5807060 +:10EA9000C1F84E216168C0F8521029463046BDE8E1 +:10EAA000704001F079BC0000626C655F6C6C635F64 +:10EAB0006374726C2E630000287A002070B5154ACA +:10EAC00051F8014F054652F820200920C2F8324182 +:10EAD0004968C2F8361106F021FE040000F10C0668 +:10EAE00001D0012000E000204FF4E8720AA1F6F7FF +:10EAF0007BFFA08820F4FF5000F59070A0800920D3 +:10EB00003070701C0DF090F929462046BDE8704029 +:10EB100001F042BC287A0020626C655F6C6C635F18 +:10EB20006374726C2E63000070B50646092006F00F +:10EB3000F5FD040000F10C0501D0012000E00020EB +:10EB40004FF4D1720BA1F6F74FFFA08820F4FF50CD +:10EB500000F59070A08008202870681C0DF064F902 +:10EB6000012000EB062022463146BDE8704001231B +:10EB700002F0F4B8626C655F6C6C635F6374726C16 +:10EB80002E6300001288A1F801208B78012233B98E +:10EB900083691B79C3F3810302FA03F38B704B780B +:10EBA000002B05D18069007900F0030082404A7093 +:10EBB0007047000070B505461848002250F8214003 +:10EBC00040F82120D4F89C010EF03EF9D4F8A001C1 +:10EBD0000EF03AF9606906F0AFFE0021E069FFF738 +:10EBE0000DFA04F1280006F0F7FE04F1200006F00B +:10EBF000F3FE606B08B106F00FFFE06906F0BEFEA1 +:10EC0000A06908B106F05EFE20460EF01DF9284608 +:10EC1000BDE8704000210EF09FBC0000287A002063 +:10EC20002DE9F0410E46088812491C46174651F856 +:10EC300020500523214610480EF0AEFA04460C2061 +:10EC400020703088A4F8010038460EF007FA50B161 +:10EC5000012808D03DB1D5F89001C0F30F10A4F8F9 +:10EC600003000020207020460EF0F6FB0020BDE8D7 +:10EC7000F0810000287A002025000100C10701D0A2 +:10EC800000207047800701D501207047022070479F +:10EC900070B514460E4605000FD00346E2B2194681 +:10ECA0003046FFF777FD074850F8240018B1214699 +:10ECB0003046FFF77FFF284670BD1146184602F028 +:10ECC000D1F9F8E7287A00202DE9FF5F07468CB0DC +:10ECD0007A8E8B464FF0000AA2F10A0140F6774384 +:10ECE000DDF86C90504607F1180699427DD2F18A02 +:10ECF00006297AD3B1F5486F77D8338BB3F5FA7F0D +:10ED000073D25B1C4B43B3EB820F6EDC484602F0C0 +:10ED10004DFD002869D1B9F800004FF0010808EB5B +:10ED2000002A222231460DF10700F5F78DFB787994 +:10ED3000C0098DF804007879C0F380108DF80500C3 +:10ED40008DF80680B9F800105046FEF717FC002831 +:10ED50007DD1B9F80000424951F82050582105F101 +:10ED6000500485F806802046F5F795FB0620A4F8A8 +:10ED700044003C4890F8450184F84A00DDE90E0162 +:10ED8000C4E90601F87B00F003029BF80000C0F321 +:10ED90008101222012F03CFED4E9062301468918A5 +:10EDA00043F10000C4E906101A9A12B140F2E2429F +:10EDB0000AE09BF80020C2F38102022A02D040F64A +:10EDC000C41201E040F6A662891840F10000C4E9CF +:10EDD000061056F8130FA0637068E063307A84F869 +:10EDE0004000B07B133E400900E030E084F848006A +:10EDF00021462846FEF73BFCD4E90601C01E41F13E +:10EE0000FF31C4E906010E200DF024F830B1787905 +:10EE10000122C0F300111A98FEF752FDAC690246B8 +:10EE2000241D06F10C03E178204621F07C010C3111 +:10EE3000E17059460095FFF7EFF860782A4620F018 +:10EE40000300607099F80010504601F077FBB9F8A4 +:10EE5000002001AB5146FFF71BFF10B0BDE8F09F4B +:10EE6000287A00203075002010B5002204490120C6 +:10EE70000DF0B6FFBDE8104020210248F5F70BBBAE +:10EE800048460200287A0020017901F00301012997 +:10EE900003D1808810F4FF5F01D00020704701206B +:10EEA000704770B5064614460D4609200CF0E8FE82 +:10EEB00030B1224629463046BDE8704000F0D2B855 +:10EEC00000200CF0DDFE002806D022462946304600 +:10EED000BDE8704000F052B870BD00002DE9F84365 +:10EEE0000D46088823499846914651F820401A2635 +:10EEF00010460EF0B3F828B301282CD0022802D017 +:10EF00000220BDE8F8832846FEF754FF060022D110 +:10EF10000E22294604F1C000F5F796FA012104F506 +:10EF200099700CF0A7FF70B104F1A80201231746F5 +:10EF300029462046FEF7CEFC2888012318223946B0 +:10EF400001F02CFF07E0A07978B1298804F188024C +:10EF50001A20FFF781F92888009033464A46414637 +:10EF60000548FFF73FF80020CBE72878214601F05D +:10EF70008FFEF0E7287A00202600010070B51446C5 +:10EF80000E46054614234FF40062052129200EF099 +:10EF900003F90122027045704680002115B13C2D15 +:10EFA00027D032E01B4A52F826209279027123784A +:10EFB0004371002A16D0D4F80320C0F80620B4F814 +:10EFC0000720428134F8192F82816288C281A28889 +:10EFD000A4F11904028203D094F824104FEA5111CD +:10EFE000817412E0D4F80920C0F80620B4F80D208E +:10EFF000E7E7027141718181C1810182418054F84A +:10F00000031FC0F80610A1884181BDE870400EF0D2 +:10F0100023BA0000287A00202DE9F041104EC2F3F7 +:10F020000B2510460C4656F825700EF017F898B1CF +:10F03000012811D0B86954F8011F81636168C16368 +:10F04000A1680164E168416456F8250080790128CF +:10F0500002D1284602F0AAF80020BDE8F0810000A5 +:10F06000287A002070B514460D4606461F234FF43B +:10F07000006205212B200EF08FF80A2101704670E6 +:10F080004580F6B9144951F8251089790171227823 +:10F090004271002919D0D4F80310C0F80610B4F852 +:10F0A0000710418134F8191F018361884183A188C9 +:10F0B000A4F11904818304D094F824104FEA51116B +:10F0C0008177BDE870400EF0C7B9D4F80910C0F8D8 +:10F0D0000610B4F80D10E4E7287A00202DE9F0417D +:10F0E0002248C2F30727904650F827400E460025D5 +:10F0F00040460DF0B3FF022801D0022527E0B0788A +:10F1000030B1D4F89C0160B3E079C00729D104E0A4 +:10F11000E07920F00100E07119E0A0690079C0F306 +:10F12000810002281DD0122104F599700CF0A2FE76 +:10F13000C8B1E07940F00100E0717079B17940EA3E +:10F1400081102072B6F803002082002060823B46C6 +:10F150002A4642F256014046FBF798F90020BDE8E6 +:10F16000F0810C25F3E71A25F1E70000287A00204A +:10F170002DE9F0411748C2F30726174650F82640FC +:10F180008846002510460DF069FF022801D00225AF +:10F190000FE098F80200B0B1D4F8A001B8B1A069AE +:10F1A000007900F00300022811D0E07940F002005D +:10F1B000E07133462A4642F257013846FBF766F9BA +:10F1C0000020BDE8F081E07920F00200F0E70C2596 +:10F1D000EFE70000287A00202DE9FF47002088464D +:10F1E0008DF80C00C2F307204C498146924651F835 +:10F1F000297003AA514601F045FA02286AD09DF809 +:10F200000C0000287FD198F8040008285DD24449FA +:10F2100051F82060F6B3B07AC00756D0232006F02C +:10F220007DFA050055D0A88805F10C0420F4FF50A4 +:10F2300000F58C60A8801C202873B8F80200A5F89F +:10F240000D00122206F16001E01CF5F7FDF8B0890F +:10F25000401EA4F81300B089401EA4F81700B86F30 +:10F26000B7F89210CDE900100294D7E91A23D6E935 +:10F270002201FEF74BFCB06DC17D607E61F303009F +:10F2800028496076097861F347106076B06D817D1A +:10F29000012000E019E08840A076B06D807A002857 +:10F2A000607E1AD040F01000607698F804001E4985 +:10F2B00000EB400001EB400101F18000D1F8FE10AD +:10F2C000C4F81B10B0F8820011E042208DF80C0049 +:10F2D00019E0022004B0BDE8F08720F0100060764D +:10F2E0001148D0F83411C4F81B10B0F83801A4F854 +:10F2F0001F00B7F89200A4F82100398800232A469D +:10F30000504601F02BFD4B469DF80C2042F25B016C +:10F310005046FBF7BBF80020DCE70000287A00200D +:10F32000487A0020F4010020307500202DE9FF47C5 +:10F33000002089468DF80C00C2F307205249804610 +:10F34000924651F8287003AA514601F09BF9022811 +:10F350007ED09DF80C0000287BD1B9F80400082865 +:10F3600078D24A4951F82060002E73D0232006F04D +:10F37000D5F904006FD0A08804F10C0520F4FF50EB +:10F3800000F58C60A0801C202073B9F80200A4F85E +:10F390000D00207C40F2E24220F080002074D6E98B +:10F3A00014010023F5F70CF8A5F805007069406B0F +:10F3B000C069C5F807007069406B90F82010E87AC2 +:10F3C00061F30400E872717861F34710E8727069C4 +:10F3D000406B0069E8607069406B818A2982807D9A +:10F3E000A8747089A5F813007089A5F81700B86F84 +:10F3F000B7F89210CDE900100295D7E91A23D6E9A3 +:10F400001601FEF783FB96F8291015F8190F61F322 +:10F410000300287096F8281061F304101C49287026 +:10F42000097861F3471028707069406B0079C0F368 +:10F430008101012088406870F06BC5F80200B6F8C1 +:10F440004000E880B7F89200401E2881398803E028 +:10F4500010E006E011E014E000232246504601F0DF +:10F460007DFC43469DF80C2042F25A015046FBF7C2 +:10F470000DF8002004B0BDE8F08742208DF80C00A4 +:10F48000EFE70220F6E70000287A0020EC7A00205F +:10F49000F401002070B51048C2F30725194650F852 +:10F4A000254005230D480DF077FEA0F801500221FC +:10F4B00001706CB100210170A1690979C1F381016A +:10F4C000491C0171A169097901F00301491CC1704E +:10F4D0000DF0C2FF002070BD287A0020300001002E +:10F4E0002DE9F0472548C2F30727914650F82740F9 +:10F4F0000E46002548460DF0B1FD022801D0022538 +:10F5000032E0D4F89C010DF09FFC0020C4F89C016F +:10F510000021E069FEF772FDB07828B33079811ED2 +:10F52000072901D312251FE0401CC0B280460021EC +:10F530000EF0E4F8C4F89C0168B14246311DF4F7BE +:10F5400083FFA069F17810F8202F61F34512027053 +:10F55000606910B104E0072506E006F05DF860611F +:10F560000146E069FEF74AFD3B462A4642F2540155 +:10F570004846FAF78BFF0020BDE8F087287A002084 +:10F580002DE9F0471A48C2F30726914650F8265055 +:10F590000F46002448460DF061FD022801D00224E8 +:10F5A00019E0D5F8A0010DF04FFC0020C5F8A0012E +:10F5B000F878811E072901D312240CE0801CC0B208 +:10F5C000804600210EF09AF8C5F8A00168B14246C5 +:10F5D000B91CF4F739FF3346224642F2550148463A +:10F5E000FAF754FF0020BDE8F0870724F3E7000096 +:10F5F000287A00202DE9FF5F0C4602984949C0F3A4 +:10F6000007294FF0020851F829500DF027FD002876 +:10F6100075D0012873D0022803D0022004B0BDE8C1 +:10F62000F09F002D6BD0E878FF2801D03A2051E000 +:10F63000A0784FF01108C10702D1E17800295ED00F +:10F64000810701D42179E9B3C00706D1E0780CF035 +:10F650001DFCB8B3E07885F8D100A078800706D407 +:10F6600020790CF013FC68B3207985F8D20060791A +:10F670004FF0010B00F00300012802D0022806D150 +:10F6800002E085F898B102E0002085F89801A078A2 +:10F690004FF00008C043800731D04FF0160A85F8BC +:10F6A00003A0032006F03AF8060012D0B08806F155 +:10F6B0000C0720F4FF506030B08086F80CA0E21CEC +:10F6C000394600E01BE02846FFF75CFAA87918B13C +:10F6D00008E00720804612E03888A5F8CE00B87808 +:10F6E00085F8D000BA787978284601F05BFF0123CD +:10F6F00032464946029801F031FB85F805B0424692 +:10F7000042F232010298FAF7D5FEA078C043800792 +:10F7100005D100234A460521029801F071FB002023 +:10F720007CE70000287A00202DE9F0411248C2F35E +:10F730000724164650F824708846002510460DF020 +:10F740008DFC30B1012804D0022804D00220BDE88D +:10F75000F081022507E0D8F80210C7F8A411B8F824 +:10F760000600A7F8A80123462A4642F25C0130466B +:10F77000FAF78CFE0020EAE7287A00202DE9F04114 +:10F780000888134F90460C4657F820600C25104609 +:10F790000DF064FC90B1012810D0208857F820109B +:10F7A00091F83A1149074FF0060102D501F046FEE3 +:10F7B00001E001F04BF9FF20B070002523882A46B4 +:10F7C00042F21B014046FAF761FE0020BDE8F081DD +:10F7D000287A00202DE9F04117460C460C251046EA +:10F7E0000DF03CFC58B3012829D020233A460321D0 +:10F7F00018480DF0D1FC06462088174D102255F808 +:10F80000201006F1100001F5A371F4F71DFE10227F +:10F81000A11C3046F4F718FE20881022A11C55F8D0 +:10F82000200000F5AB70F4F70FFE2188012055F899 +:10F83000211081F8660130460DF00EFE0025238868 +:10F840002A4642F21A013846FAF720FE0020BDE8A7 +:10F85000F081000011000300287A002070B50546F1 +:10F86000012000EB052605F059FF040001D001201E +:10F8700000E00020D82209A1F6F7B6F81221217382 +:10F88000A088224620F4FF502030A0802946304630 +:10F89000BDE87040012301F061BA0000626C655F51 +:10F8A0006C6C635F6374726C2E6300002DE9F04131 +:10F8B00018460E460146174600250A230F480DF04C +:10F8C0006BFC044638460DF0C9FBA0B130880C49EA +:10F8D00051F8201001F58070D1F82811616090F87E +:10F8E0002C00207225703088608020460DF0B4FD19 +:10F8F0000020BDE8F0810C25F4E70000270001009E +:10F90000287A00202DE9F0411F4690460D460C2430 +:10F9100010460DF0A3FBA0B1012812D0022802D09E +:10F920000220BDE8F08128880B4E002456F82010F4 +:10F93000897971B101F068FB2988012056F82110FE +:10F94000487123464246394604480BF056FC0020D5 +:10F95000E7E7FFF7E9F8EFE7287A00202800010041 +:10F9600070B516460C46002510460DF077FBB8B171 +:10F97000012815D020883B220F2101F04FF80221E9 +:10F9800030460DF0E9FD2188064AFF2052F821108B +:10F990002A468870238842F221013046FAF776FD24 +:10F9A000002070BD287A00202DE9F0470D46098817 +:10F9B000DFF8888091460C27C2F30B2458F82160A9 +:10F9C00048460DF04BFB50B1012808D0022802D068 +:10F9D0000220BDE8F0872846FEF7ECF907462B88A1 +:10F9E0003A4642F220014846FAF750FD4FB1204610 +:10F9F0003B220F2101F012F8022148460DF0ACFD28 +:10FA000011E058F82410887978B106F1A802002393 +:10FA1000144629463046FDF75DFF2888002318224A +:10FA2000214601F0BBF90020D3E7E0B22A4601F0FD +:10FA3000EBF8012086F86E01F5E70000287A002037 +:10FA40002DE9F0410D462149C2F30B20174651F82C +:10FA50002040002610460DF001FB70B101280CD0AB +:10FA60001B4A6888B2F84D11884204D8A988B2F8B8 +:10FA70004F21914203D912261DE00C261BE0B4F859 +:10FA80008821904203D1B4F88A21914213D0E178C1 +:10FA9000FF2901D02A260EE0A4F87801A888A4F84E +:10FAA0007A0100221146204601F07CFD84F88C0189 +:10FAB0002888FEF7D5FC2B88324642F222013846D0 +:10FAC000FAF7E4FC0020BDE8F0810000287A00206D +:10FAD000307500202DE9F0472848C2F30B279046E7 +:10FAE00050F8274099460E461A2540460DF0B6FAC2 +:10FAF00088B3012838D0022836D1A07958BB00211C +:10FB000004F599700CF0B6F928B3D6F80200C4F8E1 +:10FB10003C01D6F80600C4F840017089A4F84401FD +:10FB2000102206F10C0104F5AB70F4F78DFC0120F6 +:10FB300084F8660194F83A0140F0080084F83A012C +:10FB4000810709D040F0040084F83A0100253846C6 +:10FB500000F06CFB04E007E03846FEF7C7FE002526 +:10FB6000032140460DF0F8FC2B4642464946044826 +:10FB70000BF043FB0020BDE8F0870000287A00204E +:10FB80002900010070B50A49C2F30B25104651F84F +:10FB900025400DF063FA40B1012806D02CB1FF20BA +:10FBA000E0702221284601F0DDFD002070BD00003C +:10FBB000287A002030B40124FF210C2B1CD00BDC50 +:10FBC000022B1DD003DCB3B1012B11D113E0072BA5 +:10FBD0001CD00B2B0CD11BE0112B17D004DC0D2BF0 +:10FBE00014D00E2B04D106E0182B04D0192B05D00D +:10FBF000C2789A4213D1047130BC7047C170FBE7E0 +:10FC000090F8691130BC104601F0ACBD8170F3E78B +:10FC100080790028F0D130BC1046FEF767BE8278AC +:10FC2000521C9A42F2D0E7E72DE9FF4F81B0DFF88E +:10FC3000F4A103980C46C0F30B250E795AF82590D1 +:10FC4000C98822890027B9F80E001144BB468142B9 +:10FC500001D8012000E0002040F2527272A1F5F7B5 +:10FC6000C3FEE088218942185AF82510CB899A1AD8 +:10FC7000CA815AF82500E288B0F872111144A0F840 +:10FC80007211608918B1C1B2284600F021FA2468C7 +:10FC9000B2E0002F78D1204602F0EEFCA9F8260150 +:10FCA0002089C0F30C08B9F8920001280CD85FEA4B +:10FCB000487009D45AF82500503001F099F95AF8E3 +:10FCC0002510002081F86C015FEAC86009D56079D1 +:10FCD000400606D52146484600F030FE2089C0F394 +:10FCE0000C0818F03E0F11D05FEA487002D5BBF146 +:10FCF000000F02D038F0040003D04FF0010B89F858 +:10FD000070815FEAC8603FD501273DE05AF82520A1 +:10FD1000002182F86D115AF82500503001F068F981 +:10FD20005FEA486030D4A08810F4FF5F2CD05AF806 +:10FD3000250090F83A1189070ED0D0F890213E485E +:10FD400003990DF06FFC5AF825000399D0F894211F +:10FD50003948401C0DF066FC20795AF8251000F057 +:10FD60000308A08891F83A11C0F34710890701D51C +:10FD7000001F80B24146B8F1010F09D0022907D017 +:10FD8000B8F1030F1DD110E0204605F00EFD32E062 +:10FD90002A490978090714D5009004F118032A4666 +:10FDA0004FF001014FF0030009E024490978C9062A +:10FDB00007D5009004F118032A460121042011F010 +:10FDC00057FD4046B8F1010F09D0022807D0B8F11D +:10FDD000030FD9D121462846FEF78CFAD4E7607983 +:10FDE000400604D521464846039A00F095FE214678 +:10FDF0002846FEF7A9FC24683000A6F10106F6B2F9 +:10FE00007FF447AF1FB13D21284601F0ABFC5AF803 +:10FE10002500C08910B903980DF03EFA05B0002006 +:10FE2000BDE8F08F287A0020626C655F6C6C635FC0 +:10FE30007461736B2E630000380001001C00002009 +:10FE40002DE9FF4F7B4FC2F30726002557F82640C8 +:10FE500085B09A4691468B46002C7CD0206D0028B8 +:10FE6000FBD048460DF0FAF8002875D0012800D1E3 +:10FE70000125206D06F0D6FE4FF00008C4F8508032 +:10FE8000002D6AD194F868010028FAD194F86A012B +:10FE90000028F6D169462046FDF7BBFF6B46324687 +:10FEA00049462046FDF7E9FF53464A46694605980C +:10FEB000FFF7BAFE48460DF0D1F801284DD0A4F85E +:10FEC0009680E069A063A069A1794079C0F3C00081 +:10FED00021B994F8401011F00C0F26D028B305F08A +:10FEE00009FE050001D0012000E0002040F6FF22BD +:10FEF00051A1F5F779FD687920F020006871287923 +:10FF000040F010002871A069417921F00801417189 +:10FF1000F4F798FD0022294604F12800F6F72EFE9A +:10FF2000206B00B92563F4F797FDF4F78BFD606B48 +:10FF300010B905F0DFFD6063F4F78EFDA069D4F819 +:10FF40009C11001DFDF786FBA07901254FF0040AE6 +:10FF5000012807D002E068E068E052E094F8A200CF +:10FF600018B32CE094F84400400716D4BBF80A00FC +:10FF700088B1A06994F84810001D05F089FEC4E915 +:10FF80001C01A26F801841EB0801C4E91A01B4F802 +:10FF90008400C4F8800084F8A25084F84880224687 +:10FFA0003146484600F0CAFA10E094F84400400791 +:10FFB00005D484F8A25004F1500001F019F822464B +:10FFC00031464846C4F840A000F046FAC4F844A0C0 +:10FFD00000282BD048460DF041F8012857F826009C +:10FFE00007D090F86C1111B190F8A20020B1082050 +:10FFF00003E090F8680100E03E2057F8261081F8F1 +:020000040001F9 +:10000000680104F1200005F0E7FC04F1280005F088 +:10001000E3FC94F86A0118B194F8690184F8680166 +:1000200000223146484601F077F9002009B0BDE8CA +:10003000F08F0000287A0020626C6535305F6C6CB0 +:10004000632E63007FB506460B49C2F307201D46A9 +:1000500051F820000021ADF80610ADF80810144644 +:100060006946FDF7D6FE2B46224669463046FFF725 +:10007000DBFD04B070BD0000287A0020002070472E +:1000800070B5054601200C4600EB05220E23052124 +:1000900008480DF081F805210170641C4580218914 +:1000A00081812168416061688160BDE870400DF028 +:1000B000D3B900002C000100044951F8200010B110 +:1000C00090F88D017047FB2070470000287A0020CF +:1000D00070B504460E460125052105EB04222223B6 +:1000E00004480DF059F8448046820570BDE8704020 +:1000F0000DF0B2B9200001002DE9F04107463B4860 +:100100000E4650F8264004F15005A879012804D085 +:10011000022817D0032865D11AE0D5F80700A86394 +:10012000D5F80B00E863E87B85F84000284600F02E +:100130005FFF29462046FDF79AFA31463846FEF71A +:10014000A9F84FE005F110013046FDF70BFF49E03B +:10015000A0790028A87D24D038B1FEF78FFD014694 +:10016000A069027961F301020271687D38B1FEF77E +:1001700085FD0146A069027961F3830202710022C4 +:100180001146204601F00EFA00233246052138467A +:1001900000F036FEA0690179C1F38101022914D073 +:1001A00017E038B1FEF76AFD0146A069027961F3F4 +:1001B00083020271687D0028E1D0FEF75FFD0146F1 +:1001C000A069027961F30102D8E7E17921F0010128 +:1001D000E171007900F00300022803D1E07920F0FA +:1001E0000200E0710020A871BDE8F081287A0020AB +:1001F00010B50446012000EB04210A4850F8240001 +:1002000090F83A2142F0040280F83A214FF47A62E1 +:1002100005480DF0EBF92046BDE81040032100F041 +:1002200077B80000287A00203A0001002DE9F0415B +:100230000546012000EB052605F070FA040000F1E8 +:100240000C0701D0012000E00020F02208A1F5F702 +:10025000CBFB0A203870A088224620F4FF502030C3 +:10026000A08029463046BDE8F041012300F076BD6C +:10027000626C655F6C6C635F6374726C2E6300000C +:100280002DE9F0410446204D012000EB042655F8ED +:100290002400DFF878803146876940460CF064FD21 +:1002A000387920F0F000387155F8240090F83A11B0 +:1002B00021F0030180F83A113146A8F102000CF058 +:1002C00053FD3146A8F101000CF04EFD55F8240015 +:1002D000807958B1304603210DF03EF93146404651 +:1002E000BDE8F0414FF47A620DF080B90321204659 +:1002F00000F00EF855F8240090F83A1141F0100182 +:1003000080F83A11BDE8F081287A00203A00010017 +:100310002DE9F04705468946012005F0FFF9DFF891 +:100320006480040000F10C0758F82500866906F186 +:10033000040601D0012000E0002040F2051212A1C5 +:10034000F5F752FB0B203870A08820F4FF502030C6 +:10035000A080307820F0A000307058F8250090F888 +:100360003A1121F0020180F83A11012000EB05203A +:1003700049460DF0F1F829462046BDE8F04700F067 +:100380000BB80000287A0020626C655F6C6C635FBC +:100390006374726C2E6300000D4A30B452F8213041 +:1003A00093F83A31DB0707D083884FF0806404EB81 +:1003B00073334FEAF3438380037943F003030371FC +:1003C00052F82120014630BC1046FEF7D5B8000097 +:1003D000287A00200840810701D502207047C10714 +:1003E00001D001207047400701D50420704701204B +:1003F0009040C0B2704770B50446C0780D46FF28E3 +:1004000029D194F85600032825D0E179C80722D0D5 +:10041000208A40B1618A491C89B2618281421AD323 +:100420000020608202E021F00100E071022005F06E +:1004300075F902000FD09188284621F4FF51403110 +:1004400091801A211173217A51732188BDE870407F +:10045000012300F083BC70BD2DE9F047814690690F +:1004600086B04FF00008A0F86A8090698A46154669 +:10047000A0F86880906902F15004474641794646E9 +:1004800021F00401417149462846FFF7B4FF00BF3F +:10049000B4F84200A188884205D1A07918B151462C +:1004A0004846FFF729FEB4F84200B4F844108842E9 +:1004B00003D1082006B0BDE8F087A9692846091DC8 +:1004C000FDF74AF8E06A049028881B490091CDE9BD +:1004D00001600396D4E906016FF0FD02801841F136 +:1004E000FF314FF4BC6304AA06F0C8F82060A96984 +:1004F000B4F842004883D4E90620A16A511870413B +:10050000C4E90610B4F84200401CA4F84200206878 +:1005100050B1049840F27121FE38B0FBF1F0A969A6 +:10052000C885A969888505E07F1CBFB2642FAFD953 +:100530004FF043084046BDE7511301002DE9F74F46 +:1005400002F150048346D4E90B101546FE2286B012 +:1005500002EB40028F180497A16A6FF095024FF0EA +:10056000000902EB5101C846884234D2A86900262E +:10057000A0F86A60A869A0F86860A869417921F0CC +:100580000401417159462846FFF735FFA8693B49E8 +:100590000079C0F3810200F0030031F8122031F835 +:1005A00010004FF4BC61104400F5CA70884200D8B6 +:1005B00008468246B4F84200A188884205D1A07955 +:1005C00018B158460799FFF797FDB4F84200B4F800 +:1005D0004410884203D1082009B0BDE8F08F049789 +:1005E000A9692846091DFCF7B7FF2888244900910E +:1005F000CDE901600396D4E90621206B5346101A19 +:1006000061EB06016FF0FD02801841F1FF3104AA91 +:1006100006F034F82060A869B4F842104183D4E9A8 +:100620000620A16A51187041C4E90610B4F84200CE +:10063000401CA4F84200A18E206B0844206320686F +:1006400088B194F8520028B1A869216B001DFF22DF +:1006500006F09EFF049840F27121FE38B0FBF1F0E5 +:10066000A969C88508E008F101001FFA80F8B8F10F +:10067000640F9FD94FF043094846ADE7C63E0200DC +:100680005113010070B514460E4A52F82050084626 +:100690000CF0E4FC20B1012802D0022810D101E0C6 +:1006A00002200AE0192105F599700BF0E3FB18B15F +:1006B00095F8A20020B101E01A202070002070BD42 +:1006C000022070BD287A002070B50546807801268A +:1006D0000F2814D003DC90B1012804D113E01628B0 +:1006E00014D0182812D095F856000026012806D0FC +:1006F000022808D0032809D0A87968B119E00F2989 +:1007000019D0C1B106E0012915D003E0162912D095 +:10071000182910D02A240FE0E8780F28EFD004DC45 +:100720000028ECD0012804D1EDE71628EED01828D7 +:10073000ECD0002070BD23242888224600F06EF9FA +:100740001EB12888214601F00DF8012070BD00007F +:10075000F8B51D4616460F46C2F30B2410460CF0A2 +:100760007DFC0100194812D0012910D00023324627 +:1007700029460094FDF736FC154D55F8240090F8F5 +:10078000DA1059B12146002000F044F81BE00C2398 +:10079000324629460094FDF725FC14E0C178FF2974 +:1007A00001D00220F8BD0021017108484FF47A629F +:1007B00031461F300CF01AFF55F824100C20C87079 +:1007C000388801F03DF80020F8BD00001B00010052 +:1007D000287A002070B5064615460C4603200BF01B +:1007E0004FFA002813D0012000EB04220C2305212E +:1007F00007480CF0D1FC0421017046704480296840 +:10080000416069688160BDE870400CF025BE70BD34 +:100810002B00010070B50C460546012000EB0422B8 +:100820000A2305210C480CF0B7FC0C4905704480E4 +:1008300051F82420B2F8D620C28051F82420B2F812 +:10084000D820028151F8241091F8D4100171BDE82C +:1008500070400CF001BE00001F000100287A00204B +:1008600070B518460D4601461646062311480CF091 +:1008700093FC044630460CF0F1FB01004FF0000001 +:100880000DD001290BD0207028880B4951F8200089 +:100890000A4990F8260191F84211084401E00C2120 +:1008A000217020712888608020460CF0D5FD002042 +:1008B00070BD00001D000100287A00203075002066 +:1008C0002DE9F04118460E4601461546C2F30B27A6 +:1008D000062317480CF060FC044628460CF0BEFBCB +:1008E00001004FF000000AD0012908D02070B17833 +:1008F000642531B101290AD0122121700EE00C21AA +:10090000FBE70C4850F8270090F89A0002E00A48EC +:1009100090F8450111F05CF890FBF5F020713088FB +:10092000608020460CF098FD0020BDE8F0810000BA +:100930001C000100287A0020307500202DE9F843C2 +:10094000064688880C46C0F34710001FC7B2102F18 +:1009500062D800210D200CF015FC05460021102066 +:100960000CF010FC8046B069816D296090F85C1035 +:100970002971B07910B141F0800001E001F07F00F1 +:100980002871B069816CC5F80510C06CC5F8090004 +:1009900010214046F3F77FFD012188F801102079EE +:1009A00000F0030040F0200188F80210F4F74AF844 +:1009B00001F006F80097B06904F118033830424698 +:1009C0002946FCF7B1FF8146B06929463830FDF76A +:1009D00023FFE21989EA00009169884210D1A068DA +:1009E00020F01000A060B26952F8581F1079491C1D +:1009F00000F07F0343F1000363F306001160107100 +:100A0000F4F72AF801F0F2FF28460CF01DFA4046F0 +:100A1000BDE8F8430CF018BABDE8F88370B5064697 +:100A200014460D46032004F079FE0246918821F415 +:100A3000FF5160319180112100F80C1F3146457043 +:100A40008470BDE870401046FFF7A6BC2DE9F04168 +:100A500005460E46022004F061FE040000F10C077A +:100A600001D0012000E0002040F289120BA1F4F730 +:100A7000BBFF0E49002051F8251081F83A010D20E6 +:100A800038707E70A088294620F4FF504030A08046 +:100A90002046BDE8F041FFF77FBC0000626C655F57 +:100AA0006C6C635F6374726C2E630000287A0020A4 +:100AB00070B5054601200C4600EB05220B230521ED +:100AC0000A480CF069FB401C062100F8011C641C5C +:100AD00005806188818021884180A188C180E1886A +:100AE0000181BDE87040401E0CF0B6BC2D00010035 +:100AF00070B510460D46C2F30B240CF0AFFA48B1A6 +:100B0000012807D0022801D0022070BD2978204694 +:100B100000F0DAFC002070BD2DE9FC470546806935 +:100B20000E46144690F82010890601D4022700E0F2 +:100B3000012790F8220000F07F08F07900065CD5CC +:100B40006869002859D0307C810908D002214FF013 +:100B50000008B1EB901F01D1022700E0012700F04F +:100B60001F00394610F06DFF814601200CF054F94A +:100B7000002842D10E2101EB4903224605212048DD +:100B80000CF03EFE040038D0162020702888A4F80F +:100B90000100A8693B464A460079C0F38100401C29 +:100BA000E070B07900F03F002071F088C0F387104A +:100BB00040B200EB80004000A4F80500114890F816 +:100BC000FC02E071307C8009207267720020A07204 +:100BD000B5F89200401EA4F80B0084F80D90A969A6 +:100BE00004F10E006C31CDE90018696910F030FF96 +:100BF0002046BDE8FC470CF02FBCBDE8FC87000098 +:100C000032000100307500202DE9F0410746904682 +:100C10000E460C2004F082FD050000F10C0401D00A +:100C2000012000E000204FF4877215A1F4F7DCFEEC +:100C3000234606F1A80241463046FCF79FFF543692 +:100C40000120B07061893180D4F80110C6F803101A +:100C5000D4F80510C6F80710617AF17200212170EE +:100C6000A98800EB072021F4FF5101F5C071A9808C +:100C70002A463946BDE8F041002300F06FB8000075 +:100C8000626C655F6C6C635F7461736B2E630000F4 +:100C90002DE9F04107460D460C2004F03FFD06000B +:100CA00000F10C0401D0012000E000204FF490720C +:100CB0001BA1F4F799FE5435012085F81A01002193 +:100CC000217095F834206270B5F835206280B5F84F +:100CD00074202281B5F87220E280B5F86E20A280DF +:100CE000EA8F0A326281A87062892A80D4F80120D2 +:100CF000C5F80320D4F80520C5F80720627AEA7207 +:100D00002170B18800EB072021F4FF5101F5C0717B +:100D1000B18032463946BDE8F041002300F01EB8EC +:100D2000626C655F6C6C635F7461736B2E63000053 +:100D300070B5144605460A460423052106480CF002 +:100D40002BFA002807D01721017044704580BDE8B8 +:100D500070400CF081BB70BD3300010070B50C46D3 +:100D60001546014683B10B482A7B50F82430DA70CF +:100D700050F8243000221A7150F8240042714FF4C8 +:100D80007A6205480CF032FC21462846BDE87040E6 +:100D9000FFF702BB287A00203A0001002DE9F04756 +:100DA0000546012000EB05291F46884616461046D9 +:100DB00004F0B4FC0446324641460C30F3F744FBE1 +:100DC000A08866F34C10A0807FB10B4898F8001003 +:100DD00050F82520D17050F8250000214FF47A6298 +:100DE0000171494605480CF001FC29462046BDE842 +:100DF000F047FFF7D1BA0000287A00203A0001003E +:100E00002DE9F0410746134815461E4650F8254087 +:100E100088460B200AF034FF002819D006233A46F2 +:100E200041460D480CF0B8F946700C210170458020 +:100E3000A1690979C1F38101491C4171A16909794D +:100E400001F00301491C0171BDE8F0410CF004BB45 +:100E5000BDE8F081287A00203100010010B5084B70 +:100E60000C3000210268C47812BA22F0FF0222433B +:100E700043F82120001F491C0429F3DB10BD0000AA +:100E8000100008402DE9F0410E4608881A4917461F +:100E90000C2551F8204010460CF0E0F8F8B101287C +:100EA0001FD0E4B1B4F88D307288B4F88B105B1C9D +:100EB000D0005943884213D31201C4E9642094F846 +:100EC0003A0180070AD039460C480CF0ABFB0B48BE +:100ED0003946401CD4F894210CF0A4FB002500E016 +:100EE000122533882A4640F67C413846F9F7CEFA77 +:100EF0000020BDE8F0810000287A002038000100C1 +:100F00002DE9FC4792461046C2F30B250C260CF047 +:100F1000A5F838B1012805D0324C54F82500817964 +:100F2000F1BB02E00020BDE8FC87002600F59470CC +:100F300005222D49F3F7C1FA90B354F82500C17882 +:100F4000FF2901D00220EEE72849D1F83B21009289 +:100F500091F83F118DF8041090F8491080690079DC +:100F6000C0F38100014228D0052168460AF062FEE4 +:100F700054F8251091F84A1081421ED9081AC1B2BE +:100F800000204FF001096A46C70800F0070C09FA73 +:100F90000CF312F807C0DBB21CEA030F09D100E022 +:100FA00019E04CEA030C891E02F807C011F0FF019A +:100FB00003D0401CC0B22528E6D954F82510009A69 +:100FC00001F58070C1F82D219DF8041080F83110D2 +:100FD0002846FCF7A5FE324642F214015046F9F7C6 +:100FE00043FA9FE7287A00206B76002030750020B6 +:100FF0003B3081880288C900B1FBF2F1B0F80720CC +:101000001144A0F80910704770B50646092004F095 +:1010100085FB040000F10C0501D0012000E0002058 +:1010200040F2B9120BA1F4F7DFFCA08820F4FF50C6 +:1010300000F59070A0800E202870681C0AF0F4FE65 +:10104000012000EB062022463146BDE87040012316 +:10105000FFF784BE626C655F6C6C635F6374726C77 +:101060002E6300002DE9F04105464E480E46ED1D69 +:1010700050F826404C484FF0010808EB0627D0F8FE +:10108000FD12C4F8A411B0F80103A4F8A80115F8E2 +:10109000050CA071A869C4F82801287F84F82C01E8 +:1010A000A869C4F82D01287F84F831011B20A4F819 +:1010B0007C01A4F880014FF4A4703B49A4F87E01A0 +:1010C000A4F88201B1F85221ED1F002A62D0A4F8E1 +:1010D0007821A269127902F00302022A53D0B1F8F2 +:1010E0005421824200D91046A4F87A01B1F84B018C +:1010F000A4F87601B1F84901A4F874010022114660 +:10110000204600F04FFA032084F83201042084F8CE +:101110003401002084F8DA00E08184F83A0184F890 +:101120006C8184F86D0184F86E0184F86F0184F895 +:10113000680184F86B0184F870014BF68030C4F8C4 +:1011400090014010C4F894010020C4E96C00022111 +:1011500038460CF001FA2A4631460020FDF7A1FE80 +:1011600004235A02052127200CF016F814210170DF +:10117000A0F80160A169097EC1F38011C170BDE8CA +:10118000F0410CF069B9B1F854014FF42962904272 +:10119000AAD8A8E7B1F84D01A4F87801B1F84F0139 +:1011A000A2E70000287A00203075002070B50446C0 +:1011B000012004F0B3FA050000F10C0601D0012073 +:1011C00000E0002040F2E91220A1F4F70DFCA8880D +:1011D000224920F4FF502030A88051F82400836970 +:1011E000002050331A79186060F306021A7151F822 +:1011F0002420936958331A79186060F306021A7133 +:1012000051F82430C3E96C000520307051F82400F7 +:101210008269107940F08000107151F8242040F06C +:1012200020009269107151F824002A4690F83A1172 +:1012300041F0020180F83A11012000EB0420214620 +:10124000BDE870400123FFF789BD0000626C655F57 +:101250006C6C635F6374726C2E630000287A0020EC +:101260002DE9F0470446012000EB042904F056FA6A +:10127000DFF88C80054600F10C0758F824008669D9 +:10128000361D280000D001204FF4B3721DA1F4F7E1 +:10129000ABFB06203870307820F0C00040F0300002 +:1012A000307058F82400464690F83A1141F0030196 +:1012B00080F83A1158F824008179C9B1D0F890210A +:1012C000494614480CF0AEF956F824004946D0F8C7 +:1012D00094211048401C0CF0A5F9A888214620F460 +:1012E000FF502030A8802846BDE8F047FFF754B8EB +:1012F00008484FF47A624946801C0CF077F9ECE715 +:10130000287A0020626C655F6C6C635F6374726C3A +:101310002E6300003800010070B505460A480C46EF +:10132000164650F82400CAB2314690F86831284673 +:10133000FDF730FA294605480BF016FD21462846F0 +:10134000BDE87040FDF736BC287A00203A00010065 +:101350002DE9FF47804635490C9851F82040FE2082 +:10136000A5692D1D161843F1000724B1A06A4FF09E +:10137000000920B110E0002004B0BDE8F087606BE8 +:1013800010B904F0B7FB60630146002204F12800A5 +:10139000F5F7F4FBC4F83490D4E90A01C4E9080174 +:1013A00004F12800F5F728FCC4F83090206A686042 +:1013B000606A4B46417941F020014171017921F089 +:1013C00010010171216A01602846FCF714FDC8B1C3 +:1013D000607A78B16372D4F8A00100B1012040F2C4 +:1013E000A12213A1F4F700FBD4F8A0112846491C50 +:1013F000FCF730F932463B462846CDF8008004F031 +:10140000D1FBB9E7281FCDE90008E978ADF80C3029 +:10141000C1F384018DF80810ADF80A302A6F6946CF +:101420004FF0021005F0A6FCA5E70000287A002086 +:10143000626C6535305F6C6C632E63002DE9F041A2 +:1014400005460E46022004F069F9044600F10C0737 +:10145000012000EB0528200000D0012040F20A22E4 +:1014600013A1F4F7C1FAA08820F4FF504030A08007 +:10147000022038707E70132E00D11626104F0123E3 +:10148000224657F82500294680F869614046FFF753 +:1014900065FC57F82500B0F88F204FF4FA708242AF +:1014A00000D302464146BDE8F04106480CF09EB824 +:1014B000626C655F6C6C635F6374726C2E630000BA +:1014C000287A00203A0001002DE9F04106460D4639 +:1014D000022004F023F9040000F10C0701D00120E0 +:1014E00000E000204FF4097208A1F4F77DFAA0880B +:1014F000314620F4FF504030A080072038707D70C6 +:101500002046BDE8F041FEF747BF0000626C655F12 +:101510006C6C635F6374726C2E630000F0B50546FB +:101520008C4614465189B5F89220D5E91A038E1AD3 +:10153000A96F89B04E430021301841EB0302A38903 +:1015400040F2E24673431E1806A8CDE9021042EBB2 +:10155000E37740F2E240019104910CFB00F200912C +:101560000F4B3046394605F0B2F8002815D00699E1 +:101570008E1B4FF0000105F073F9A86F6189B6FB6F +:10158000F0F008446081A86FB6FBF0F100FB116039 +:1015900040F2E241B0FBF1F0A08109B0F0BD0000E3 +:1015A000416901002DE9FC470546B0F87A01B5F81C +:1015B0007E418A46A04200D20446B5F87601B5F8CD +:1015C0008261B04200D20646B5F87411B5F88001C8 +:1015D000814201D20B4600E003461B2B03D9814216 +:1015E00002D2084600E01B20ADF80000B5F87811E3 +:1015F000B5F87C01814201D20B4600E003461B2B6B +:1016000003D9814202D2084600E01B20ADF8040055 +:10161000A8694FF001080079C0F3810108FA01F0D0 +:101620001043C0B200F0DAF84FF4A4794FF4296700 +:10163000022806D04846864200D33046ADF8020064 +:1016400004E0BE4200D23E46ADF80260A8690079CF +:1016500000F0030108FA01F040EA0A00C0B200F00D +:10166000BDF80646022806D04846844200D32046EC +:10167000ADF806001EE0BDF80010BDF802004FF402 +:10168000747202EB8112904202D3880100F57470EB +:1016900000F59670A96F80B2814201D9081A00E066 +:1016A000002080B2844200D30446BC4200D23C46B3 +:1016B000ADF80640BDF90600314610F091F901463B +:1016C000BDF80400814204D8BDF90600314610F08F +:1016D00087F9C0B285F88D011B2800D21B2085F840 +:1016E0008D01082205F5C2716846F2F7E6FE002872 +:1016F00004D0DDE90001C5E961010120BDE8FC87F6 +:101700002DE9F04100240D46064601270EE000BFFA +:1017100036F81400082802D30920BDE8F08107EB51 +:1017200000200BF09BFC28B1641CA4B2AC42EFD3A8 +:101730000020F2E70220F0E70CB5094AD2E90012D6 +:10174000CDE9001200216A46535C834201D1012099 +:101750000CBD491CC9B20729F6D300200CBD0000FE +:10176000784C0200074B012202EB002253F82000C4 +:10177000002805D080F86811012110460BF0ECBE5E +:1017800070470000287A002070B500252C460126FD +:1017900006EB04200BF062FC08B16D1CEDB2641C7A +:1017A000E4B2082CF4D3284670BD00002DE9F041C6 +:1017B000002406465FF0010707EB042528460BF0DE +:1017C0004DFC30B1641CA4B2082CF5D30920BDE84F +:1017D000F081C5F30B2030800020F8E7410701D5E8 +:1017E00002207047C00701D00020704701207047D9 +:1017F00070B50D460646002405E000BFF2F712FE64 +:101800003055641CA4B2AC42F8D370BD0B4A10B57D +:1018100052F82020B2F89230C91A89B247F6FF7305 +:10182000994209D292F8561021B12A21FFF79AFF66 +:10183000002010BD012010BD2821F7E7287A0020E4 +:1018400070B50646062003F069FF050000F10C04A0 +:1018500001D0012000E00020BA2212A1F4F7C4F860 +:101860000C2020700FF0F4FCC00701D00A2000E02B +:101870000820607040F2AC60608040F20110A080EF +:10188000A8880C4920F4FF50C030A88051F82610D9 +:10189000012081F8DB0031462846BDE87040FEF7A4 +:1018A0007BBD0000626C655F6C6C635F6374726C1F +:1018B0002E630000287A002010B51046C2F30B24D6 +:1018C0000BF0CCFB40B1012806D0022801D0022049 +:1018D00010BD2046FFF7B4FF002010BD70B50546CF +:1018E000002410F8011B00F05FFE002801DB122429 +:1018F0000CE028781D4958B101281ED0FF28F6D1E8 +:10190000012081F8620100BF00F036FC204670BD66 +:1019100091F86021D1F8580100EBC200D1F85C21A8 +:10192000904221D255F8012F0260AA88828091F856 +:101930006001401C81F86001E6E791F86021D1F870 +:10194000580100EBC202D1F85C0182420CD201F5D1 +:10195000AE710838086055F8012F0260AA888280AD +:101960004879401C4871CFE70724CFE73075002045 +:1019700010B5104C206928B90021032003F02CFE7B +:101980002061A8B12169002081F826000948216959 +:10199000103890F8450181F8230021690648086154 +:1019A000216906484861216903204867002010BD6D +:1019B000072010BD40750020D6BE898E55555500B4 +:1019C000064810B590F8F800002805D002F084FD14 +:1019D000BDE8104000F094BC10BD00003075002040 +:1019E00070B5044601690F23032213480BF0D4FBA2 +:1019F000054618340E222146401CF2F725FD2078BA +:101A0000B0B16288D4F80A000C49F2F71DFD00203D +:101A100028700B488168C90605D5816821F010013E +:101A20008160012028702846BDE870400BF014BD8D +:101A3000608861784218E5E745000300000208402D +:101A4000000008402DE9F0470F4681461E469046AB +:101A5000002168200BF052FE04460C2003F05EFECD +:101A60000546ECB368212046F2F715FD2765C4E969 +:101A700015862146484603F0AFFD6063FF2207212B +:101A800004F1380003F0FEFDA06B50B3606B40B36F +:101A90003DB32D60A88820F47F60C030A8802879ED +:101AA00020F00F00C01C2871606BC17921F07C010F +:101AB0005C31C171017E21F0010101760C4991F880 +:101AC000451180F8231085602821C185417921F0D6 +:101AD00004014171012180F826102046BDE8F087FD +:101AE00000E001E00020F9E7204600F01FF8F9E7E8 +:101AF0003075002010B504000ED02078012801D0E8 +:101B0000012000E00020482204A1F3F76DFF2046E9 +:101B1000BDE8104000F00AB810BD0000626C655FBF +:101B20006164765F636861696E2E630010B5044678 +:101B3000806B18B104F1380003F000FF606B28B12E +:101B4000806803F069FF606B03F0BCFEE06D10B1CC +:101B500018380BF035FA2046BDE810400BF074B988 +:101B60002DE9FF4706460C989046DDE90E2A817C58 +:101B7000994609064FF4967701D41E2100E03946B4 +:101B8000746BB0F81330241DC3F30C05E3784D4398 +:101B900062F38603E370027DEA3D5309227801F582 +:101BA000967163F383022270807C627D60F305028C +:101BB0006275207D20F001002075607820F004001F +:101BC0006070204603F015FE84F822A0EA2000226F +:101BD0000749CDE90240CDE9001218EB050049EBB9 +:101BE00002013B460DAA04F049FD7064BDE8FF8781 +:101BF00035B601002DE9FE4F07460C9D92469946E9 +:101C0000A87D800601D41E2601E04FF4967635F8B3 +:101C1000150F7C6BC0F30C007043A0F1EE0814F8B4 +:101C2000040F0022C0F38101FF200FF0F1FE834674 +:101C3000E07820F07C005830E070786B0079C0F3D9 +:101C40008101207861F3830020706868A061287AA0 +:101C5000217F60F304012177B5F80D002082E87B35 +:101C6000A074D5F80900E06006F59671204603F0EF +:101C7000C0FD207D002240F041002075288AE082CE +:101C8000012084F82200EA200092CDE901401AEBFD +:101C9000080049EB0201044B0BF1EA0204F0C6FC18 +:101CA0007864BDE8FE8F000035B60100416C19B1C3 +:101CB00001210170084670470020704770B5044646 +:101CC000856B0078012801D0012000E00020662209 +:101CD0000AA1F3F789FE284603F070FD606BC16826 +:101CE00065F31E01C160607820F003006070002081 +:101CF000A0802564C4E9120070BD0000626C655FBD +:101D00006164765F636861696E2E630070B50C0074 +:101D1000054601D0012000E000204FF4A07220A170 +:101D2000F3F762FE287A162817D0172815D018283E +:101D300026D1216C4879800608D5236D2046A26DF6 +:101D40009847206C417921F020014171206C006896 +:101D50002064A08800F10100A080216C48798006F1 +:101D600008D5236D2046A26D9847206C417921F05B +:101D700020014171206C00682064A088401CA08074 +:101D8000606C00280BD1606B216CC06820F00040B3 +:101D9000884204D12046BDE8704000F066B970BDAD +:101DA000626C655F6164765F636861696E2E630073 +:101DB00070B50C46017A00250226162911D0172984 +:101DC0000FD0182908D1408902280DD2606C10B1BB +:101DD00004F028FF656426702046BDE8704000F0DE +:101DE00044B940890028F1D070BD00002DE9FF41C1 +:101DF000476B0446851D007897F88280012869D1D9 +:101E0000B86F616C884201D1012000E00020F5220A +:101E100031A1F3F7E9FD606C18B104F003FF002075 +:101E20006064F868B8F1180F20F0004600D13668F9 +:101E3000316861F31E00F8606078C0074AD170799C +:101E4000800647D5307A10F02E0F43D1F07B00F09A +:101E50000301381D03F01CFF07468846D4E9120130 +:101E6000084301D1C4E912782946304609F091FDB2 +:101E700000282FD0A878C1060FD4800601D40320F3 +:101E800027E01948D0F89800002823D13A46434665 +:101E900020460095FFF7AEFE14E0B5F81300C0042D +:101EA00010D0287D114B4009012133F81000172272 +:101EB000EA3000950391CDE901023A4643462046B7 +:101EC000FFF74EFE606C002804D12078012801D174 +:101ED00002202070BDE8FF81626C655F6164765FFF +:101EE000636861696E2E630030750020C63E020093 +:101EF0002DE9FF470CA91546B1E810031E46074619 +:101F0000FFF7DCFEA078810606D52A463346384620 +:101F10000094FFF76FFE53E0C0064CD5217D2B4B9C +:101F20004909786B33F81120001D2949C160EA3254 +:101F300028490161B8F1000F36D04168B9F1000FAE +:101F400091F805C02CF0800C81F805C091F807C00D +:101F50002CF0030C0CF1010C81F807C002D04CF0FE +:101F6000080C01E02CF0080C81F807C0797802F524 +:101F7000167241F002017970217D4FEA511C0178FF +:101F80006CF301010170207D0221400933F810003B +:101F90000094104418220391CDE901022A463346E9 +:101FA0003846FFF7DDFD0BE0012017210094039078 +:101FB000CDE90121F2E7BD2207A10020F3F714FDCE +:101FC00004B03846BDE8F047FFF770BEC63E0200D9 +:101FD000D6BE898E55555500626C655F6164765F2B +:101FE000636861696E2E63002DE9FE4F0CA91646E9 +:101FF000B1E880071C460546FFF760FE00218DE82A +:10200000020643463A463046214604F00FFB686418 +:102010002846BDE8FE4FFFF749BE10B5044640789C +:10202000002140F001006070606C04F019FC002891 +:1020300004D00020606402202070012010BD000048 +:102040002DE9F04101250E460746002408E000BFB7 +:1020500057F8240018B1FFF7E0FF00B90025641C11 +:10206000B442F5DB2846BDE8F0810178022901D0B1 +:10207000032906D100210170426D002A01D0816D33 +:10208000104770472DE9F0470026204C3746B046F0 +:102090004FF0020926714FF4804A00BF07EB47005A +:1020A00004EB400515F8360F01282BD0032809D37F +:1020B0002FBBE06BC4F83600B4F840006087A9F18C +:1020C00001091AE0A9886A8891421BD86B78012B14 +:1020D00018D8514516D8042914D3524512D8042AC9 +:1020E00010D309F0A9FE68B108F1010000F0FF0863 +:1020F00068787F1C012800D120714F45CEDB56EA5D +:10210000080000D112263046BDE8F0874075002057 +:1021100070B50E4C054621B1012907D094F8450051 +:1021200012E00B490FF08BF860B9F7E70849891FF7 +:102130000FF085F830B994F8450028B1284606F02C +:10214000CFF908B1012070BD002070BD30750020AE +:102150006476002010B503F03FFF064C206003F0CA +:102160003BFF80306060002020726072BDE810404C +:1021700000F002B8887600200548027A417A42EAE7 +:1021800001220449CA6302684A6340688863704751 +:1021900088760020000009402DE9F041504CFFF7FF +:1021A00071FF10B11220BDE8F0810026A667E66736 +:1021B000C4F88060C4F8846084F848600120A0708E +:1021C000A68502F073F9FFF7D3FB0028EBD1256950 +:1021D000FF222D1D022104F1140003F053FA0C22FA +:1021E000012104F11C0003F0ABFAE069C0B16169A0 +:1021F000B1B12179C9B1017921F00F01C91C017177 +:10220000818821F47F61C0318180C17921F003018F +:10221000491CC17194F8342022B141F0080103E057 +:102220000720C0E721F00801C171002723460022E2 +:102230002C490320FFF706FC04EB8701C1F8B80026 +:1022400030B1217921B1406BE16980684968416012 +:102250007F1C042FEADB94F8341004F108022248B2 +:1022600009F07AFC00289ED16069A062D4E90701D8 +:10227000086095F8200040F0010085F82000E06932 +:1022800068606169A86861F31E00A860287D16492E +:1022900020F0400040F001002875687D0D3120F0ED +:1022A0003F002730687505F1180004F0B0FD667036 +:1022B000022103200BF050F901F0B6FA050005D019 +:1022C000002103200BF048F928466CE7B4F84420BD +:1022D0001AB1032105480BF089F9002063E70000DB +:1022E00040750020193701005E7600204C00030085 +:1022F00010B500F005F8BDE8104000F047B8000048 +:102300002DE9F0411D48F4F787FC054601200AF04D +:102310001BFD1A4F083F002655B1686920280BD0D5 +:102320002846FFF75DFB1648866028460AF048FEFF +:1023300087F8F860BDE8F08111230322114829696C +:102340000AF02AFF044610220F49401CF2F77CF8DD +:10235000287C01280DD00020C0F10F0123180A1994 +:1023600093F801C0517882F801C0401C59700828C8 +:10237000F2DB267020460BF06FF8D4E738750020AA +:102380000000084044000300100208400448806830 +:1023900010B1183002F01CB81020F4F7C3B90000D7 +:1023A000307500202DE9F041144688460646012587 +:1023B000876A0DE0022C10D302224146304600F01D +:1023C00015F800B900253868A41EA4B20068B062F0 +:1023D000002CEFD12846BDE8F0810122414630466D +:1023E00000F004F80028F5D10025F3E770B5846A01 +:1023F00016460546012A05D03EB3207A10F02E0F6E +:1024000015D033E0207A10F02E0F2FD1207900F074 +:102410000F000728F1D1204605F096FE8007ECD585 +:102420002146284601F056FD80F0010070BDE87895 +:1024300010B1204600F054FB022E17D12068017A1B +:1024400011F02E0F02D0E87860B10FE0017901F0B1 +:102450000F0104290AD1E97811B100F041FB05E030 +:10246000012100E00021204600F026F8012070BD87 +:1024700010B50446806AB2B1017A11F02E0F12D164 +:10248000017901F00F0108290DD2DFE801F0040401 +:10249000040C0C0C040EE17811B100F021FB02E0F9 +:1024A000002100F009F8012010BD0146204601F08E +:1024B00011FD80F0010010BD2DE9FC4105460079B9 +:1024C0000F4600F00F040C2009F0DAFB002824D09E +:1024D00000F06EFA060020D0A8690090A88BADF835 +:1024E0000400234890F8530020B12146684609F0C3 +:1024F000D9FC70B1B41C2946204601F0F9FF2879B7 +:1025000010F00F000BD001280BD0062819D0102096 +:1025100018E0A6F118000AF053FDBDE8FC81132075 +:1025200010E0152020800020E0756879C0F380104D +:102530002074D5F81E00C4F81100688CA4F81500AA +:1025400001E0122020807FB12968204601F0D0FFF1 +:102550000849E01C0EF073FE287910F00F0F01D02F +:102560001A2000E01B20208030460AF075FFD4E7D7 +:1025700030750020054802002DE9F04117460D4650 +:10258000064600240BE000BF06EBC40039460EF0FF +:1025900056FE10B12046BDE8F081641CE4B2AC42A6 +:1025A000F2D34FF0FF30F6E7094B21B1012907D0F4 +:1025B0004FF0FF30704793F86011D3F8583103E0C3 +:1025C00093F86111D3F85C3102461846FFF7D4BF87 +:1025D0003075002070B5064600240A4D09E000BFA2 +:1025E00005EBC4009D3008223146F1F766FF38B193 +:1025F000641C95F89C00A042F2DC4FF0FF3070BDE7 +:10260000204670BD3075002070B500210F4D044686 +:102610000A460B4605EB8300D0F8C80050B1066EA1 +:10262000A64200D1024611B9067806B901465B1CE4 +:10263000042BEFDB32B11078012801D0104670BDB9 +:10264000002070BD01B10C66084670BD30750020D9 +:1026500010B5084B0246002103EB8100D0F8C800FA +:10266000002806D0046E944203D0491C0429F3DBF1 +:10267000002010BD307500200449C08891F8421137 +:10268000C0F38710084440B2704700003075002046 +:1026900070B5214C032121480AF066FB1F48032135 +:1026A000401C0AF061FB0021206B04F0D9F868B3EC +:1026B0000026042104F1B8002663FFF7C1FC28B30B +:1026C0005FF0000504EB8500D0F8B800FFF712FAC0 +:1026D0006D1C042DF6DB883426636663A663E6630F +:1026E00054F888090AF0B0FB04F1100003F01AF95D +:1026F00004F1140003F022F904F11C0003F06CF95A +:10270000002103200AF028FF267070BDBDE870404C +:10271000012103200AF020BF407500204C00030077 +:102720002DE9F04389B0C76D4FF000098DF81C907A +:10273000436B2D4D0DF11C0C1B798846C3F38106AC +:10274000D5F88830BF1C1C785B7B0296CDE9054923 +:10275000CDE903C3D0E91210CDE900104146384657 +:1027600009F0F8FF0446082803D39DF81C00002850 +:1027700037D00D2009F084FA38B310230322052145 +:102780001A480AF009FD0E2101709DF81C1001B1D4 +:1027900007214170448098F81120761C12090271BB +:1027A000BA784271D7F80320C0F80620B7F807209E +:1027B00042810673B8F81720A0F80D2098F81D2064 +:1027C0005209C27311B10AF047FE03E0084951F8FB +:1027D00024108866D5F888000AF036FB0120C5F879 +:1027E000889009B0BDE8F083407500203C000300EC +:1027F000EC7A002010B508480A881C4642808A8876 +:1028000082808988C180002303222146034808F082 +:10281000EAFC002010BD0000307500202E000300EF +:1028200070B5154C1E460D462078012822D1FEF7C2 +:10283000ABFFF8B10020E0800AE005EB4002E18840 +:102840005288401C05EB4202C0B2528A1144E1801A +:1028500029788142F1D8E088A188884204D8297873 +:10286000A81CFEF74DFF28B112230322314603486E +:1028700008F0B9FC002070BD307500202F00030067 +:102880002DE9F0410022434903200AF0A9FA424908 +:1028900001200AF011FE4148016C406C4FF4427176 +:1028A0003F48F1F7F8FDFF2204213E48F1F7ECFD27 +:1028B0003C4C1F274F3C012684F8537084F84E602F +:1028C00044F29020A4F85F00FB21A4F85D10A4F866 +:1028D0006300A4F861101B20A4F866004FF4A470F4 +:1028E000A4F86800F1F79EFD60730025A573E573F9 +:1028F00026706760EC3C0EF0ABFCC00604D504F516 +:102900009A700EF0ABFC06E0264827493B380A686F +:1029100042638988018784F8F85084F8466108206A +:1029200009F098FA28B194F8460140F0020084F8C2 +:1029300046010B2009F08EFA28B194F8460140F0C8 +:10294000040084F8460104F5A274A078E0702071B8 +:102950003F2060702570A4F5A274FFF7FBFB104DBB +:1029600008352846F4F758F910B10AF029FBF8E7C2 +:102970002846F4F741F904F2F624322060806420FE +:1029800020806FF02F000949A0800B200860BDE86F +:10299000F0810000843E0200F122010000000940A5 +:1029A000307500206B7600200548020000000840CA +:1029B00010B501200AF030FA98B9FF23032205214F +:1029C00009480AF01DFF60B10D210170012141701D +:1029D000FF22027142737F228273002202824276BA +:1029E00010BD002010BD00003B000300FFF7CEBC6F +:1029F000034608680A46C16F002901D010461847EF +:102A00007047000010B50C460A4991F8451001299D +:102A100008D0032906D05CB12046BDE81040194615 +:102A2000FFF776BB1146FFF7BFFDC017401C10BD76 +:102A3000012010BD307500202DE9F041074600242B +:102A40000E4E14E006EBC405B87815F89D1F8842B9 +:102A50000BD1691CF81C0EF0F2FB30B1F87AE97961 +:102A6000884202D10120BDE8F081641CE4B296F8EE +:102A70009C00A042E6D80020F5E700003075002059 +:102A8000054890F84510012903D0032901D0012001 +:102A9000704790F8620170473075002010B50A4BFE +:102AA00000214FF6FF7400BF03EB4102B2F85A2039 +:102AB000A24206D0824201D1002010BD491C142937 +:102AC000F2D3012010BD0000307500200348D0F87B +:102AD0009800002800D001207047000030750020C9 +:102AE0007CB505460079184C00F00F01A8690090EC +:102AF000A88BADF8040094F85300012806D00129F2 +:102B000004D094F8F010890717D508E0684609F05A +:102B1000C9F994F8F01089070FD500280DD02B23A0 +:102B2000032205212A200AF037FB0446294608F033 +:102B300093FC18B120460AF08FFC7CBDA4F118006C +:102B40000AF03EFA7CBD00003075002010B5A1F1FE +:102B500018000446014600220648F4F72DF80548FF +:102B6000083890F8F80010B9204601F031FC012037 +:102B700010BD0000387500202DE9F041194C0E46BB +:102B8000002594F8D8001746410706D440F0080005 +:102B900084F8D800FFF79AFF08B10C2518E094F8E4 +:102BA0009C00052801D3072512E03046FFF712FDEF +:102BB000002801DB12250BE094F89C0004EBC00117 +:102BC000401C84F89C00306841F89D0F7068486094 +:102BD0002A4642F247013846F7F746FC0020BDE896 +:102BE000F08100003075002010B50D491446002218 +:102BF00091F8D830580706D443F0080081F8D8007F +:102C0000FFF764FF08B10C2202E0002081F89C006D +:102C100042F249012046F7F727FC002010BD0000D2 +:102C20003075002010B502F0B3FF002010BD000089 +:102C30002DE9F0410E4E087817463478002518B17A +:102C400034B1641EE4B204E0072C01D2641CF9E73D +:102C500043252046FAF794FD00B934702A4642F223 +:102C60005F013846F7F700FC0020BDE8F081000066 +:102C7000F40100202DE9F0472A4F0C46A7F110007F +:102C8000914690F8D81000264A0706D441F0080172 +:102C900080F8D810D7F8880008B10C2639E0B4F8CD +:102CA0000900B0F5FA7F0FD2B4F80B000A280BD355 +:102CB000B0F5804F08D82078C00720D1A07801282F +:102CC00002D860780F2801D9122622E0DFF8588058 +:102CD000002500BF58F8250068B13C30E11C0EF01B +:102CE000AEFA40B158F82500617890F82900884282 +:102CF00001D10B260DE06D1CEDB2082DEAD30021A9 +:102D00000E200AF03FFA0E222146C7F88800F1F79C +:102D10009BFB324642F244014846F7F7CBFB0020CA +:102D2000BDE8F08740750020EC7A002070B5174CA4 +:102D30001546A4F1100142F2450691F8D800420769 +:102D40001DD440F0080081F8D800D4F88800B0B154 +:102D50000AF07AF8002231462846C4F88820F7F7AE +:102D600083FB10230322052109480AF015FA0E21DE +:102D70000170442141700AF06FFB002070BD0C22ED +:102D800031462846F7F770FBF7E700004075002052 +:102D90003C0003001046104A10B592F8D810CB073B +:102DA00005D00C2242F23A01F7F75EFB11E041F048 +:102DB000020182F8D81002460323052107480AF0D1 +:102DC000EBF90021017040F27261A0F801100AF0E5 +:102DD00043FB002010BD00003075002035000300CB +:102DE00010460F4A10B592F8D810CB0705D00C2228 +:102DF00042F23B01F7F738FB0FE041F0020182F8A5 +:102E0000D81002460223052106480AF0C5F9002120 +:102E10000170082141700AF01FFB002010BD000066 +:102E2000307500203600030010460F4A10B592F8A6 +:102E3000D8104B0705D50C2242F24A01F7F714FBD4 +:102E40000FE041F0080182F8D81002460223052164 +:102E500006480AF0A1F900210170052141700AF02D +:102E6000FBFA002010BD0000307500203800030080 +:102E700010B5052319460C480AF08EF9002101709F +:102E80000A49B1F8422102EB82025200A0F8032065 +:102E9000B1F940110A2291FBF2F1A0F801100AF0F9 +:102EA000DBFA002010BD000039000300307500205F +:102EB00070B5032305210D480AF06EF904460C4D48 +:102EC0000020207095F844010EF082FD642690FBEE +:102ED000F6F0607095F845010EF07AFD90FBF6F083 +:102EE000A07020460AF0B8FA002070BD3700030039 +:102EF0003075002010B50523194608480AF04CF932 +:102F0000002101700721417008218170C1701421D6 +:102F100001710AF0A1FA002010BD00003D0003007D +:102F200010B500210846F3F7F3FF002240F60341F5 +:102F30000320F7F799FA012010BD000070B51A4C74 +:102F40001646002594F8D800420706D440F0080041 +:102F500084F8D800FFF7BAFD08B10C251CE008463C +:102F6000FFF738FB002801DA422515E000200AE0CF +:102F700004EBC00202F1A501D2F8A53042F89D3F52 +:102F800049685160401C94F89C10491E8142EFDC56 +:102F900014F89C0F401E20702A4642F24801304629 +:102FA000F7F762FA002070BD3075002070B5164644 +:102FB00010460AF053F8022820D1114BB3F85600FE +:102FC000B3F85450C401A54210D9102008F058FE9F +:102FD00048B10123324605210A480AF0DDF81121E3 +:102FE00001700AF039FAFFF753FB07E0012058742B +:102FF0000448621B314613300AF0F8FA002070BD15 +:10300000307500203A00030070B516460C4C10468F +:103010000AF024F8022811D1A4F110053146B5F8C0 +:10302000542008480AF0E2FA0020687494F843003B +:10303000022801D101F03AFA00F0F6FB002070BD41 +:10304000407500204C0003002DE9F0410C46097842 +:1030500012251646C80701D16078C0B1880701D48F +:10306000A078A0B10E4FC80706D1607808F00EFF17 +:1030700068B1607887F847012078800706D4A07887 +:1030800008F004FF18B1A07887F8480100252A4607 +:1030900042F231013046F7F7E7F90020BDE8F08150 +:1030A00030750020104610B5064A0B68C2F8FD3294 +:1030B0008988A2F80113002242F25D01F7F7D4F9E2 +:1030C000002010BD307500202DE9F0412D4E0C463A +:1030D000A6F110009846002590F8D81017464245F2 +:1030E00004D04A0723D441F0080103E00A071ED4A4 +:1030F00041F0040180F8D810207870B1607802287F +:1031000009D8A08801D130B100E030B1A088618831 +:10311000B0EBD11F01D812250AE0384609F09EFF16 +:1031200058B1012823D0022820781BD000B10C25EB +:1031300047451FD042F242011EE020780028F7D018 +:10314000002030702068C6F84200A088A6F846002B +:10315000474501D1012000E00020F070FFF71CF886 +:103160000546E5E70028E3D1FFF792FAE0E7022001 +:10317000BDE8F08142F20C012A463846F7F774F9AF +:103180000020F5E7407500202DE9F0411D46224E54 +:1031900014460F46AA4203D00EF05AF8C0070AD0D0 +:1031A0001D481038AC4290F8D81006D04A0710D409 +:1031B00041F0080105E0112221E00A0709D441F09D +:1031C000040180F8D810204609F048FF18B1012802 +:1031D00009D00C2213E03878032802D87878042824 +:1031E00004D312220BE00220BDE8F0810E22394602 +:1031F00006F13400F1F728F9FEF744FF0246AC422D +:1032000002D042F2410101E042F20B012046F7F701 +:103210002BF90020E8E7000040750020074910B5B1 +:1032200000200874032009F019FF022804D100F0DF +:10323000FBFA08B1FFF72CFA002010BD3075002012 +:1032400070B5B1F902301046002203F5A0644FF4C6 +:103250002065AC4205D8B1F9004004F5A064AC4249 +:1032600001D912220BE00A2493FBF4F4074BA3F8D4 +:103270004241098801EB81014900A3F8401142F263 +:103280004D01F7F7F1F8002070BD00003075002007 +:1032900010B5194609230322074809F07DFF0446AB +:1032A0000821401C01F0B0F80020207020460AF0F0 +:1032B000D3F8002010BD00004600030070B5134C89 +:1032C0001046194694F8D820930705D50C2242F2EF +:1032D0000701F7F7C9F816E042F0010084F8D800BA +:1032E000022303220A4809F057FF054694F84501D6 +:1032F0000EF06EFB642190FBF1F0687000202870E6 +:1033000028460AF0A9F8002070BD000030750020A2 +:103310004200030010B5194604230322064809F0B1 +:103320003BFF5F21C170FB21A0F80110002101705B +:103330000AF092F8002010BD3F00030010B51946B6 +:1033400009230322074809F027FF07490A68C0F844 +:1033500001204968C0F80510002101700AF07CF8CE +:10336000002010BD40000300743E020010B5194655 +:10337000092303220A4809F00FFF401C002100F82E +:10338000011C08490A8882804A88C2808A88028093 +:10339000C9884180401E0AF05FF8002010BD00007F +:1033A000480003007976002010B519460523032252 +:1033B000084809F0F1FE002101700749B1F85221D7 +:1033C000A0F80120B1F85411A0F803100AF044F855 +:1033D000002010BD490003003075002010B51946CB +:1033E00009230322074809F0D7FE07490A68C0F8F5 +:1033F00001204968C0F80510002101700AF02CF87E +:10340000002010BD470003007C3E020010B51946A5 +:1034100002230322054809F0BFFE0021017010219C +:1034200041700AF019F8002010BD000043000300AD +:1034300010B50748D1E90021C0E900211C4600234E +:1034400003222146034807F0CEFE002010BD0000F5 +:10345000207600203E00030070B51D460C464FF458 +:10346000006009F0FBFD022807D0032009F0F6FDFB +:10347000022802D005F020F808B10C2305E00B4922 +:1034800020460DF0DCFE38B11223032229460848FD +:1034900007F0A9FE002070BD064821680023C0F88F +:1034A0002E11A188A0F83211EFE7000005480200B4 +:1034B00041000300307500207CB5064615460C46D9 +:1034C000104609F0CBFD0228207809D0012809D048 +:1034D0000C2242F20C012846F6F7C6FF00207CBD04 +:1034E0000028F5D10021ADF80210ADF804102078C5 +:1034F0008DF8000060788DF801002B461A46694669 +:103500003046FFF7E1FD7CBD1FB54B798DF80030EB +:103510008B798DF8013000238DF80230B1F801303D +:10352000ADF804300B788DF80330B1F80310ADF826 +:10353000061003218DF8081013466946FFF724FE94 +:1035400004B010BD10B508480A881C46A0F85221E6 +:103550004988A0F85411002303222146034807F0AC +:1035600042FE002010BD0000307500204A0003001C +:103570002DE9F04792460F464FF000093A4C0D7A7C +:10358000104609F06BFD06005CD0C846012E07D03E +:10359000162D61D01BDC042D42D0052D1BD125E05A +:1035A000162D0DD004DC042D07D0052D0CD104E020 +:1035B000172D05D0182D07D102E0C4F8308003E0A4 +:1035C00039462A48FFF714FAFFF762F83AE0172D58 +:1035D00042D0182D40D0C5B35FF0000040F6E11294 +:1035E00023A1F2F701FA206B48B32BE07868216B36 +:1035F000884201D1012000E0002040F6CD121CA13C +:10360000F2F7F2F9206B18B103F00CFBC4F830802C +:103610001B4803F08BFA80F0010040F6CF12DFE781 +:10362000206B18B103F0FEFAC4F830807989A08CC1 +:10363000814202D9081A1FFA80F9022E06D02046CC +:1036400000F028FF0020BDE8F0870AE04A46514616 +:103650002046FEF7A7FEC6E739460448FFF7C8F93B +:10366000C1E70120BAE7000040750020B11D01004C +:10367000626C6535305F6C6C636F6D2E63000000AB +:103680003D44010070B516460D46204C104609F029 +:10369000E5FC022838D1697AA06A04E0027A12F0C7 +:1036A0002E0F0FD000680A00A1F10101C9B2F5D1B7 +:1036B000287A052809D0162822D0172820D01828C3 +:1036C00022D11DE00020A085F2E76D7AA08C2A4669 +:1036D0002844A08431462046FEF7CAFEA06A08E0CE +:1036E000417921F020014171C17921F08001C1713E +:1036F00000682900A5F10105ADB2F1D1A06203E097 +:1037000029460348FFF774F9002070BD407500207A +:103710000D1D01000020704770B58EB004460020DA +:1037200016468DF830000D460CAB01AA204600F07D +:1037300072FB78B16078800701D5A08878B19DF8D8 +:103740003000009001AB32462946204600F07EFC56 +:10375000002802D12046FEF760FC0EB070BDE06D7F +:10376000418841F0080141809DF830000028F4D0E4 +:1037700001AA2946204600F031FBE9E72DE9FF5F69 +:1037800084B08468129D06469346A87C04F1040424 +:10379000000601D41E2701E04FF49677B5F8130018 +:1037A0000022C0F30C007843A0F58179287D4109FF +:1037B000FF200EF02DF900F1FE0AE078D6F80C801B +:1037C00020F07C006430E070607820F004006070CD +:1037D000287D4109207861F383002070207D20F04E +:1037E00001002075A87C617D60F305016175A16809 +:1037F000204668F31E01A16007F5967101F0F9FFFC +:10380000404601F0DBFF00220294CDE90026079933 +:103810001BEB09005141034B524602F007FF08B071 +:10382000BDE8F09F75B601002DE9F04F8C4C87B0D4 +:10383000A4F1100B20699BF81110071D002973D10A +:10384000002871D0032009F009FC0228F7D1206B71 +:103850000028F4D194F8480040F2712200EB4001B6 +:1038600004EB410504EBC0003635D0E91E1668882C +:103870005043C21711EB0008A08D5641401CA08593 +:10388000606901F09BFFE06901F0A3FF60694FF000 +:10389000000AA062A4F824A094F8480084F8490023 +:1038A000F8784FF0010920F07C001430F87087F8A8 +:1038B00022902978C9B1387820F00C00083020F027 +:1038C0000300801C38707878664A20F00400787015 +:1038D00094F83510788861F38900788010F47F7F40 +:1038E0002BD09BF8601101B320E0397821F00F0153 +:1038F000397069780129E6D1E17811B9A1780029F8 +:10390000E1D020F07C01584A87F822A01031F970EC +:103910001088401C1080C007D5D021F07C0087F8AB +:1039200022901430F870CEE77AE001219BF8610113 +:1039300000B9012041EA0020D06397F820004C4BE9 +:1039400040F0010087F82000A988388C61F34E0010 +:103950003884A888A0F101007885E0697860616901 +:10396000B86861F31E00B860387D40495FEAC07CEA +:1039700011D05FEA406C0ED497F815C00CF03F0CE4 +:10398000BCF1250F07D3D7F80CC08C4503D1D7F86D +:1039900010C09C450BD020F0400040F0010038756D +:1039A000787D20F03F0027307875F9603B61916A9F +:1039B000072060F30201916202F012FB642280187A +:1039C00041F10001B8EB0002CDE9040176EB010200 +:1039D00002D3B8EB000000E06420A98840F2712215 +:1039E000514394F8482004ABCDE9002ACDE902A365 +:1039F000EA31564600231F4A02F0EFFD206310B162 +:103A0000287820B110E0432007B0BDE8F08F687837 +:103A1000012809D1A07828B10020A070012803D086 +:103A20000020F1E70120F8E794F84820DDE90401DF +:103A300004EBC202C2E91E0194F84820494629EA73 +:103A4000020000EB400204EB420292F83620032A07 +:103A500002D284F8480001E084F84860A170DFE7F2 +:103A6000407500200000094018040020D6BE898E51 +:103A7000555555003D4401002DE9F0410546087AB1 +:103A80008EB00C4610F02E0F54D103A9204607F03B +:103A900080FF00284ED09DF80E00C1064AD5BDF823 +:103AA0001F10C90446D0000744D5D5F8880038B99E +:103AB000BDF81C00C0F30B00FEF7F0FF002839D062 +:103AC000BDF81C00FEF7A0FD060033D0E07B00F03F +:103AD00003012869001D02F0DBF86FF00902841869 +:103AE0009DF80D0041F1FF3580070DF10C080AD556 +:103AF000124F97F8580000EB400007EB400090F899 +:103B00004700012807D0304600F083FB0020CDE9B4 +:103B10000080029009E0304600F07BFB97F84400FB +:103B20000122CDF80080CDE9012022462B46304607 +:103B3000FEF7DEF90EB0BDE8F08100003075002020 +:103B4000014800F0A7BC00004075002010B51946E0 +:103B500007230322084809F01FFB0849D1F8342144 +:103B6000C0F80120B1F83811A0F80510002101704B +:103B700009F072FC002010BD3400030030750020F5 +:103B800010B5194608230322064809F005FB002159 +:103B90008180A0F80110C170C180017009F05CFC47 +:103BA000002010BD3300030010B519464123032245 +:103BB000074809F0F1FA044640220649401CF0F794 +:103BC00043FC00202070204609F046FC002010BD78 +:103BD00031000300343E020010B5194609230322C8 +:103BE000094809F0D9FA002141708170C170017152 +:103BF0006022427181714022C2710172017009F02C +:103C00002BFC002010BD00003200030010B5194647 +:103C10000A2303220D4809F0BFFA04460020207051 +:103C20000DF016FBC00701D00A2000E0082020712B +:103C3000607040F20110608040F2AC61E180208150 +:103C4000204609F009FC002010BD000030000300F0 +:103C50002DE9F041C46D804691F82B009188A41C99 +:103C6000C1F3071188423DD2091A1832CDB2871824 +:103C700036E0E07DC0F1E501CEB2B54234D904F1C1 +:103C80001801084432463946F0F7DEFBE520E075BE +:103C9000A81B3744C5B2FEF78BFE060013D01922CD +:103CA0003046D8F85C10F0F7CFFB208840F02000B9 +:103CB00020800C2007F0E4FF0028D8F85C0007D033 +:103CC00009F0CAFB07E04046BDE8F04100F0A1BAA8 +:103CD000183809F075F9B41C0020C8F85C607076DB +:103CE000002DC6D1BDE8F081C1B204F1180008442E +:103CF0002A463946F0F7A8FBE07D2844E075F1E755 +:103D000070B50546002410F8011BFEF74DFC002895 +:103D100001DA122070BD2A7822492AB1012A1DD069 +:103D2000FF2A37D012243AE008230CE0D1F85821BA +:103D300003EBC00602EBC0053244401C16682E603F +:103D400052686A6000B291F86021521E8242EDDC36 +:103D500091F86001401E81F860011EE06FF00703DA +:103D60000DE000BFD1F85C2103EBC00602EBC005FB +:103D70003244401E16682E6052686A6000B2012804 +:103D8000F0DA01F5AE714879401E487108680830D4 +:103D9000086002E0002081F86201FEF7EDF920469C +:103DA00070BD00003075002010B54FF6FF729042D4 +:103DB0000CD0094B002100BF03EB4104B4F85A407A +:103DC000944204D103EB4101A1F85A0010BD491CF3 +:103DD0001429F1D310BD00003075002070B51446D1 +:103DE00005460A46A0780021800701D504F10901A3 +:103DF0005079C0F38013C209E01CFEF703FE08B13E +:103E0000012070BD2DB1E86D183809F0D9F80020F7 +:103E1000E865002070BD2DE9F0410646087A1F468E +:103E20000D46144610F02E0F3AD1F06DC0B3114676 +:103E3000284607F0AEFD98B3F26D0120921C9178F0 +:103E4000FF290FD1A178C9070CD069794FEAD111A8 +:103E50009170D4F80310C2F80310B4F80710A2F858 +:103E600007103870A178890710D5118841F0040136 +:103E700011806979C1F380111174D4F80910C2F866 +:103E80001110B4F80D10A2F815103870A0780007C2 +:103E90000DD5D07AFF2806D0617CB0EB111F02D07F +:103EA0000020BDE8F081607C4FEA1010D072A0784D +:103EB000400602D594F827001073706B0079C0F3A8 +:103EC0008100401C90722846FEF7D6FB50730120FB +:103ED000E7E70000F0B55C4D07468BB095F8EC00C5 +:103EE0000E46E0B3B5F8F000C00440D5307A10F0CB +:103EF0002E0F3CD16946304607F04BFD002837D0E5 +:103F00009DF802000DF10904C10710D000218007BF +:103F100000D52146D5F8980048B97079C0F38013D0 +:103F2000C2090DF10300FEF76DFD002820D09DF8B9 +:103F30000200C00604D432466946384600F018F93B +:103F40009DF80200800707D57079C0F380112046E4 +:103F5000FEF7DEF800280BD0BDF8100000E006E008 +:103F6000FEF776FB050002D0E86D18B107E00020EF +:103F70000BB0F0BDFEF71CFDE8650028F8D0EC6D35 +:103F80009DF8010024F8020F97F8490000EB40006B +:103F900007EB400090F83600401C60723046FEF798 +:103FA0006BFB60739DF80200C0070BD070794FEA7D +:103FB000D010A070DDF80300C4F80300BDF80700BE +:103FC000A4F807009DF8020080070FD5208840F074 +:103FD000040020807079C0F380102074DDF809009F +:103FE000C4F81100BDF80D00A4F815004FF6FF70DD +:103FF00068809DF80200000714D5D7F8880038B90A +:10400000BDF81000C0F30B00FEF748FD0028AFD04C +:104010009DF811004FEA1010E072BDF81000C0F3D7 +:104020000B0068809DF80200400602D59DF827002D +:104030002073BDF81300C00401D0012098E7284682 +:1040400000F0E7F893E70000307500202DE9F04715 +:10405000C56D1646AD1CDDF82080AA781C46894641 +:104060000746FF2A2AD0A078800627D5D6F88810E0 +:1040700021B3087810F0010F12D02846FEF7DCFCBF +:10408000E0B14A4621463846FEF74AFBB0B1208AE5 +:10409000C0F30B00FFF788FEB4F81700E88134E0A6 +:1040A000887882420AD1C91CE81C0DF0C8F828B1F2 +:1040B000D6F88810E87A49788842E2D0B8F1000F43 +:1040C00006D0224649463846FFF788FE00281AD017 +:1040D0004A4621463846FFF7BBFDFA6DA07802F14B +:1040E0000202C1060AD4800603D5B4F81700D081B5 +:1040F00008E03146384600F00DF809E0B4F8130046 +:10410000C00402D00120BDE8F087384600F081F8F5 +:104110000020F8E770B50446C06D154600281ED093 +:104120000C2007F0ADFD0026D0B1032008F096FF6B +:10413000022815D1A878FF2802D1FEF7A1FC78B19A +:10414000288820F060002880084890F8530010B1BB +:104150006088FFF729FEE06D09F07EF9E66570BD25 +:10416000E06D183808F02CFFF8E7000030750020EB +:104170002DE9F04116460C460746F0F753F9FEF7D5 +:1041800043FA050043D0FEF713FCE86500283ED053 +:10419000821C6078108097F8490000EB400007EB24 +:1041A000400090F83600401C50723046FEF764FA2A +:1041B0005073A078C0070BD070794FEAD010907080 +:1041C000D4F80300C2F80300B4F80700A2F807000F +:1041D000A07880070FD5108840F004001080707917 +:1041E000C0F380101074D4F80900C2F81100B4F8BC +:1041F0000D00A2F81500A078400602D594F827001B +:10420000107339462846BDE8F041FFF783BFBDE88B +:10421000F08170B50446C06D00281BD0032008F063 +:104220001DFF022816D10C2007F02AFD002590B1B1 +:10423000E06D801C8178FF2904D1C17AFF2901D16A +:10424000C17D41B1018841F040010180E06D09F07C +:1042500003F9E56570BDE06D183808F0B1FEF8E7C8 +:1042600070B51D460C46FDF78FFA48B121780B4812 +:1042700041B1012908D0022904D0032906D103E065 +:104280000C2304E0002100E001210170002303223F +:104290002946034806F0A7FF002070BD30750020B6 +:1042A0002D00030010B51C46094AD1E90030C2E9CF +:1042B0000030A2F1DC01C0F3407081F8EC00002373 +:1042C00003222146034806F08EFF002010BD0000A7 +:1042D0000C7600202C00030010B506480A68026026 +:1042E00049684160002240F663410320F6F7BCF8BC +:1042F000002010BD1476002010B50446014610229F +:104300000848F0F7A1F8102204F110010648F0F770 +:104310009BF80449012010394860BDE81040102086 +:10432000F2F726BA100008400002084070B50446B3 +:10433000254821210646F0F7AEF8244D286840F0C4 +:10434000400028602078012821D06288D4F8161017 +:104350003046F0F779F81D48D4F80E1010221030CE +:10436000F0F772F81948D4F812100D223830F0F72F +:104370006BF80B202860A2886AB11448D4F81A1090 +:104380002830F0F761F8A08828B1012204E06088A5 +:1043900061784218DAE70022607808280FD0002000 +:1043A000A37842EA4000D9B240EA810040EAC32043 +:1043B00028622078012804D00220686070BD0120A6 +:1043C000EEE70420F9E70000000208400000084082 +:1043D000094A012182F8F810416918301E2909D0D4 +:1043E000202905D04FF4A47204A10020F1F7FCBAF3 +:1043F000FFF782BFFFF79ABF30750020626C655FE0 +:104400006C6C636F6D2E630070B50D460646F0F759 +:1044100019FB094C606840F4801060602946304602 +:1044200042F6C5429047606820F480106060BDE8A5 +:104430007040F0F711BB0000000007402DE9F84381 +:10444000124C0746154620691E4600F10408002854 +:1044500011D00F48A1680164E1684164A08D17285C +:104460000BD901F0F7F92A4633464046009701F090 +:1044700099FB0021A185BDE8F883EA202A1843F1C1 +:1044800000034046009701F08DFBF4E740750020E3 +:10449000000009400178002905D1012101700321A4 +:1044A000014801F0F1BD70474E00030010B5FF2236 +:1044B00028210748EFF7E8FF8C210648EFF7EBFFCC +:1044C0000448BDE810404FF482718C30EFF7E3BF31 +:1044D0008A75002094760020044881680907FCD57D +:1044E000016841F0200101607047000000000840B1 +:1044F00070B5034648790025C00998708869C3F8EB +:104500000300888BA3F80700012058729D72FF20DA +:10451000D8727F200C4618732046FEF7ADF858730A +:10452000DD81A088C0F30710801FC2B2DA75E52ACA +:1045300007D804F11E01BDE8704003F11800EFF741 +:1045400083BFDD7570BD000070B510460D46C2F327 +:104550000B2408F083FD022823D1134E012156F8C5 +:104560002400FCF7B1F8E0B956F82400807901285E +:1045700005D00C2201212046FCF750FA11E0E98811 +:104580002046FDF743F900280CD056F8240054309B +:1045900002218170E9880180D5F80110C160697934 +:1045A0000174002070BD0000287A00202DE9F04140 +:1045B000DFF88C80C2F30B2610460D4658F82640D3 +:1045C0004F8908F04BFD022837D158F8260000210A +:1045D000FCF77AF888BB58F826008079012804D0C7 +:1045E0000C213046FCF732FA27E069893046FDF7A6 +:1045F0000DF9002822D05734012024F8037C04F858 +:10460000010CD5F801102160D5F805106160697AB8 +:10461000217284F81801A888A18E573C88420CD1D9 +:10462000E888B4F88D10884207D12889B4F88F1033 +:10463000884202D1002084F86F010020BDE8F0819B +:10464000287A00202DE9F04117468846C2F30B2452 +:10465000104608F003FD324D002855F8246057D06D +:10466000012855D0B078FF2809D02A2214212046ED +:10467000FCF7D4F92A212046FDF774F848E005201C +:1046800007F0E8FBE8B355F82420D8F80130C2F869 +:104690007C31D8F80500C2F88001002255F82400CA +:1046A0001146FCF77FFF98B10C233A4605211D48BF +:1046B00008F072FD07210170448055F8242002F5AE +:1046C000C071D2F8842142608968816008F0C4FE1C +:1046D0001420B070092001F021F80246918821F4DD +:1046E000FF5101F590719180152100F80C1F55F8CC +:1046F000241001F58073D1F87411C0F80110996F7E +:1047000000E008E0C0F8051021461046FBF744FE23 +:104710000020BDE8F08114212046FCF7D5FEF7E724 +:10472000287A00202E00010070B510460D46C2F315 +:104730000B2408F093FC28B1012803D02946204619 +:10474000F9F7DEFE002070BD70B515460E46C2F3C7 +:104750000B24104608F082FC01002FD001292DD037 +:10476000174803290BD050F8241091F83A219308E8 +:104770000BD03D2200212046FAF76EF808E050F8F1 +:104780002400C089B0B1022070BD8B79012B04D008 +:104790001A212046FCF75AF910E042F0180281F87D +:1047A0003A2150F82400C08920B10321284608F09E +:1047B000D3FEE8E731462046FAF778F8002070BDCE +:1047C000287A002070B50E461446C2F30B25114618 +:1047D0000C4808F0C9FA204608F040FC78B10128DE +:1047E0000DD0094850F82500817941B9C1780329D5 +:1047F00005D1FF21C17031462846FAF7CDF80020D7 +:1048000070BD00003A000100287A002070B5104603 +:104810000D46C2F30B2408F021FC114850F8240087 +:104820008178FF290AD02A2208212046FCF7F6F8D1 +:104830002A212046FCF796FF022070BD81790129CC +:1048400006D00C2208212046FCF7E8F8002070BDB5 +:104850000821817029462046FAF730F9F6E7000072 +:10486000287A00202DE9F0411148C2F30B270D46AC +:1048700050F82760144611460E4808F075FA204695 +:1048800008F0ECFB80B101280ED0FF20F070D5F8C5 +:104890000100C6F83201D5F80500C6F836016A1CD9 +:1048A00039460020FBF796FF0020BDE8F0810000AC +:1048B000287A00203A0001002DE9F0411648C2F3A1 +:1048C0000724154650F824600F46104608F0C6FB32 +:1048D00020B1012802D002281CD102E00020BDE84E +:1048E000F081022000F01AFF020013D01E21117384 +:1048F0000A490023097851739088214620F4FF501B +:10490000403090802846FCF729FA79783046F9F74C +:1049100043FAE3E70220E2E7287A0020F4010020CE +:1049200070B50D460E49C2F30720144651F82060B9 +:10493000104608F093FB28B1012803D0022803D0C9 +:10494000022070BD002070BD2146064808F00CFA18 +:1049500069783046F9F720FA034881780170F1E769 +:10496000287A00203A000100F40100202DE9F041EE +:104970002448C2F30725174650F825400E46104636 +:1049800008F06CFBF8B1012837D0022838D1E07963 +:10499000800713D5A069007900F0030002280DD02C +:1049A000D4F8A00101220178707883099A4011425D +:1049B00004D000F01F00801E132805D320221A21E6 +:1049C0002846FCF72BF818E0032000F0A7FE0200B1 +:1049D00016D01B2111739079002340F001009071D3 +:1049E0007078D0729088294620F4FF502030908053 +:1049F0001A20A0703846FCF7B1F90020BDE8F0811C +:104A00000220FBE7287A002070B50C49C2F307208A +:104A1000144651F82050104608F020FB28B1012818 +:104A200003D0022803D0022070BD002070BDFF20FB +:104A3000E8702146024808F097F9F6E7287A002046 +:104A40003A00010070B50C461049C2F30726104623 +:104A500051F8265008F002FB022815D1A87978B940 +:104A6000102007F0F7F958B1607868B1A0780228F3 +:104A70000AD3252808D8B4F80100A5F8490003E0B6 +:104A800019213046FCF720FD002070BD287A002057 +:104A90002DE9F04F1046C2F3072A4FF0000B85B006 +:104AA000614A8DF810B01E460C465D4652F82A70D9 +:104AB000D94608F0D3FA00287CD001287AD0022801 +:104AC00025D197F8A401002822D0607E04F11B01B3 +:104AD000C0F3001007F036FAA0F57F40FF3869D127 +:104AE000172007F0CDF838B11423324605214F487E +:104AF00008F052FB05000AD0B4F81500B7F8921080 +:104B0000401AB0F5804F06DDA0F5803008E00220A5 +:104B100005B0BDE8F08F10F5804F01DA00F5803068 +:104B2000B96F4143D7E91A20561840EBE1780029C4 +:104B300009DAB4F8050040F2E2425043494291FBE1 +:104B4000F0F01FFA80F901F04BFA831B71EB0801BA +:104B500017D2311AB4F8050040F2E24200FB02F22B +:104B600091FBF2F100290CDD40F2E2424A4350434E +:104B7000361A68EBE078B4F81300A0EB0100A4F853 +:104B80001300A07E04ABB0FA80F0C0F11F00A07645 +:104B900007F5D271CDE90039CDE9021B3246434613 +:104BA000204607F003FF064697F8A40102280ED01E +:104BB000002100E030E0304607F030FD65B31820FA +:104BC0002870A6F57F40FF3803D1012002E00121C3 +:104BD000EFE700206870A5F802A034F8011FA98053 +:104BE000EE80217E01F00F012972217EC1F30011B8 +:104BF0006972D4F81A10C5F80A10E18BE981617E58 +:104C0000491C2974A188A5F81110217E4909E9746D +:104C100018B1284608F020FC03E0054850F82600AB +:104C20008566002074E70000287A00203400010027 +:104C3000EC7A00202DE9F8430E462F49C2F30728ED +:104C4000914651F82850484608F008FAA8B30128C0 +:104C500033D0022834D116212846FBF735FD60BB3E +:104C6000052000F05BFD04002AD0A879002804F19B +:104C70000C0027D0A18821F4FF516031A1801721B9 +:104C80000170B17895F8D12011404170727895F893 +:104C9000D2100A40827041782846FCF783FC162027 +:104CA000A8700023224641464846FCF757F84FF4C7 +:104CB0007A624946114808F099FC0020BDE8F88363 +:104CC0000220FBE707460E4823466A4690F8460155 +:104CD0008DF801008DF80000711C2846F8F790FD52 +:104CE000BA7879782846FCF75DFC002322464146D5 +:104CF0004846FCF733F8E0E7287A00203A00010044 +:104D0000307500202DE9F0412548C2F307261746EB +:104D100050F826408846104608F0A0F960B10128F6 +:104D20000AD0022802D00220BDE8F081A07928B183 +:104D300018213046FCF7C8FB0020F5E73946194832 +:104D400008F012F8E178FF201629E07004D02A213B +:104D50003046FCF707FDEFE7052000F0DFFC05001B +:104D600018D0034604F1CF0208F101012046F8F7FC +:104D700047FD00232A4631463846FBF7EFFF94F8FB +:104D800056000028D8D10023324605213846FCF7CA +:104D900037F8D1E707213046FCF7E4FCC3E7000011 +:104DA000287A00203A0001002DE9F0412548C2F39D +:104DB0000726174650F826400D46104608F04EF9D3 +:104DC00090B1012810D0022802D00220BDE8F08165 +:104DD00016212046FBF778FC30B9A079012805D0D0 +:104DE00018213046FCF770FB0020EFE7FF20E07051 +:104DF0003946154807F0B8FF687808B9A878A8B10F +:104E0000B5F803103046FCF701FD0028ECD015F88A +:104E1000012F20466978FCF7C5FB03205434A070AD +:104E2000688820802888A4F81100DDE760790028D0 +:104E3000DAD0002060710346324605213846FBF780 +:104E4000DFFFD1E7287A00203A0001002DE9F04188 +:104E50004B4EC2F30B2410460D4656F8247008F052 +:104E6000FDF8002833D0012831D0022802D00220DA +:104E7000BDE8F0810F213846FBF726FC00287DD1E4 +:104E8000012006F0E7FF18B3052006F0F9FE20B375 +:104E9000B5F80500B0F5FA7F14D2B5F80120062A5E +:104EA00010D3B5F803004FF4486398420AD8B5F818 +:104EB0000710994206D80A2904D3697A814201D29F +:104EC00090420DD220461E220F21FBF7A7FD55E090 +:104ED00020460F21FCF7F8FA50E020461A22F3E7AB +:104EE00056F824001822A8302946EFF7ADFA56F8F4 +:104EF0002400012290F8B11009B980F8B12056F8C9 +:104F0000241040F2E24CBB6F91F8B10000FB0CF0B2 +:104F1000B3FBF0F0B5F8013080B2834228D8B5F881 +:104F20000330834224D3B5F80500B7F88D3098429A +:104F30001ED1B5F80700B7F88F30984218D188799C +:104F400088B101F1A80510202870B1F8AB1056F80F +:104F500024002A46FCF7E2FA2046002318222946BC +:104F6000FBF71CFF0AE0E0B20022FBF74DFE05E074 +:104F700087F86F2120462946FBF79AFD002077E746 +:104F8000287A00202DE9F04115460E46C2F30B2485 +:104F9000104608F063F807462946274807F0E4FE64 +:104FA000264D55F824008179012942D03FB3012FC5 +:104FB0003FD0022F02D00220BDE8F081FF21C17056 +:104FC000B6F80500B0F5FA7F14D2B6F8010006284D +:104FD00010D3B6F803104FF4486399420AD8B6F8D4 +:104FE00007209A4206D80A2A04D3727A8A4201D24A +:104FF000814205D220461E221021FBF70FFD18E04A +:1050000055F824001822A8303146EFF71DFA55F85C +:105010002400012690F8B11009B980F8B16055F864 +:105020002410E0B20022FBF7EFFD55F8240080F8D1 +:105030006E610020C0E700003A000100287A0020DD +:1050400070B51546C2F30B24104608F007F8E8B116 +:1050500001281BD0022819D1042006F0FBFEB8B1AC +:10506000012000F05BFB020017D013211173908820 +:10507000002320F4FF502030908021462846FBF783 +:105080006DFE0749122051F824108870002070BD71 +:1050900012212046FCF718FAF8E7022070BD000044 +:1050A000287A002070B50D48C2F30B26144650F83C +:1050B000265011460A4807F057FE204607F0CEFF5B +:1050C000022809D1E878122804D02A213046FCF7BA +:1050D00049FB01E0FF20E870002070BD287A002025 +:1050E0003A00010070B51546C2F30B24104607F0D4 +:1050F000B5FF01001AD0012918D0164803290ED097 +:1051000050F82410CA78FF2A01D00A7982B18A792E +:10511000012A0FD01A212046FBF798FC06E050F830 +:105120002400C08920B92046FBF762F8002070BD3A +:10513000022070BD91F83A2142F0180281F83A211C +:1051400050F82400C0890028EDD00321284608F03B +:1051500003FAEDE7287A002070B51446C2F30B2558 +:105160001146094807F000FE204607F077FF48B1D6 +:10517000012807D00549FF2051F82510C87028469E +:10518000FBF77EF8002070BD3A000100287A00206D +:105190002DE9F8430C4680461F461546C2F30B2600 +:1051A0001146164807F0E0FD284607F057FFB8B152 +:1051B000012815D01248617850F82600C278914233 +:1051C00011D003290CD1817951B990F83A114907CE +:1051D00006D4002180F83A11A2783046F9F73CFB5A +:1051E0000020BDE8F883A0788DF801003B462A46F0 +:1051F0006946404600F006F8F3E700003A00010077 +:10520000287A00202DE9F0410C461646C2F30B2502 +:1052100011462C4807F0A8FD304607F01FFF70B17B +:1052200001280CD0284F57F82500C1780A291DD035 +:1052300008DC41B3032919D0052909D116E0002063 +:10524000BDE8F0810F291CD0162929D01A2932D0A7 +:1052500090F83A01C00604D5627800212846F9F793 +:10526000FBFA57F82510FF20C870E8E7817900297C +:10527000F7D190F83A114907F3D4002180F83A1198 +:10528000EAE7817931B100F1880260782946F8F7C0 +:10529000E3FFE6E7EAB201461046FBF7F9FCE0E778 +:1052A00000221146FCF77EF96378EAB20521304608 +:1052B000FBF7A6FDD5E7627831462846FBF738FDB7 +:1052C000CFE700003A000100287A002070B51046B0 +:1052D0000E46C2F30B2407F0C1FE40B3012835D0BF +:1052E0001B4D55F8240090F83A11090701D502200A +:1052F00070BD8178FF2909D02A2208212046FBF7BA +:105300008DFB2A212046FCF72DFAF0E7807910B1B9 +:1053100001281BD116E0032006F09CFD40B155F892 +:1053200024100820887031462046F9F7C7FB0DE0AD +:10533000721C21461A20FBF74DFA0E212046FCF77D +:10534000C3F803E00C212046FBF780FB002070BD72 +:10535000287A002070B51546C2F30B241146154873 +:1053600007F002FD284607F079FE00B301281ED0A1 +:10537000114951F824008369002050331A791860CC +:1053800060F306021A7151F82420936958331A7990 +:10539000186060F306021A7151F82430C3E96C00FA +:1053A00051F82410052088702046FBF759FF002093 +:1053B00070BD00003A000100287A00202DE9F0417C +:1053C0001646C2F30B24104607F048FE31461D482E +:1053D00007F0CAFC304607F041FE48B1012807D06B +:1053E000194DFF2755F824008179012903D006E0E3 +:1053F0000020BDE8F081C7702046FBF731FF55F86B +:105400002400877055F8241091F83A0120F0180014 +:1054100081F83A0155F82410420708D520F004001D +:1054200081F83A0100212046F9F72CFA04E0002225 +:1054300001212046F9F710FA0221304608F08CF8D5 +:10544000D6E700003A000100287A00202DE9F0415B +:105450001646C2F30B251146374807F085FC304647 +:1054600007F0FCFD88B101280FD0344C002754F818 +:105470002520D0780A2812D00ADCC8B303280ED021 +:1054800005280CD0082851D139E00020BDE8F08172 +:105490000E2834D00F281AD01A2847D13BE092F8B2 +:1054A000320120F0010082F8320154F8250090F812 +:1054B0003A11490706D480F83A711A220021284689 +:1054C000F9F7CAF90221304608F046F82EE092F8C2 +:1054D000320120F0020082F8320154F82510887958 +:1054E00038B101F1880229461A20F8F7B5FE1DE00F +:1054F00003E0E8B2FBF7CCFB18E08832F3E7507921 +:10550000A0B102F5997229461A20FBF763F954F805 +:10551000250047710AE092F83401314620F004007A +:1055200082F8340100222846FBF702FC54F82510CB +:10553000FF20C870A9E700003A000100287A002087 +:105540002DE9F04117460E46C2F30B24104607F032 +:1055500085FD022802D0032838D109E01C4D55F8FA +:10556000240090F8DB1049B990F83A01000702D501 +:105570000220BDE8F0812046FCF762F955F82400CE +:1055800090F8DA1011BB717880F8D41055F8241017 +:105590007088A1F8D60055F82410B088A1F8D8007A +:1055A00055F82410012081F8DA0055F82400C0785D +:1055B0000C280BD13946074807F0D6FB55F82410C4 +:1055C000FF20C87021460020FBF724F90020D0E717 +:1055D000287A00203A00010070B50D460646EFF724 +:1055E00031FA0C48F1F718FB0446EFF735FA7CB1B5 +:1055F0006667E567208C20F4F8604030208494F8DA +:10560000210020F0F800603084F82100204670BDB1 +:10561000002070BD3878002002214FF4027008F09D +:105620006DB82DE9F041044616460D461F46184652 +:10563000B047002810D0002101602060606006E0C3 +:105640003846B047002807D02168016020606D1EF1 +:105650002D042D0CF4D10120BDE8F08110B5FB28FC +:1056600001D8001D80B20221183008F047F8002848 +:1056700006D000214160C27942F04002C27141610E +:1056800010BD000070B516460D46044600F056F9F0 +:105690000DB1012000E000204FF4C0720AA1F0F724 +:1056A000A3F933460D4A29462046FFF7BAFF18B141 +:1056B000D4E90012116070BD206810B1204600F0DE +:1056C0003DF9002070BD0000626C6535305F6C6C88 +:1056D000645F656370742E63000000005D56010016 +:1056E0002DE9F04106460F460846FFF7B7FF0500D3 +:1056F0000FD0761E36040446360C0CD03846FFF721 +:10570000ADFF08B12060F4E72560284600F036F9C7 +:105710000020BDE8F08105602846FAE710B5044690 +:10572000FB2801D8041DA4B2022104F10C0007F0EB +:10573000E5FF002802D044720021416010BD000046 +:1057400070B516460C46054600F046F90CB101202E +:1057500000E0002040F2711209A1F0F745F933464C +:105760000C4A21462846FFF75CFF08B1204670BD71 +:10577000286810B1284600F02FF9002070BD000005 +:10578000626C6535305F6C6C645F656370742E634A +:10579000000000001D570100417921F020014171F6 +:1057A000C17921F08001C1717047417921F0200158 +:1057B0004171C17921F08001C171704770B5044613 +:1057C000050005D02046FFF7E7FF2468AC42F9D179 +:1057D00070BD02000CD0417921F080014171016857 +:1057E000814205D0002903D0914201D00846F2E75A +:1057F000704730B5027890F82030C2F3810440F24F +:105800007122B1FBF2F24FF41C75022C10D0A942A8 +:1058100005D343F0010180F82010921C11E023F021 +:10582000010280F82020028C61F34E02028430BD18 +:1058300043F0010380F82030A94201D3D21C00E0DC +:105840000322018C62F34E01018430BD0048704791 +:105850003C0C0A4010B5144CD4F80C111348084401 +:1058600021B1826F90F8821001F070FA00F018FCFC +:105870000020C4F80C01206988B1002040F25922B0 +:105880000BA1F0F7B1F8D4F80C0150B15FF00000B3 +:10589000BDE8104040F25A2205A1F0F7A5B801205A +:1058A000ECE70120F4E7000000000940FCFFFF3FA7 +:1058B000626C6535305F6C6C645F656370742E6319 +:1058C0000000000070B5050001D0012000E00020BC +:1058D000B3220EA1F0F788F8EFF7B4F81048046887 +:1058E00009E0AC4201D0012000E00020B92207A16C +:1058F000F0F77AF82468002CF3D1002229460848F2 +:10590000F1F73CF9BDE87040EFF7A6B8626C653579 +:10591000305F6C6C645F656370742E630000000020 +:105920003878002010B504460068002803D0FFF73F +:10593000C9FF0020206010BD07F086BA10B50446EC +:105940000122D4E9000100F005F82046BDE810402E +:10595000F1F752B970B515460C4600280DD003E09A +:10596000066800F01BF83046A042F9D1002D04D0A3 +:105970002046BDE8704000F011B870BD03680146D4 +:1059800001221846FFF7E6BF10B50446006800285C +:1059900003D0FFF7F3FF0020206010BD10B5040016 +:1059A00001D0012000E000204FF4907205A1F0F733 +:1059B0001BF8606907F048FA2046BDE8104007F080 +:1059C00043BA0000626C6535305F6C6C645F656380 +:1059D00070742E630000000010B504460122D4E963 +:1059E000000100F005F82046BDE81040F1F704B9C9 +:1059F00070B515460C4600280DD003E0066800F08F +:105A00000BF83046A042F9D1002D04D02046BDE865 +:105A1000704000F001B870BD10B5040001D0012045 +:105A200000E000204FF48D720349EFF7DDFF2046C0 +:105A3000BDE8104007F008BAB43E02002DE9F0417D +:105A4000204E0BF005FC800600D4FEE71E48002126 +:105A50001E4C016041608160C16040F2BC71204613 +:105A6000EEF719FD1A4D2C605FF00004286804EB76 +:105A7000441700EB870100221348F1F77FF82868EC +:105A8000641C00EB8700A4B241790F2C21F01001B7 +:105A900041F020014171C17B41F08001C173E5D328 +:105AA0004CF6691206F63C41022007F089FB0949D1 +:105AB000052007F001FDBDE8F0410749002007F08F +:105AC000FBBC000000000A403878002000040A40B7 +:105AD0001C040020015F01007D5F01000448016992 +:105AE000D0F80C0150EAC17000D0012070470000CE +:105AF0000000094010B50020FFF710FE040001D09F +:105B0000012000E000204FF4CF720EA1EFF76CFFF0 +:105B1000A08820F4FF50A0802079617920F0030054 +:105B200021F08001401C41F02001617120F0100043 +:105B30002071A07920F00100A07100202060204693 +:105B400010BD0000626C6535305F6C6C645F65632E +:105B500070742E630000000010B50446C07940F058 +:105B60004000E0716069002803D007F06DF9002063 +:105B7000606110BD10B50446406920B9FFF74CFDC7 +:105B80006061002803D0E07920F04000E07110BD92 +:105B900010B5EEF757FFFFF75DFEBDE81040EEF7DA +:105BA0005BBF00002DE9FF41324F944605460A9A3B +:105BB00038691946D7F80C312C1F00F0010E2E4E13 +:105BC0005EEA030E13D0C00702D03089401C30813A +:105BD000E878C0F38401204601F0B8F83089012844 +:105BE00001D9FFF737FE002004B0BDE8F0810020A6 +:105BF0003081E878C0F38400A4F882001F48A267CF +:105C0000426842F40012426003A8009002AB01AA6D +:105C100060460BF0D9FF07F580770298786001980D +:105C2000B860FD60BDF80C00E8840120386094F88D +:105C3000821088401249084201D0124801E0114800 +:105C4000401E11490860B4F882007081688DB081EF +:105C5000002007F053FC0D480078C00707D034F847 +:105C6000740FC0F30722A17B00200BF067FD2846CC +:105C7000BAE7000000000940387800200000074023 +:105C80005000000391F225001C0409401C00002074 +:105C9000F0B5C36D40F27127A3FB075CB0F862203A +:105CA000002602FB07C203FB0622B0F86030007832 +:105CB000C3F51C73DC17EB186241C0F381000228A6 +:105CC00002D06FF0370002E0012904D00348181811 +:105CD00042F1FF31F0BD0148B030F8E77CFDFFFF35 +:105CE0004CF69942904200D31046074A1378074A6F +:105CF00032F8133032F81110194448435221484306 +:105D0000000C103080B27047F4010020943E020075 +:105D100010B5094CD4F80C0100280BD04FF002103C +:105D200001F038F80020C4F80C010448416821F45F +:105D30000011416010BD0000000009400000074054 +:105D4000054A08B5116C526CADF800200160BDF831 +:105D50000010818008BD00000000094070B50A4AAB +:105D600051684FF41C701268A0EB112040F27125AD +:105D7000A2FB0536C9B201FB0561002402FB041138 +:105D80001818614170BD00004403094010B500229D +:105D90000649022007F024F84FF405710448EEF795 +:105DA0007AFBBDE8104000F005B80000A43E0200F8 +:105DB000F801002010B5484C0120216860F3000173 +:105DC0002160F1F78DF82168002060F39A6121606D +:105DD000216860F3DB61216020684049084040F49D +:105DE00060202060206D40F4A6702065206D40F09A +:105DF000C04020652168012060F304112160216802 +:105E000060F341012160206835490843206035482E +:105E1000A0673548E06735494FF011300860091D2B +:105E20000860091D0860091D0860091D0860002040 +:105E30002064606C6FF30F0060642168002060F3E1 +:105E400049212160A16A072060F30201A1620020BC +:105E5000C4F80C0120482649083018220A6001685D +:105E600021F0C001403101602248D4F8001290F8BE +:105E7000FC026FF3080141F480710843C4F800028A +:105E80001D48816821F4002181601C4C216821F0AB +:105E90001C0141F008012160216821F4E0712160BA +:105EA000216821F47F0141F4B8112160216821F0BB +:105EB0007F412160816841F40021816007F016FE76 +:105EC0000120211D0860206840F002002060206849 +:105ED0008006FCD510BD000000000940FFFF00FC5B +:105EE000040000804F002F01565218208005094001 +:105EF00060010440307500200000074000040940A4 +:105F000070B5114D0520B5F9164206F01DFF14E0DD +:105F100004EB440005EBC0061023D6E90101022280 +:105F200007F03AF90C364ECE80E84E0007F094FAAE +:105F3000641C24B2162C00D30024B5F91402A0422C +:105F4000E6D1A5F8164270BDF40100200A4800BF52 +:105F5000D0F81413C907FBD1D0F8381311F0010F92 +:105F6000FAD142680A2161F303024260416811F0EC +:105F70000F0FFBD1704700000000094010B5002052 +:105F800006F0E2FE0C490D484A89082A0FD0092A7A +:105F90000DD00A2A0BD08A894FF4C8610A328A428E +:105FA00000D80A46BDE81040032107F03BBBBDE81E +:105FB0001040032106F0D8BE387800204F000300BF +:105FC00042F21C110160014870470000D8DB0A4012 +:105FD00000487047A8D50A4000487047BC0B0A40EB +:105FE00070B5EEF72FFD10480121C0F8381300BF3F +:105FF000D0F8381311F0010FFAD100F54B70466854 +:1060000005688068C0F51C74EEF726FD40F2712229 +:10601000A5FB0203002106FB023205FB012100194A +:1060200041F1000170BD00000000094070B5EEF7BD +:1060300009FD0F4CB4F9141201EB410004EBC0064A +:10604000491C361D0DB2162D00D30025B4F91602D9 +:10605000A84201D0012000E0002040F2B31205A1C7 +:10606000EFF7C2FCA4F81452EEF7F6FC304670BD10 +:10607000F4010020626C6535305F6C6C645F6563B1 +:1060800070742E630000000070B50D460446FFF7E3 +:10609000CDFFC0E90045BDE87040052007F02EBAED +:1060A0002DE9F047204CD4F840A0D4F844900025C6 +:1060B000D4F81403C007FBD1D4F8380310F0010F53 +:1060C000FAD1EEF7BFFC276DB80404D5FFF746FE02 +:1060D0000646884601256168012060F3041161606D +:1060E0006068C0F300100028FAD1FFF763FE206D4E +:1060F00038432065C4F840A0C4F84490FCF73CF84D +:10610000EEF7AAFC3DB1EEF79DFC3046414600F0AB +:10611000DFFBEEF7A1FC780504D5BDE8F0470320CE +:1061200007F0ECB9BDE8F0870000094070B50E46F5 +:10613000040000D00120DA2209A1EFF755FC00F09D +:106140002BF905460020E86232462946204600F039 +:1061500057FC0028284602D100F0F4FB002070BD57 +:10616000626C6535305F6C6C645F7363686C2E6362 +:10617000000000002DE9F0470468DDF820A0164675 +:1061800012EB0A081D46074643F1000908B1012039 +:1061900000E000204FF48E7231A1EFF725FCD7E923 +:1061A0000401301A75EB010030D30CE0D7E904018B +:1061B000301A75EB010004D3D4E90410891BA841FF +:1061C00004D227462468002CF0D13EE0B4B3D4E9D1 +:1061D0000201B0EB080271EB090236D2227FD3072D +:1061E00017D0920712D54FF4FA72821841F10000CD +:1061F000B11A75EB000009D36FF0F900311845F1C1 +:10620000FF30C4E90410274624681EE00020BDE8E2 +:10621000F087B8EB00004FF0FA01421821463846EB +:1062200000F080F80028F2D03C68D4E90230B3EBEB +:10623000080270EB090002D3012001E005E0002014 +:1062400040F2451206A1EFF7CFFB00F0A5F800F1F0 +:106250000C018660A1E8200738600460D7E70000E1 +:10626000626C6535305F6C6C645F7363686C2E6361 +:10627000000000002DE9F05F1546DDE90A8B076894 +:10628000D8F800101C4611EB050A064643F1000938 +:1062900008B1012000E00020F1221DA1EFF7A4FBCE +:1062A000D6E90401281A74EB010021D318E000BFDD +:1062B000D6E90401281A74EB01000FD3D7E90201D3 +:1062C000421BA1410AD3401B584507D3D8F8001000 +:1062D000814200D20846C8F8000003E03E463F680D +:1062E000002FE5D1D6E90401281A74EB010002D28F +:1062F0000020BDE8F09F00F04FF8C0E90254C0E96B +:1063000004A9D8F80010816130600760F1E700004F +:10631000626C6535305F6C6C645F7363686C2E63B0 +:10632000000000002DE9FC41086816460C46A8B1A3 +:1063300081682269891AB14210D2027FD20706D041 +:10634000A26902B02146BDE8F04100F059BB721AC3 +:1063500001462046FFF7E6FF002812D0D4E90205E7 +:1063600000278619D4F82CC07D41BCF1000F0AD05B +:10637000CDE90065D4E9082300216068E04710B149 +:106380000020BDE8FC81C4E90265A06980196F4165 +:10639000C4E904070120F4E770B5074C206C18B974 +:1063A000606C206400206064256C0DB900F03CFD39 +:1063B00028682064284670BD487800202DE9FE4FEB +:1063C00004460CA89846E0C891468A46EEF73AFB88 +:1063D00000F0C0FA2146FFF7A9FECDE90057434679 +:1063E0004A465146029600F0D9FB0446EEF734FBCC +:1063F00014B16068BDE8FE8F0020FBE72DE9FE4F79 +:1064000090461C4681460025EEF71CFB00F0A2FAE0 +:1064100006460768D0E90420B2EB0801A04134D257 +:1064200018EB090B44F1000A01E03E463F68FFB15A +:10643000D7E90220B2EB0801A041F6D3D6E9041255 +:10644000B8EB010074EB02001FD3D7E90231B3EBC4 +:106450000B0271EB0A0120D3FFF79EFFC0E9034B4B +:106460000546C0F80880C5E905A93060076014E05A +:10647000FFF792FFC0E9034B0546C0F80880C5E965 +:1064800005A900213060016007E0DDE90C233046FA +:10649000CDF8009000F056F80546DDE91101012223 +:1064A0008DE807000EAC28460ECC00F077FB0446C2 +:1064B000EEF7D2FA14B16068BDE8FE8F0020FBE76A +:1064C0002DE9F0471546DDF820A00746066812EBD7 +:1064D0000A0243F10000FA2112EB010840F1000921 +:1064E000D7E904101C46491BA04104D35146384645 +:1064F00024E03746366886B1D6E90410491BA0412E +:10650000F7D3D7E90410491BA04115D2D6E90223DD +:10651000B8EB020179EB03000ED2FFF73DFFFA2141 +:106520006A1800F10C0344F100018260A3E802073D +:1065300038600660BDE8F08751463046BDE8F04758 +:10654000FFF7F4BD2DE9F0470446089E0568D4E93D +:106550000401101A4FF0000873EB01003BD315E063 +:10656000D4E904C71CEB060C47EB0807B1EB0C01A0 +:10657000E146B84108D3FFF70FFFD4E9041200F158 +:106580000803A3E8060220E02C462D682DB1D5E9CA +:1065900002108F1A70EB0307E2D3D4E90407111A33 +:1065A000BB4118D3801947EB080780462DB1D5E9C8 +:1065B0000212401A77EB02000DD2FFF7EDFED4E98C +:1065C000041200F10803A3E80601C0E90576206083 +:1065D0000560BDE8F0870020FBE72DE9FF4F83B0A1 +:1065E000054610A80E46B0E8000FEEF72BFAFFF7AD +:1065F000F7FC04460F4600F0ADF9621947F10003BD +:106600000096FFF75DFFCDE9009BCDF808A0DDE91E +:106610000512434600F0C2FA0446EEF71DFA1CB11B +:10662000606807B0BDE8F08F0020FAE72DE9F04779 +:1066300086B004460EA89A46B0E8800316460D467A +:10664000EEF700FA00F086F922462B460096FFF797 +:1066500091FD012104AACDF80090CDE90121434626 +:106660003A46514600F09AFA0446EEF7F5F91CB1A5 +:10667000606806B0BDE8F0870020FAE72DE9F04F2A +:1066800087B0044610A81F46B0E8000F16460D4616 +:10669000EEF7D8F900F05EF922462B46CDE9006707 +:1066A000FFF7E8FD032204ABCDF800B0CDE90132DD +:1066B00053464A46414600F071FA0446EEF7CCF9DB +:1066C0001CB1606807B0BDE8F08F0020FAE72DE943 +:1066D000FE4F9A46DDE90F87DDE90DB916460446FF +:1066E0000D46EEF7AFF900F035F922462B4600963D +:1066F00097B1FFF727FF0123CDF80090CDE9018383 +:106700005B4651460C9A00F049FA0446EEF7A4F9AC +:106710002CB16068BDE8FE8FFFF7D2FEEBE70020EA +:10672000F8E72DE9FF5F88B08246DDE91E54DDE918 +:106730001C76002083468146DDF86C80EEF782F9F6 +:1067400004F108002099059079B30120CDF800806C +:10675000CDE90340CDE90176DDE9091250461A9BE7 +:10676000FFF7B5FF2860002864D0D4E90013189A19 +:1067700050468A18924500D31046DDF814C0CDE982 +:106780000476CDF818C01A9E4FF0000ACDE9000A31 +:10679000CDF80C800296DDE916208A1843410A984C +:1067A000FFF72CFE6860F0B33AE0FFE70020CDF879 +:1067B0000080CDE90340CDE90176DDE909125046BC +:1067C0001A9BFFF784FF286090B90020CDF8008065 +:1067D000CDE90340CDE90176DDE9183209991AEBDC +:1067E000030051411A9B0A9AFFF771FF286008B312 +:1067F0000598CDE90560CDE903871A980290D4E9A0 +:106800000003DDE9182182185941CDE90021DDE9B5 +:10681000162182184B410A98FFF7F0FD686080B19D +:10682000D4E9023000E013E0D4E90012B3EB010B2D +:1068300060EB0209EEF710F90CB058464946BDE886 +:10684000F09F0021286800F00BF800202860F1E795 +:106850000021286800F004F8C5F800A0EAE700006D +:1068600070B50E46050008D0EEF7ECF8174A106830 +:106870004068A84203D1012302E0012070BD00233B +:10688000124CE06B4168A94208D116B10021E163C6 +:1068900009E0EEF7E1F8002070BD02469AB11068F9 +:1068A0004168A942F9D10168116000F04BF8B4F8D1 +:1068B0004800401EA4F848002BB1FFF791FBC4E943 +:1068C000040100F0EDF8EEF7C7F8D6E748780020AD +:1068D0002DE9FF4105460C46FFF782FB07460E46B1 +:1068E000002008F099FA2820391846F10000691AAA +:1068F00074EB000004D22846214600F0C3F918E0EA +:1069000003A8009002AB01AA284621460BF05CF9CF +:106910000A480299C0F84413BDF80C10019AC1F559 +:106920001C7142EA0121C0F84813C16D41F40051C5 +:10693000C165012008F070FABDE8FF810000094040 +:106940000020704702494A6C0260486470470000AA +:106950004878002010B5094CE06B00280BD1FFF7F8 +:106960003FFB2268C4E9040122B1D2E90234C01A13 +:10697000A14101D2014810BD104610BD4878002049 +:1069800010B500F009F8010002D0D1E9020110BDF4 +:106990000020014610BD000070B5050004D0EEF7E0 +:1069A00051F80748046805E0002070BD6068A842FF +:1069B00002D02468002CF9D1EEF74EF8204670BDC5 +:1069C0004878002010B5FFF703FB044650210B4820 +:1069D000EDF761FD4FF4C6612046EDF75CFD074819 +:1069E0000021046401EB410004EB0010491C00F19C +:1069F000300289B202601F29F4D910BD4878002006 +:106A00002DE9FC41076814460D46060001D001201F +:106A100000E000207F221DA1EEF7E6FF4FF0000806 +:106A200004F5FA7001E03E463F685FB1D7E902C164 +:106A3000D6E90423BCEB020261EB0301121A71EBED +:106A40000801F0D3D5F82CC0BCF1000F0CD0D6E96A +:106A50000401CDE90001D5E9082300216868E04779 +:106A600010B10020BDE8FC81D6E90410FA22891893 +:106A700040F10000C5E90210091940EB0800AC61C3 +:106A8000C5E90410356001202F60EBE7626C6535C5 +:106A9000305F6C6C645F7363686C2E630000000091 +:106AA0002DE9FC41204D06460F4695F84A00002886 +:106AB00038D108F0B1F9E86B38BB23E0D4E9021013 +:106AC000891BB84122D220682860B5F84800401ED2 +:106AD000A5F84800D4F82CC0BCF1000F07D0CDE9D0 +:106AE0000067D4E9082301216068E04707E0D4E9A2 +:106AF0000801CDE90001201DA16A0DC88847204684 +:106B0000FFF720FF2C68002CD8D106E02CB1D4E987 +:106B10000201BDE8FC41FFF7DBBEBDE8FC410120FE +:106B200008F07AB9BDE8FC814878002070B50546C8 +:106B30000024EDF787FF0748016805E0886AA8424E +:106B400001D1012402E009680029F7D1EDF784FFA3 +:106B5000204670BD4878002010B5EDF773FFFEF7B2 +:106B6000BDFF10B90C48C16B19B1EDF775FF0020DE +:106B700010BD04684CB1FFF733FAA1680C1A322C2F +:106B800001D9323C03E0002401E04FF0FF34EDF77F +:106B900063FF204610BD0000487800202DE9F04733 +:106BA0001E46DDE909A8DDF8209017460D460400D1 +:106BB00002D025B1012003E00020BDE8F0870020CD +:106BC0004FF4FF7211A1EEF70FFF84F81C80C4E9A7 +:106BD0000A571348C4E90869816B491C816301D1D4 +:106BE000012181636160D4E90212CAE90012B0F8A0 +:106BF0004810491CA0F848100068A04203D1FFF7D4 +:106C0000EFF9FFF74DFF2046D7E70000626C6535CE +:106C1000305F6C6C645F7363686C2E63000000000F +:106C20004878002070B50646EDF70CFF104CE56B78 +:106C3000CDB16868B04216D10020E0632068A84258 +:106C400011D1FFF7CDF9C4E9040128682060284676 +:106C5000FFF778FEB4F84800401EA4F84800D4E9D5 +:106C60000401FFF71DFFBDE87040EDF7F5BE000021 +:106C70004878002010B5FFF771F8BDE8104000F02B +:106C800001B800002DE9FC411A4D064600202C6891 +:106C9000E863C5E90C610F4634B3D4E902017040E2 +:106CA0007940084310D1D4E90801CDE90001A16A77 +:106CB00032463B466068884760B1EC63D4E9040122 +:106CC000BDE8FC41FFF704BED4E9040170407940FF +:106CD000084309D1206828602046FFF733FEB5F845 +:106CE0004800401EA5F8480030463946BDE8FC4142 +:106CF000FFF7D6BE4878002010B5EDF7A3FE0D4C87 +:106D0000002084F84A00E06B88B100204FF44B72F9 +:106D100009A1EEF769FE206828B1FFF761F9C4E91F +:106D20000401FFF7BDFEBDE81040EDF795BE012060 +:106D3000ECE7000048780020626C6535305F6C6CD1 +:106D4000645F7363686C2E63000000001FB58DF8EC +:106D50000810FE218DF809100021CDE90002ADF8E0 +:106D60000A10ADF80C10426F69464FF0021000F0A7 +:106D700001F81FBD70B516460D460446FFF756F9DB +:106D8000C0E900461ECD08301EC0BDE87040052099 +:106D900006F0B4BB70B50546FFF748F9044600F1AC +:106DA00008061348006840F08041091F886FC6E953 +:106DB00000106431887F307211F83E0C7072C88800 +:106DC00070818888B081256008696060052006F0C0 +:106DD00095FB08480078C00708D0A088317ABDE844 +:106DE0007040C0F3072201200AF0A8BC70BD00006B +:106DF0000C0109401C00002010B5C478036864F33E +:106E00001F631360808861F31F40506010BD0A68E3 +:106E100002600A79017962F304010171704701226D +:106E200011460720F4F7C0BB012202210720F4F726 +:106E3000BBBB00002DE9F04788462C49044600689A +:106E400051F8285088B04FF0000920B1A04202D07C +:106E5000E96B884203D1002008B0BDE8F0875835BF +:106E60006864E86BFFF78CFD0646E0790F4600F09A +:106E700003022868817DA088C0F307100AF0C8FDCE +:106E800082462068C179808801F003022968C0F336 +:106E90000710897D0AF0BCFD0246204600F06CFC1C +:106EA000504483B2206800F067FC104482B2002096 +:106EB0000DF1180C0294CDE903C0F118CDE90008DA +:106EC00047414FF49670081847F10001084BFE3215 +:106ED000FFF7FDFB286430B10698811B204601F0C6 +:106EE00063F84846B8E74FF04309FAE7487A0020CC +:106EF00073B501002DE9F04F05467E484FF0000BB9 +:106F000097B050F82540DA46D4E9227657EA0600D1 +:106F10007ED1FFF765F84FF4487201278018A783E8 +:106F2000E28B41F100014FF4487810AE012A55D0B0 +:106F30000DF1300CE389CDE9073CCDE9096A6E4BD0 +:106F4000CDE9043A0695A36D40F2712CD3F80620E2 +:106F500022F07F4202FB0CF24FEAE27CCDE9022CE8 +:106F6000D3F8032040F2712322F07F425A43D31713 +:106F7000CDE90023626AFE32FFF7D3FBC4E92001AA +:106F800008430CD0DDE910018834C4E900010C98F5 +:106F9000A060883C00210D98FFF762FC9CE014344F +:106FA000002334F8060CCDE90276CDE90050524AB0 +:106FB00040462169FFF711FBE067DDE91001C4E9F4 +:106FC0001D01606C40F27121D0F8060020F07F4076 +:106FD0004843C117C4E91B01143C7DE0143400236D +:106FE00034F8060CCDE90276CDE90050424A40461D +:106FF0002169FFF7F2FAE067DDE91012C4E91D121A +:107000000021C4E91B11143C002865D1432000E095 +:1070100002E017B0BDE8F08FFEF7E2FF0246084637 +:10702000C82112EB010840F10009D4F8900008B122 +:107030005846ECE7A08B401CA4F81C00EDF7F2F9D1 +:10704000C0B20621B0FBF1F201FB12014FF47A70DD +:107050004143C817D4E92023C91970418F1840EB68 +:107060000306B7EB080176EB090001D247464E460E +:107070003A4633462146284600F04EFA0028C6D14B +:107080001C48D4F824B050F82500A04201D10120BA +:1070900000E0002040F6434218A1EEF7A5FCE0898D +:1070A00014AA0495CDE905021348CDE9020A41F27C +:1070B0008830381846F10001CDE900013A463346E0 +:1070C0005846FFF79BF9C4F89000DDE91412C4E9B3 +:1070D000221238B1A4F820A02946204600F014F866 +:1070E000C0B294E7208C401C80B220846428A5D9CB +:1070F00003208CE7487A0020CDB70100626C65352B +:10710000305F6C6C6D2E63002DE9F0470446406CD7 +:1071100088B08A4600684FF00008D0F80090D9F88F +:107120000050002D78D04D45FCD0E87900F00302E6 +:10713000A06D817DA888C0F307100AF069FC06469F +:10714000A06DB0F80110CA0715D0E97901F003026B +:10715000817D22200AF05CFC0746E87900F00302FA +:10716000A06D817D0C200AF053FC3844064406F5DE +:107170009676434F1BE0890718D5E97901F00302A1 +:10718000817D0C200AF044FC0746E87900F00302F8 +:10719000A06D817D28688088C0F307100AF038FC54 +:1071A0003844064406F59676364F00E0364FD4F85C +:1071B000940090B35FF0000040F6D12233A1EEF7C7 +:1071C00013FC002006ABCDF80890CDE90330CDE9E3 +:1071D000000A54F8242F4FF4167CD4E9193112EB2D +:1071E0000C0C40F1000213EB0C0051413B4606F140 +:1071F000FE02FFF76CFA2067243C00B1012040F644 +:10720000D82222A1EEF7F0FBD4F8940040B1A06D93 +:10721000807D012806D00EE02EE0FFE70120CBE7BD +:10722000432028E0DDE906016FF00902821841F1F0 +:10723000FF30CDE90620D4F888100698421A20467F +:10724000616C04F0B9FB1048874206D151462846CC +:10725000C4F89C50FFF7EEFD0DE00A4887420BD1C1 +:107260002868C4F89C00CDF800A02B68DDE9060171 +:10727000324600F011F8804608B04046BDE8F0877D +:1072800085B5010097B5010073B50100626C6535E5 +:10729000305F6C6C6D2E63002DE9F04F89B08B462A +:1072A0002749DDF848900746186851F829601C46C0 +:1072B00015464FF0000820B1A04202D0F16B884281 +:1072C00003D1002009B0BDE8F08F58367064E07932 +:1072D00000F003023068817DA088C0F307100AF037 +:1072E00097FB82462068C179808801F003023168EB +:1072F000C0F30710897D0AF08BFB0246002006AB25 +:107300000294CDE90330CDE900097B194BEB000174 +:1073100040F29D30181841F100010A4BFE32FFF790 +:10732000D6F9306448B10698C01B411B11EB0A0125 +:10733000204600F039FE4046C4E74FF04308FAE724 +:10734000487A002073B5010070B505461548B5F5BB +:10735000006F046807D000205E2213A1EEF744FB03 +:10736000A06810B107E00120F6E700212846FEF7EB +:1073700033F9A06098B1A168002081F82600A168C7 +:107380000D480861A1680D484861A06845670C4830 +:10739000A16890F8450181F82300002070BD072006 +:1073A00070BD000068040020626C6535305F6C6C55 +:1073B0006D5F692E63000000D6BE898E555555005D +:1073C0003075002070B50D460D4951F82040206BF6 +:1073D00028B900212846FEF7FFF8206368B1216B29 +:1073E000002081F82600216B06480861216B0648C1 +:1073F0004861206B4567002070BD072070BD00000C +:10740000487A0020D6BE898E5555550010B50446E1 +:10741000D4E900020AB10023136001291BD002291C +:1074200018D110B10068002814D12522022120466D +:10743000FEF786F92068818821F47F6160318180C0 +:107440000068818821F47F6160318180417921F079 +:107450009001417110BD252201212046FEF770F9EF +:107460002068818821F47F616031818010BD002215 +:1074700040F603410320F2F7F7BF000010B5806D1E +:10748000C07C0AF0A5FA0A496422B1F84011084408 +:1074900001B291FBF2F302FB131158B2322901DD64 +:1074A000401C03E011F1320F01DA401E40B210BD62 +:1074B0003075002010B5022902D1406D407970B9B5 +:1074C000032005F0CBFD022806D1074890F84500BF +:1074D000012804D0032802D000F0F6FF08B10020F4 +:1074E00010BD012010BD000030750020094810B506 +:1074F000006850B1416A41B1012180F83010406A02 +:107500000021FFF7ADF9002803D0BDE8104000F0DE +:1075100079BD10BD6804002070B5D1E920452C4329 +:1075200003D10B7F0022432116E0CD8B4DB18C8B14 +:10753000AC4206D9E3B20022432103F03DFE4320D2 +:1075400070BDD1E9285455EA040609D0AA1A9C4115 +:1075500006D20B7F00223C2103F02EFE3C2070BDA2 +:10756000002070BD00B5024601F10C0000F024FEC1 +:10757000C107064804D0916A0164D16A416400BD24 +:10758000426C002161F31042426400BD00000940DA +:10759000490012B1012A04D101E01E3101E001F5D8 +:1075A000967189B2FEF725B92DE9F04706466E4877 +:1075B0000D460022046811464FF4486701EB0110A4 +:1075C000284410F8093F032B38D2B0F80330B0F844 +:1075D00001C0634571D8B0F80530B0F807C0634505 +:1075E0006BD8062B69D3BC4567D8B0F80B90B9456A +:1075F00063D8B9F10A0F60D3B0F80980B8F5FA7F03 +:107600007ED208F1010808FB0CF8B8EB890F77DC93 +:10761000B0F80D80B0F80FC0E04571D8B8F1000F98 +:1076200002D0BCF1000F03D1401D038103884381C8 +:10763000521C491CC9B2D2B20329BFD3EAB30020FD +:1076400084F86D00012084F888003C22294604F16A +:107650003100ECF7F9FE3046FFF776FE002850D1F6 +:10766000FF22022104F10C00FEF70CF82222012176 +:1076700004F11400FEF764F8E068E8B36069D8B379 +:10768000A1690860A06894F83120C18862F389017B +:10769000C180E268C16862F31E01C16061698160F6 +:1076A00094F8332090F8361062F3000180F8361019 +:1076B000616B0163218F818600E021E094F8321034 +:1076C00022462A4804F048FA00281AD1ECF7AAFE0C +:1076D00020F07F47606900F10C06818821F47F610A +:1076E00001F508718180417921F010014171A9787B +:1076F0000029C17909D000E005E041F0040106E06D +:107700001220BDE8F0870720FBE721F00401184AAA +:10771000C17192F8632162F30101C171304604F036 +:10772000F7FA3771380A7071380CB0711048D0F818 +:107730003B11316190F83F0130750220F0710C204F +:10774000B7FBF0F100FB1171707D491D61F304007E +:1077500008497075097861F3471070752046BDE8D7 +:10776000F04702F073BB0000680400205E76002042 +:1077700030750020F40100208179C90703D0C07A58 +:10778000C006000E70470020704700002DE9F0434E +:1077900095B09946DDE91E47DDE920650DF11C0E27 +:1077A00000230DF1400C0DF13008AEE80811DFF8B0 +:1077B00084C00A93CDE904C340F2E24C07FB0CF706 +:1077C0004FEAE77CCDE9027C40F2E2477C43E717D1 +:1077D00006938018CDE9004759414A46FEF7A1FFBC +:1077E00004460F46084311D000210C98FFF738F8E3 +:1077F00000210D98FFF734F80FA800900BAB0EAAEC +:10780000204639460AF0E0F90E9818B1002015B06C +:10781000BDE8F0830B9840080B903080ECF702FE37 +:107820000B99B0FBF1F201FB1200401C28800120F3 +:10783000EDE700004169010070B5044605022846E5 +:1078400005F00CFC022804D100222146284600F055 +:10785000FFFC002070BD10B5044603F009FB10F0DA +:10786000FF0003D12046FFF745FBC0B210BD00006A +:107870002DE9F047A74992B051F82040276BE56BFE +:107880003F1DCDB1A44A616D00EB400002EB40000A +:10789000097AFE3004F1280204F05EF906000CD1EA +:1078A000216C82462046C1F800A004F033F9A88874 +:1078B00010F47F6F04D007E0072012B0BDE8F08716 +:1078C00020F47F606030A880606D8179287961F351 +:1078D00003002871286860B1818811F47F6F03D19B +:1078E00021F47F6160318180017921F00F01091D50 +:1078F0000171D4E90F010860787820F008007870F1 +:10790000616D20F004004A79798862F389017980F9 +:10791000F97821F07C01091DF9707870387820F031 +:107920000F003870606D007CF877E06B7860616BF9 +:10793000B86861F31E00B860387DFA2140F001009C +:107940003875787D20F03F002730787597F8200053 +:1079500020F0010087F82000388C61F34E00388455 +:10796000082087F82200606B00B1012040F6F44245 +:107970006AA1EEF739F8606BFDF720FF606DC07902 +:1079800010B140F2E24001E040F2DC50E0814500FD +:10799000E06B002211468088C0F307100AF038F827 +:1079A0000544208B68B1002205F596751146182014 +:1079B0000AF02EF80544208B801D002280B211466B +:1079C00003E000229635114622200AF021F80544F2 +:1079D000606D0DF130094FF00108C07980B14FF4AE +:1079E0000060788550486062E0890DF1040A4546E0 +:1079F0004D490094AAE82102FE3100234B4A77E06A +:107A000005F51C7040F27121B0FBF1F081B279856F +:107A100040F27120414332316162606D40F2712366 +:107A200002885343AB4202D34088824201D91226D6 +:107A30006DE0E08B012853D0FEF7D2FA0DF1400C37 +:107A4000E389CDE9073CCDE9099A384BCDE9043A01 +:107A500006946422636D801840F2712C5A8841F1BB +:107A6000000102FB0CF24FEAE27CCDE9022C1A88FD +:107A700040F271235A43D317CDE900234F4605F155 +:107A8000FE02FEF74EFEC4E920014246A4F81C8027 +:107A900008430BD0DDE90C018834C4E900011098DB +:107AA000A06000211198FEF7DBFE30E0E089CDE90F +:107AB0000227CDE9004054F8241F00231B4A64200C +:107AC000FEF78BFDE066DDE90C01C4E91901206BCE +:107AD00040F2712140884843C117C4E9170116E0FC +:107AE000E28901A845460094A0E824020F4A002339 +:107AF0006420FEF772FD1C346067DDE90C12C4E9F6 +:107B00001B120021C4E91911258000B94326304613 +:107B1000D3E60000487A002030750020626C65359D +:107B2000305F6C6C6D2E6300008813009DB6010001 +:107B300010B5044603F09CF910F0FF0003D1204675 +:107B400002F03EFBC0B210BD10B50446ECF76AFC73 +:107B5000410703D500F00100001D01E000F0030023 +:107B6000034944EA001040F08000886210BD000024 +:107B700000000940FEB5446B16460546DBB1207A8D +:107B800010F02E0F17D1207900F00F00052812D128 +:107B9000E07B00F00301286B001DFEF779F80B462F +:107BA00002AA0021CDE90012296B0246091D2046D8 +:107BB000F7F78AF808B10020FEBD0023BDF80820C1 +:107BC0001946304603F0F8FA0120FEBD70B5446B4B +:107BD000154643B1227A12F02E0F04D1227902F019 +:107BE0000F02032A01D0002070BD806D007E98B185 +:107BF0000A46092305212D2005F0CEFA1321017034 +:107C000045706179C9098170A169C0F80310A18B21 +:107C1000A0F8071005F020FC012070BDF0B5446B02 +:107C20008BB015460F4606461BB1207A10F02E0F7A +:107C30001CD0314850F82500406DC07978B1F06B08 +:107C40006A46D0F81210CDF80310C08AADF80700CC +:107C500000213C20F7F725F93C200BB0F0BD1BB10B +:107C6000207A10F02E0F01D0104641E0207900F06C +:107C70000F00032824D0052839D1E07B00F0030150 +:107C8000306B001DFEF704F80B460AAA0121CDE96E +:107C90000012316B0246091D2046F7F715F830BB7C +:107CA000082D06D20023BDF828201946284603F0E7 +:107CB00083FA00222946384600F0CAFA0020CCE7B1 +:107CC000706D407C98B10A46092305212D2005F0EE +:107CD00063FA1321017045706179C9098170A16946 +:107CE000C0F80310A18BA0F8071005F0B5FB2846DB +:107CF00002F0AEF9B1E70000487A00202DE9F04724 +:107D00000646214800251F46046891468A46A84633 +:107D1000002C36D0606A30B1FEF784FF002060622C +:107D200094F8300048BB052E04D0062E1AD0192E28 +:107D300020D117E00026E7680DE0387900F00F0049 +:107D4000072805D13A465146204600F01DFB88B968 +:107D50003F68761CF6B24E45EFD3204602F076F827 +:107D6000804607E03B464A465146204600F04AFB23 +:107D70000500F2D055EA080503D0BDE8F04700F051 +:107D800041B9BDE8F0870000680400202DE9F04704 +:107D90000F468146089849681D46904619B328B198 +:107DA0003946484600F02FF800281AD1C5B17C6842 +:107DB000A088C0F30710C0F1FF06AE4215D3A0881B +:107DC0002A46C0F3071020440C304146ECF73CFB38 +:107DD000A0884FEA303000EB05604FEA3050A080B9 +:107DE0000020BDE8F0871220FBE720440C3032462B +:107DF0004146ECF729FBA088B04440F47F60A080A6 +:107E0000A81BC5B2CCE70023FF2200F001B8000098 +:107E10002DE9F04F4D6804469DB0894605F10C00F0 +:107E20009A46904603260EA9834603F03FFD18B1FB +:107E30009DF8380020B104E01F201DB0BDE8F08F90 +:107E400004269DF83A0040F2777240F30010401C7F +:107E500051A1EDF7C9FD9DF83A0040F010008DF8F2 +:107E60003A00A06D817D9DF84C0061F347108DF8BC +:107E70004C004C48007805289DF84A0002D340F099 +:107E8000400001E020F040008DF84A004046FDF738 +:107E900045FC04002BD02C6000272760C9F8044063 +:107EA00020792C2220F00F00C01D20710EA903A8FC +:107EB000ECF7CAFA9DF83A008DF80D708DF8347021 +:107EC00000F00C008DF80E00BAF1000F03D020F086 +:107ED00004008DF80E000022214603A801F074FD75 +:107EE000A088C0F30711414503D8012002E0072014 +:107EF000A3E7002040F28F7227A1EDF775FDA88857 +:107F00006A7AC0F307118819824227D2801A87B291 +:107F10004819C11BA0880C31C0F3071020440C3055 +:107F20003A46ECF791FAA088C0F30711394461F39F +:107F30000B10A080A888C0F30711C91B61F30B10B8 +:107F4000A880A088C0F30711414501D8012000E0B6 +:107F5000002040F29B7210A1EDF746FDA888C0F307 +:107F600007119DF863000A1A00EB0B01431906F193 +:107F70000C001844ECF768FAA8880022C0F3071038 +:107F8000841929460EA801F01FFDA88864F30B1080 +:107F9000A880002051E70000626C6535305F6C6C92 +:107FA0006D2E6300F401002070B50D4600F0D5F889 +:107FB000040001D0012000E0002040F62A220DA19B +:107FC000EDF712FD0E488542207804D220F08000A3 +:107FD00020701E2004E040F0800020704FF4967066 +:107FE000B5FBF0F0B4F8011060F30C01A4F8011037 +:107FF00070BD0000626C6535305F6C6C6D2E630087 +:10800000C4BF030070B50F4D2C68002C19D094F834 +:10801000300028B100224FF6FF710220F6F741FF31 +:10802000A06808B1FDF74EFC04F10C00FDF786FCDA +:1080300004F11400FDF7D0FC204604F005FF0020F9 +:10804000286070BD6804002070B5040001D00120D4 +:1080500000E0002040F2611214A1EDF7C5FC04F12C +:108060003000FDF75FFC04F13400FDF767FC04F11C +:108070003C00FDF7B1FC04F14400FDF7ADFCE06C01 +:1080800004F0E2FE0025E564A06D10B104F0DCFE12 +:10809000A565E06D10B104F0D7FEE565606D0028C0 +:1080A00002D004F0D1FE656570BD0000626C6535DC +:1080B000305F6C6C6D2E630070B5154DC2F30B24F0 +:1080C000104655F82410897901BB04F0C7FFE8B1C8 +:1080D00001281BD0022801D0022070BD55F82400D1 +:1080E000052200F22D11481FECF7E7F970B155F8A1 +:1080F0002400052100F22D1003F09CFD18B9012188 +:108100002046F5F7C7F92046F5F70AFE002070BDB6 +:10811000287A002000B50C30024600F04DF80146E8 +:10812000000701D4002000BD02F10200CA0701D0FF +:1081300000F106008A0701D500F106004907F2D5D3 +:10814000401C00BD801C7047818811F47F6F02D0F5 +:10815000007E800970470020704700B50C30024651 +:1081600000F02AF80146C00601D4002000BD02F14B +:108170000200CA0701D000F106008A0701D500F10C +:1081800006004A0701D500F101000907EED5801C61 +:1081900000BD00B5024600F00FF80146400701D4CB +:1081A000002000BD02F10200CA0701D000F1060064 +:1081B0008907F6D5801D00BD0178890601D0407879 +:1081C00070470020704700B50C300246FFF7F4FFFF +:1081D0000146800601D4002000BD02F10200CA075A +:1081E00001D000F106008A0701D500F106004A0718 +:1081F00001D500F101000A0701D500F10200C9060E +:10820000EAD5C01C00BD00B50C300246FFF7D4FF14 +:108210000146400601D4002000BD02F10200CA0759 +:1082200001D000F106008A0701D500F106004A07D7 +:1082300001D500F101000A0701D500F10200CA06CC +:1082400001D500F103008906E6D5123000BD00001B +:108250002DE9F047DFF878800D46174658F825409D +:10826000814654B30021D4F89000FEF7F9FA30B3F8 +:108270000021D4F89400FEF7F3FA00B30021D4F8FB +:108280009800FEF7EDFAD0B1002644F8906F6660D2 +:10829000A660903CB7B12046FFF7D6FE082D11D05E +:1082A0000021484605F058F9444658F8250004F0E6 +:1082B000CBFD44F82560BDE8F087002103E027717D +:1082C000032100E001214846BDE8F04705F044B92C +:1082D000487A002010B500221249104604F080FDB3 +:1082E00024211148ECF7D7F8082000F021F80021EC +:1082F000122004F047FF0C4C00220223216A48653B +:108300000A498A70CB700A8009218171082003F024 +:108310000BFE03F0CBFC206A406DBDE8104003F07B +:10832000F1BD0000F0470200487A0020460400201A +:1083300070B5114D044655F82400D0B15FF000002F +:1083400040F21B620DA1EDF74FFB0021A82005F0C4 +:10835000D5F945F8240000280DD0A821ECF79BF8AA +:1083600055F8240004822002BDE87040012105F088 +:10837000F3B80120E4E770BD487A0020626C6535EF +:10838000305F6C6C6D2E630030B50446107A8DB092 +:10839000154610F02E0F09D101A9104603F0F9FA85 +:1083A000002804D09DF80600C00602D400200DB0BD +:1083B00030BD9DF80500C007F9D0BDF81700C00416 +:1083C000F5D06169A0684A7922F090024A71816013 +:1083D0009DF818104A09017962F301010171E87BE7 +:1083E00000F00301A068001DFDF752FC01AA0092F5 +:1083F00002460B462046FBF7C1F960620028D6D042 +:108400000120D4E72DE9F04105464169D5E9020490 +:10841000001D267906F00F070026072F02D0012B3A +:1084200045D11CE02368022A41D11A7A12F02E0F9E +:108430003DD1C979007801F00302C0F38101222007 +:1084400009F0E6FA00F19607E07B00F00301A86866 +:10845000001DFDF71DFCC01B61EB060117E0012AA2 +:1084600025D1E17B007801F00302C0F38101A088EF +:10847000C0F3071009F0CCFA00F19607E07B00F09A +:108480000301A868001DFDF703FCC0197141C5E98F +:108490001C01207900F00F00072801D0012300E023 +:1084A0000023214628466A69F5F7F2FD10B1002045 +:1084B000BDE8F0810120FBE702480068002800D0F9 +:1084C000012070476804002004480068002804D098 +:1084D00090F83100012800D0002070476804002087 +:1084E000C2780168808862F31F610122B2EB903F7D +:1084F0000FD101F07F42C0F30D031A4307D0FF22D2 +:10850000B2EB116F05D1A0F5FE41FF3901D1012079 +:1085100070470020704700002DE9F0411E461446C8 +:108520000F46C2F30725104604F098FD01460A489D +:1085300050F82500FEF7BEFF58B13846F9F7CEF9DE +:10854000034622463146222002F04DFE0020BDE8BF +:10855000F0810C23F5E70000487A002000207047E6 +:108560002DE9F0411F461546C2F3072600241046A8 +:1085700004F074FD0146094850F82600FEF79AFF02 +:1085800050B1F9F7E7FD23462A463946212002F08B +:108590002AFE0020BDE8F0810C24F4E7487A002090 +:1085A00070B51D4616460C24FFF786FF10B1FEF786 +:1085B0009DFF0024234632462946202002F013FE68 +:1085C000002070BDF0B507468FB01E460C4615461C +:1085D000104604F043FD01280CD0032808D00C23DA +:1085E0002A463146282002F008FE00200FB0F0BDD8 +:1085F0000220FBE7641C2B46E0788DF80000E07A4F +:108600008DF80100D4F80500CDF80300B4F8090096 +:10861000ADF8070020798DF8020000208DF80900E0 +:10862000E089ADF81000A089ADF80E00208AADF801 +:108630001200E08AADF81800A08AADF8160034F8F0 +:10864000010CADF80A00B4F80100ADF80C00608A26 +:10865000ADF8140003208DF81A001A466946384612 +:1086600000F08CF8C2E7000070B5144916460025EA +:1086700091F8D800C2070CD140F0020081F8D80070 +:108680000024200204F0EAFC50B1012803D00328A2 +:1086900012D00C2508E0012221463046FFF7D8FD14 +:1086A000641CE4B2092CECD32A4642F23D01304668 +:1086B000F1F7DAFE002070BD022070BD3075002099 +:1086C0002DE9F041487816460C46C2F3072742F2DE +:1086D0003305FF2803D10120607042F21D05E078C8 +:1086E000FF2810D042F24F05104604F0B7FC0128D5 +:1086F0000ED003280AD00C2229463046F1F7B4FEEA +:108700000020BDE8F0810020E070EDE70220F8E7EE +:108710003A462146304601F0BBF90246ECE72DE926 +:10872000F041C87816460C46C2F3072742F23405DA +:10873000FF2803D10120E07042F21E052079FF28B6 +:1087400010D042F25005104604F088FC01280ED0EB +:1087500003280AD00C2229463046F1F785FE002076 +:10876000BDE8F08100202071EDE70220F8E73A46ED +:108770002146304601F04CFA0246ECE72DE9F04183 +:108780001D4614460E46AA4203D008F061FDC007FC +:1087900009D01C48AC4290F8D81006D04A070DD436 +:1087A00041F0080105E011221FE00A0706D441F05C +:1087B0000401154F80F8D810386808B10C2214E075 +:1087C0000021902004F0DEFC90213860EBF763FE7E +:1087D0003868AC4201D1012100E0002180F8891005 +:1087E00031462046FEF7E0FE0246AC4202D142F29C +:1087F0000D0101E042F243012046F1F75BFE00204B +:10880000BDE8F081307500206804002070B5124981 +:108810001546002491F8D800C2F30726C2070AD1F2 +:1088200040F0020081F8D800284604F017FC012827 +:108830000CD0032808D00C24224642F23C012846E2 +:10884000F1F712FE002070BD022070BD01223146FA +:108850002846FFF7FDFCEFE7307500202DE9F043D7 +:108860000E462E48C2F307272D4950F8274091465F +:1088700091F8D80000258BB0C20734D140F0020037 +:1088800081F8D8008846484604F0E8FB022805D065 +:10889000032810D102200BB0BDE8F083A06D18B101 +:1088A000B0F80100F8B906E0606D8079D8B1012810 +:1088B00019D0042817D007EB470108EB4100D6F880 +:1088C000011040F8FE1FB6F8051081802A4642F2DA +:1088D00035014846F1F7C8FDF4B1A06DE0B1E56B94 +:1088E00005F10C0416E00C25F0E76946204602F07D +:1088F000DDFF78B19DF80200C0070BD0D6F801006B +:10890000CDF80300B6F80500ADF80700214668462B +:1089100003F080F8002DE8D10020BCE7487A002061 +:108920003075002010B510460E4CC2F3072200230C +:1089300054F8222042B1D46D44B149780029917A8B +:1089400006D041F0040105E0422304E00C2302E0DC +:1089500021F0040191721A4642F25201F1F784FDAE +:10896000002010BD487A00202DE9F0410C46244932 +:10897000C2F30720174651F820500026104604F095 +:108980006DFB012803D0022801D042262FE0A078F9 +:1089900010B12079022808D3E078102805D820B13A +:1089A0002079082806D9112621E0207912260828E6 +:1089B000F9D81CE0296B11F8222F60F306020A7027 +:1089C000286B22796C30611DEBF73EFD6078A17851 +:1089D00040EA81106871E078A87105F1440004460E +:1089E000EEF714F918B92146284601F069FF32461E +:1089F00042F251013846F1F737FD0020BDE8F08121 +:108A0000487A00202DE9F8430D465749C2F3072064 +:108A1000002651F8204055499046374691F8D80035 +:108A2000C20701D00C2694E040F0020081F8D80083 +:108A3000404604F013FB012806D0022804D0032886 +:108A400051D10220BDE8F883E878FB284BD868783C +:108A5000042848D8A8782072606D30B12A46214693 +:108A6000404602F035FD064673E06878042811D0D0 +:108A7000A06D00B1012040F661023DA1ECF7B4FF0A +:108A8000A06D407880072ED46878012806D003288E +:108A900004D01AE0EBF7C6FC60835AE0EBF7C2FCA7 +:108AA00060830020E082A06D4078C00703D020469C +:108AB00001F018FF07E06878012801D0E87818B3C2 +:108AC000204601F0AAFF060043D1A06D4078C00700 +:108AD0001AD0E06BEA780768B888C0F30710C0F1D5 +:108AE000FF018A4201D9122633E038440C30291D97 +:108AF000EBF7AAFCB888E9784FEA303000EB016068 +:108B00004FEA3050B88019E0E08AEB7840F27261A9 +:108B10001844884201D907261BE0A878012804D10F +:108B2000687808B1022800D101272A1D04F13C0110 +:108B300020460097FFF72AF906000AD1E08AE97873 +:108B40000844E082687803280BD0022809D000206E +:108B50006070324642F237014046F1F785FC002052 +:108B600070E70120F4E70000487A0020307500200B +:108B7000626C6535305F6C6C6D2E63002DE9F05FC3 +:108B80000C4654499346002791F8D800C2075ED19D +:108B900040F0020081F8D8006078082855D8217884 +:108BA00061B980B9082060705FF0000004EB8001BB +:108BB0008870401C6178C0B28142F7D820780128C3 +:108BC00001D1607890B30020617806E004EB800268 +:108BD0009278082A39D2401CC0B28142F6D80025CA +:108BE0006BE000BF04EB85093B4999F802804FEA2E +:108BF000082A51F82860D6B3207838B1514640464B +:108C0000FEF7E0FB070062D1C6E92200F06D002804 +:108C1000207810D00028B07A09D040F00100B0725E +:108C200052464146304602F094FC44E00DE020F00C +:108C30000100B0723FE0B0B3707840B1307830B12D +:108C4000504604F00BFA012803D0122738E00C2715 +:108C500036E0B9F8030058B1FDF7C2F9B9F80320BE +:108C600042F210735A43801841EBE27102E022E0B5 +:108C700000200146C6E9280199F80500F08300208C +:108C8000B083B06D002899F8020002D0FEF7E3FD32 +:108C900001E0FEF7EDFD10F0FF0711D10221504673 +:108CA00004F05AFC07E0FFE799F80200FEF7C4FD64 +:108CB00010F0FF0704D16D1CEDB26078A84291D886 +:108CC0003A4642F239015846F1F7CEFB0020BDE8A2 +:108CD000F09F000030750020487A00202DE9FF4FFA +:108CE00085B00D4607980026C0F3072708F0B0FAB4 +:108CF000DFF83CA2C00705D08E4991F8D800C20722 +:108D00000ED101E01126EEE040F0020081F8D8001B +:108D1000079804F0A3F978B1012807D0032801D0FF +:108D20000C26E0E0022009B0BDE8F08F5AF82700D9 +:108D300010B1FFF789F902E03846FFF7F9FA5AF85F +:108D4000274084B30020C4E92200D5F8030020F0B6 +:108D50007F42D5F8060020F07F418A427DD8D5F8C1 +:108D60000900C3B2072B78D8AB7C032B75D8202A17 +:108D700073D3B1F5804F70D8E97A03296DD8A97AF9 +:108D800003296AD8400768D0B5F801004FF0000801 +:108D9000410701D585F81280C006A06D4FF0010B88 +:108DA00045D418B107E0FFE707269CE00021192011 +:108DB00004F0E8F9A065606D18B104F045F8C4F856 +:108DC000548019222946A06DEBF73EFBA16D087D6A +:108DD000401E0875A06D817D491E8175A06D007DC6 +:108DE00003F02AF8C8B3A06D807D03F025F8A0B386 +:108DF000A06D642190F91300484305F009FEA16DB0 +:108E0000C874B5F80100010744D4C043800741D0BD +:108E1000EBF708FB00F00F00E07184F801B084F874 +:108E200000B06878800763D584F8008060E018B1EE +:108E300004F00AF8C4F85880606D20B900211220AF +:108E400004F0A0F960658146B5F80300ADF80000B4 +:108E5000E888ADF80200A87A00E01BE08DF8050074 +:108E6000E87A8DF80600E868CDF80700288AADF8A2 +:108E70000B00687A8DF80D00A87C8DF80E00B5F80F +:108E8000010010F007011AD002291AD0032903D0DB +:108E9000052904D0122626E08DF8048006E000079C +:108EA00001D5012000E004208DF804003946684611 +:108EB00002F0BCF90646287E28B1012104E0032017 +:108EC000F2E70220F0E7002189F8111095F913006C +:108ED0006421484305F09CFD89F8100084F801B036 +:108EE00084F800B026B1012239460798FFF7B0F99F +:108EF000DDE907210223262004F04EF906707F21C8 +:108F000041705AF82710044661B14A6D002002B141 +:108F1000107C896D01B1C87C08F05AFD642190FB7A +:108F2000F1F06070204604F097FA0020FBE60000A4 +:108F3000487A0020307500202DE9F8430E463B4961 +:108F4000C2F30720002451F82050394990462746A3 +:108F500091F8D800C20701D00C245CE040F0020078 +:108F600081F8D800404604F079F8012806D002289C +:108F700004D0032809D10220BDE8F8832DB1F07890 +:108F8000FB2802D87078032801D9122443E0B07876 +:108F90002872686D30B132462946404602F0BBFA6D +:108FA000044638E0A86D40788007EED57078012837 +:108FB00001D0032809D1EBF735FA68830020288314 +:108FC000284601F0B9FE040025D1F3781BB3288BA5 +:108FD00040F272611844884201D907241BE0B0783E +:108FE000012804D1707808B1022800D10127321D70 +:108FF00005F13C0128460097FEF7C8FE04000AD19F +:10900000288BF17808442883707803280BD0022835 +:1090100009D000202870224642F238014046F1F77C +:1090200023FA0020A8E70120F4E70000487A002096 +:1090300030750020F8B50D462E49C2F307201646BC +:1090400051F820402C4991F8D800C20701D00C22D9 +:1090500046E040F0020081F8D800304603F0FEFF01 +:10906000012805D0022803D003280CD10220F8BD26 +:109070004CB1A06D38B1E06D28B1A878FC2802D8B9 +:109080006878032801D912222AE00027012801D09C +:10909000032808D1EBF7C6F96083E782204601F088 +:1090A000ABFD02001CD1E08AAB7840F2726118443B +:1090B000884201D9072213E0EA1C04F13C01204652 +:1090C0000097FEF763FE02000AD1E08AA9780844FF +:1090D000E082687803280AD0022808D00020607057 +:1090E00042F23F013046F1F7BFF90020F8BD012000 +:1090F000F5E70000487A0020307500202DE9F047A0 +:109100000F464E7824482549914650F8264091F85C +:10911000D8000025C2072AD140F0020081F8D8000B +:10912000082E0ED26CB1A06D58B1E06D48B130027E +:10913000804603F093FF012808D0022819D00328A5 +:1091400001D0122520E00220BDE8F0873878D8B1A0 +:10915000607860B10020C4E92200A07A424640F065 +:109160000200A0723146204602F0F3F90CE00C2513 +:109170000AE0387840B9A07A002220F00200A072FC +:1091800031464046FFF764F82A464FF401514846FD +:10919000F1F76AF90020D7E7487A002030750020FF +:1091A0002DE9F0410F463B49C2F307203A4D51F8F3 +:1091B0002040164695F8D800C1070BD140F00200B8 +:1091C00085F8D800104603F049FF78B101280FD088 +:1091D000032809D00C252A4642F23E013046F1F719 +:1091E00043F90020BDE8F0810220FBE74225F2E7C9 +:1091F000B7F80100B7F80310884204D8A06D10B189 +:109200004078800701D01225E5E7E06D28B90021FC +:10921000072003F0B7FFE065C0B339680160B98883 +:109220008180B9798171EBF7FDF8074614F8610F79 +:1092300020F0800020701848D0F83B01C4F80300EB +:1092400095F83F11E07961F304001449E071097861 +:1092500061F34710E071613C04F1690002F058FDD0 +:1092600084F86D70380A84F86E00380C84F86F004A +:109270000020E082204601F0BFFC0546D4F86910CA +:10928000074A04F17200EDF72AFDA4E7FFE707257E +:10929000A1E70000487A002030750020F40100208A +:1092A0006B76002070B51D4614460E46104603F03E +:1092B000D5FE01460A4AC4F3072052F82000FEF703 +:1092C000F9F850B13046FAF71BFD0346224629460D +:1092D000232001F088FF002070BD0C23F6E700007A +:1092E000487A00202DE9F05F0E461F4992464FF064 +:1092F000000991F8D800C2F307279B464D46820724 +:1093000001D50C2527E040F0010081F8D800307825 +:109310001F280AD8DFF8548058F82700C46B34B1EE +:10932000207900F00F00012809D1122513E03C300C +:109330001F220121FCF704FA58F82700C46B327889 +:10934000711C04F10C00EBF77FF83078A188801DC8 +:1093500060F30B11A1802B46524659461D2001F0A7 +:1093600042FF4846BDE8F09F30750020487A002053 +:109370002DE9F0410C461D491546C2F3072791F827 +:10938000D8001E46820713D440F0010081F8D800AF +:10939000284603F063FE022808D0032803D0207873 +:1093A00001280CD004E00220BDE8F081207808B14B +:1093B0000C2412E03846FEF73FFAC4B20DE029460D +:1093C0003846FDF7FFFF3846FEF752FA10F0FF046B +:1093D00003D10221284604F0BFF823462A4631462D +:1093E0001F2001F000FF0020DEE7000030750020A4 +:1093F0002DE9F0411E4614460F46C2F307251046DC +:1094000003F02CFE022804D00B4991F8D800820703 +:1094100001D50C2308E040F0010081F8D80029466E +:10942000384601F003FF0346224631461C2001F076 +:10943000DAFE0020BDE8F0813075002002490120ED +:1094400081F83A0100207047307500202DE9F04185 +:109450001D4E1D46904696F83A010C4648B36422CC +:1094600041462F2004F0C2F8002086F83A01052179 +:10947000204602F0DFFBF0B125281CD830462168D9 +:10948000C0F83B112179002480F83F115FF00107FB +:1094900007EB0426304603F0E1FD20B14246314699 +:1094A000312003F0EDFF641CE4B2082CF0D300235C +:1094B00002E00C2300E0122342462946242001F05A +:1094C00092FE0020BDE8F081307500202DE9F047C4 +:1094D0000E4629499146002791F8D800C2F3072586 +:1094E0009A4682073DD4DFF8948040F0010081F86D +:1094F000D80058F8250044463C300221FDF786FF8D +:1095000054F82500C06B0468484603F0A7FD44B337 +:109510003278711C04F10C00EAF796FF58F8252008 +:10952000317811833178A288891D61F30B12A280F2 +:10953000217921F00F01091D2171617921F0B0011C +:10954000617158F82500406D007A0028E07902D05A +:1095500040F0080001E020F0080020F00400E07175 +:1095600000E00C273B464A4651461E2001F03BFED8 +:109570000020BDE8F087000030750020487A002008 +:1095800010B5104603F06AFD042804D0002001F055 +:109590003EFE002010BD084801218170C07818B13E +:1095A000082002F089FBF4E7044901204A6860F3CF +:1095B000D3424A60EDE70000460400200000094065 +:1095C0002DE9F8430546046D99461746184603F001 +:1095D00045FD012803D0032801D004283AD1688A28 +:1095E0004FF0000638446882DFF870802FE0207A60 +:1095F00010F02E0F20D1B8F80010404601F1010103 +:10960000A8F8001098F80210B1B96179490613D58D +:109610004279217CB2EB911F0ED198F8040001F041 +:109620001F01814208D1CDF80090286B0022001D57 +:109630002346114603F00AF86079761C20F02000DA +:109640006071E079F6B220F08000E0712468BE42DB +:10965000CDD32C650020BDE8F8830000460400202F +:109660002DE9FF4F81B00D460398BF49C0F3072B8A +:1096700095F8088051F82B404046B8F1050F28D0E6 +:10968000062826D0192824D0039803F0E7FC06000A +:1096900024D0012EFCD0002CFAD02868216B8842FF +:1096A0001CD10027032E1AD06989608AB5F80C9066 +:1096B000081A1FFA80FA4046B8F1110F74D077DC0F +:1096C000092805D06ADC01287BD0B8F1080F6ED1DB +:1096D00096E0AB896A890399FEF710FB27E14046C3 +:1096E000B8F1110F45D00EDC092821D005DC012886 +:1096F00012D0B8F1080F4FD11AE00A2818D0B8F1EB +:10970000100F49D120E0A8F11200062844D2DFE86A +:1097100000F0303A3A433F3FD4F8900040B36968D4 +:10972000814201D1012000E0002041F22B0216E02D +:10973000D4F89000E0B16968814201D1012000E0D5 +:10974000002041F230020AE0D4F8900080B169684C +:10975000814201D1012000E0002041F2330283A1C7 +:10976000ECF742F9D4F89000FDF75CFAC4F8907079 +:1097700012E0D4F8940078B1FDF754FA943460689C +:1097800064E8250708E054F8940FFDF74BFAF6E774 +:10979000D4F89400FDF746FA22799CE00A282FD0ED +:1097A000B8F1100F03D153E067E001E009E077E082 +:1097B000A8F11200062873D2DFE800F05F7A92CA9F +:1097C000BDBDD4F8900080B16968814201D101200B +:1097D00000E0002041F2540264A1ECF705F9D4F84E +:1097E0009000FDF71FFAC4F89070022E2FD1534657 +:1097F0005A46CDF8009020460399FEF70FFA94E000 +:10980000D4F8900080B16968814201D1012000E064 +:10981000002041F25B0255A1ECF7E6F8D4F8900085 +:10982000FDF700FAC4F89070042E10D1BAF1000FC1 +:1098300006D00AF0FF0259462046039BFFF7C0FE00 +:10984000A18A01EB0900A082584602F035FA6EE0C9 +:10985000D4F8900058B36968814201D1012000E03A +:10986000002041F2660241A1ECF7BEF8D4F8900066 +:10987000FDF7D8F9C4F8907052E0D4F89400B0B174 +:10988000696888420DD1FDF7CDF994345946606876 +:10989000C4E90007A068943CFDF7CCFA38B119E0A0 +:1098A00056E0D4F8980088423AD1C4F8987037E06E +:1098B00054F8940FFDF7B6F9606864E82507022EA6 +:1098C00035D153465A46CDF8009020460399FEF70D +:1098D00051F928B3002259460398FEF7B9FC26E057 +:1098E00054F8940FFDF79EF9606864E82507022E8E +:1098F0001DD153465A46CDF8009020460399FEF7F5 +:1099000065F928B15946D4F89C00FDF793FA07E0B1 +:109910000021D4F89400FCF7A3FF08B1C4F89470B8 +:109920005A463146204600F039FC0028D2D105B015 +:109930000020BDE8F08F0029F9D16868FDF772F9C1 +:109940006868D4F894108842F1D1C4F89470EEE7B6 +:10995000B8F1000F06D0002041F2A50203A1ECF7F8 +:1099600043F8E4E70120F7E7487A0020626C6535A8 +:10997000305F6C6C6D2E63002DE9F0410A48C2F334 +:109980000726144650F826500F46104603F066FB93 +:1099900030B12DB17A7A234631462846FFF710FEC2 +:1099A0000020BDE8F0810000487A002000207047C8 +:1099B00010B5012904D10348006808B100F046FA47 +:1099C000002010BD680400202DE9F04116460F4626 +:1099D000054601F10C0402F05FF8002856D0287803 +:1099E000697840EA8110207095F82B10B88861F3EF +:1099F0000B10B8802878E8B3A8786070A87804F1D4 +:109A00000204C00707D0D5F803002060B5F80700AE +:109A1000A08004F10604A878800707D5D5F80900CE +:109A20002060B5F80D00A08004F10604A878400776 +:109A300002D5E87B04F8010BA878000702D5288A34 +:109A400024F8020BA878C00605D5688A2080287DF6 +:109A5000A07004F10304A878800607D5122205F14E +:109A600015012046EAF7F0FC04F11204A87840063C +:109A700005D500E009E095F8270004F8010B95F8FA +:109A8000282031462046EAF7DFFC0120BDE8F081BE +:109A90002DE9F0439046574A0D46097852F8284080 +:109AA00087B0272902D86978032903D9122007B083 +:109AB000BDE8F083216B19B90021FBF78DFD206310 +:109AC0004D4F01264FF00009FE70A7F80090FF22CD +:109AD000082104F13400FBF7D5FD606B2065A4F884 +:109AE0001290206BC17921F07C012431C171216B6E +:109AF00042480861216B42484861D4E90C02C168C0 +:109B000062F31E01C160FBF7A1FE216B8860206B30 +:109B100080F82660206B017E21F001010176287813 +:109B2000F3F789FA216B4A7E60F305024A76216BCE +:109B300068780A79401E60F383020A71206B2D2237 +:109B400010F8241F41F001010170206B818C62F339 +:109B50004E018184206BC6852A48016866F3451151 +:109B6000016029494FF49670C862002005F03CF965 +:109B7000002005F031F9206BAA7910F8221F62F35A +:109B800006010170206B697910F8202F61F34512EE +:109B90000270E878387128797871E87890B1D4E962 +:109BA0000C070179C1F38101022921D0AA796C3017 +:109BB000E91DEAF749FC3846FBF7DCFF3F68606BBC +:109BC000B842F8D104A9CDF80090CDE9016143462F +:109BD00000220E496FF00040FCF7F0FBC4F8900043 +:109BE00030B14FEA0820042103F0B6FC00205EE704 +:109BF0000C205CE7487A0020460400202941767159 +:109C0000555555002004094000000940E1B6010007 +:109C10002DE9F0479046844A0D46097852F82840CD +:109C200086B027290DD8A97807290AD8E978042908 +:109C300007D82A795AB16A793AB1AA79921E072AC5 +:109C400003D3122006B0BDE8F08703297ED2216B32 +:109C500019B90021FBF7C0FC20634FF0000A5746FA +:109C6000A4F812A0FF22012104F13C00FBF768FDDB +:109C7000FF22012104F13400FBF704FDD4E90F01B8 +:109C8000DFF8AC9108606948E26BC770A8781646A7 +:109C9000082814D2DFE800F0040C0C040C0C0C0CA7 +:109CA000D9F8002060F38202C9F80020012004E006 +:109CB0000C32697802F05EF8002005F09DF8A97872 +:109CC000307961F3030030716978B08861F30B106B +:109CD000B080F07920F00301F171E87804287DD09C +:109CE000401EC7B2206BAA7910F8221F62F306014A +:109CF0000170B07920F00100B071287970B1206B4B +:109D0000AA796C30E91DEAF79FFBB07940F00100B9 +:109D1000B0712879697940EA8110F072D9F8002091 +:109D2000012161F34102C9F800206978D9F80020C7 +:109D3000404B1A4042EA0121C9F80010D9F800202E +:109D4000012161F30412C9F8002000E069E000205D +:109D500005F04AF8002005F03FF8F079394600F0A8 +:109D60000302687807F054FE2979F93000EBC1004E +:109D700080B200F51C7040F27121B0FBF1F0484355 +:109D80002D4980B2C862206BC17921F07C0120315D +:109D9000C171216B29480861216B29484861216BF9 +:109DA000E06B8860D4E90C02C16862F31E01C160F7 +:109DB000206B017E21F0010101762878F3F73BF951 +:109DC000216B4A7E60F305024A76206B017967F3C6 +:109DD000010101711B4890F8450100E01BE0216B77 +:109DE00004AA434681F82300216B0120C885CDF8E1 +:109DF00000A0CDE90102002213496FF00040FCF7FA +:109E0000DDFAC4F8900060B14FEA0820042103F0A5 +:109E1000A3FB002016E721F00300401CF07102278D +:109E200060E70C200EE70000487A0020460400207E +:109E300020040940FF00FEFF00000940294176711F +:109E40005555550030750020A9B701002DE9F043A4 +:109E5000044690F86D00A66800EB0010361D051949 +:109E6000F078676920F07C0087B01430F070787962 +:109E700007F10C0920F010007871387920F00F00FC +:109E8000401D387115F83A0F10B102281ED1D0E0EC +:109E900094F8890018B994F8880000287DD0F078EB +:109EA00020F07C001830F0700E2001F0D3FF79799B +:109EB00060F30411797194F888000028EED0002036 +:109EC00084F88800307820F00F003070307DC107B2 +:109ED00008D0410606D4717D01F03F01252901D348 +:109EE000272909D920F0400040F001003075707D2D +:109EF00020F03F002730707596F8200040F00100F8 +:109F000086F8200035F8031F308C61F34E00308452 +:109F100028887085707820F004007070E068FBF786 +:109F20004DFC6069FBF755FC2E8840F271204643DA +:109F3000A889FE36ED1E02210346022800D80846F5 +:109F400040F27121484381B2B5F80D000222022887 +:109F500000D8104640F271225043022280B2022BF8 +:109F600000D81346B5F807C0B5F8058040F2712255 +:109F70008DE80311534309F10802971CCDE90472DF +:109F8000D4E9200106F6C412FDF700FCF0B36D1C05 +:109F90002989A9F80C10698900E048E0A9F80E1099 +:109FA000FCF71EF8642280182F886A8841F10001AE +:109FB000974210D9D4E9202352EA03050BD040F28E +:109FC00071256F43BA1843EBE775831A71EB0503EC +:109FD00001D210462946002304F18002CDE9032373 +:109FE000194AFE258DE83400184B3246FCF76FFB0A +:109FF000606258B194F88800002815D094F86D007C +:10A00000401CC0B2032800D3002000E019E000EBA0 +:10A010000011214491F83A10032900D3002004F8DC +:10A020006D0F0120E076002007B0BDE8F08301202D +:10A0300046E7307820F00C00083020F00300801C48 +:10A0400043E70720F0E70000B19901004DB6010099 +:10A05000F0B506464C488BB050F82640206BE56BB7 +:10A060000146001D626B002C7ED000297CD0D4F804 +:10A070009010002978D1002D76D0A18B491CA183A6 +:10A08000417821F0040141701046FBF797FBA87955 +:10A0900020F0FE00A871687920F0A000687128689F +:10A0A00060B1817921F0FE0181712868417921F048 +:10A0B00080014171286821F020014171204601F0A2 +:10A0C00029FD072700258034D4E9023074E82012E6 +:10A0D00059185041CDE90810EAF7A4F990FBF7F1BF +:10A0E00007FB11004FF47A71DDE908234843C117DB +:10A0F00080185941CDE90801FBF772FF64228018EE +:10A10000DDE9083241F100011B1A8A4101D2CDE993 +:10A110000801DDE9082321463046FDF7FDF9002856 +:10A120002DD1E08908A90494CDE905011748CDE9AE +:10A130000205DDE9082340F6B830111843F10000AC +:10A14000CDE9001020346068FE30FCF757F9014675 +:10A150002067DDE90802C4E91A0234F82009B0F5E5 +:10A160007A7F00D269B100E008E02584080000D0C1 +:10A17000012040F6A84206A1EBF736FC00200BB008 +:10A18000F0BD401C20849EE7487A00209DB6010067 +:10A19000626C6535305F6C6C6D2E6300022905D1F1 +:10A1A000D0F8901011B9D0F8941009B10020704780 +:10A1B000C06D0028104601D0FDF7BABCFDF74BBBBF +:10A1C0002DE9F04F894A8146002052F829408DB090 +:10A1D000D4E92265A17A89071DD5A16C0860A27A0D +:10A1E000204604F14401520702D500F0F1F901E0E4 +:10A1F00000F0DFFA10F0FF0A7ED1A06C0060216B46 +:10A200007B480861D4E92201084307D10120A081DD +:10A21000484600F0F7F80DB0BDE8F08F606C0068BC +:10A220000068D0F80080D8F80070F87900F00302D8 +:10A23000A06D817DB888C0F3071007F0E9FB0346E5 +:10A240004046FDF7C0FFFE3383464FF000080393FE +:10A25000A089684B401CA081D4E92001CDF8008082 +:10A260008619CDE901974D4130462946039AFCF7FE +:10A27000DDF9C4F8980000287ED0A0892034401E63 +:10A28000ABF81000C4E91A65002020802067E7675A +:10A29000606714F8160C203CC0076ED0FBF7A0FED8 +:10A2A00064228718606C41F100060068006807901E +:10A2B000D0F800B09BF8070000F00302A06D817D8C +:10A2C000BBF80400C0F3071007F0A2FB0546606A64 +:10A2D0000C90D4E9222305F51671084496464FEAFE +:10A2E00080189C46B2EB080263F10003D11B73EBAC +:10A2F000060103D23A4600E075E03346E6890021C4 +:10A300009046BEEB00003C4A6CEB010CCDE902210B +:10A31000CDE9000C0AAFCDF81090CDE905670C9897 +:10A320004246FE30FCF76AF8C4F8900030B308AB40 +:10A330000799CDE90513314902AA0026A2E8420295 +:10A34000243405F1FE00D4E91921121A2C4B61EBDB +:10A350000601D21841F1FF31CDE90021DDE90A23E0 +:10A3600021688A1846EB03014FF49673D21841F125 +:10A370000003FCF743F802E013E025E021E020674A +:10A38000243CB8B108990A980A1A2046616C01F079 +:10A3900013FBD4F888100898091A584601F01EFBE0 +:10A3A0000FE0208C401C80B2208464287FF650AFE0 +:10A3B000032017E00021D4F89000FCF751FAC4F80C +:10A3C0009060D4F8940070B944344946606D2065BB +:10A3D0000020606520680068006800680068A0656B +:10A3E000FCF728FD8246504615E70000487A002019 +:10A3F000D6BE898E05B70100CDB7010073B5010047 +:10A40000D4FEFFFF2DE9F04F07466D489FB04FF097 +:10A41000000A50F827401AA95546E0890097039191 +:10A42000CDE9010A616A5346FE31664AC820FCF74D +:10A43000D4F8C4F89000606C0068D0F80090D9F8A7 +:10A440000060F07900F00302A06D817DB088C0F358 +:10A45000071007F0DDFA18A9CDE903158DE8A00271 +:10A460008046DDE91A12606A574B411845EB02003D +:10A470004FF4967211EB020C40F1000108F1FE025C +:10A480006046FCF724F9834618991A980A1A204660 +:10A49000616C01F091FAB1463668F07900F0030280 +:10A4A00054F8580F817DB088C0F3071007F0B0FA58 +:10A4B000024612A80EA9CDE90810444804A907963F +:10A4C0000A95A1C1616840F2E243491C488858439B +:10A4D000C317CDE90203088840F2E2414843C1179F +:10A4E000CDE90001DDE9183113EB080069414FF4B3 +:10A4F0009673C01841F10001FE321192FCF711F978 +:10A50000C4E90A01DDE91223C4E90C23583C0843DD +:10A5100020D1E06D40F2E2412C4BB0F803004843FB +:10A52000C117C4E9200112A802960F95CDE90305D1 +:10A53000CDE90057DDE9182012EB080168414FF41E +:10A5400096728F1840F100013846119AFCF7BFF857 +:10A550000E9040B300210F98FCF782F96434C4F8E0 +:10A5600030B00E9860634846FDF72DFE0546D4E9ED +:10A57000070140F2E2420023E9F722FF688024F855 +:10A58000020C688840F2E2414843C117C4E9070160 +:10A5900012991898091A484601F020FAA6631FB0CC +:10A5A0005046BDE8F08F54F8900F0021FCF758F9A1 +:10A5B00000215846FCF754F94FF0430A2560EEE7B6 +:10A5C000487A0020CDB7010073B5010005B701003E +:10A5D0002DE9F34F8FB083468679C08A0D9010988D +:10A5E000006800F0D5F85FEA000804D0D8F8004011 +:10A5F000A079C00703D0002011B0BDE8F08FFF2084 +:10A60000FBF78CF805004BD0287920F00F00C01D17 +:10A6100028719BF805008DF817009DF80A0000F0DE +:10A620004000001D8DF80A009DF8321004F10C0066 +:10A630000A18294602A8FFF7C7F9A879761E40F044 +:10A640000100A8719BF80500E872A988687AC1F337 +:10A65000071106F0FF09401A86B20195009570E0D7 +:10A6600004F10C0002A9054601F020F9A088C0F30E +:10A6700007119DF83300091A2844CFB20E905AE012 +:10A680008EBB0D980B3082B2FF2A00D9FF22B9F1A0 +:10A69000000F17D0002369465846FDF7B9FB98B163 +:10A6A00001980028A8D010992046C1F80480002104 +:10A6B000C8F800100A46FBF79BF96846FBF78CF9CF +:10A6C000072099E70123E6E70198B9F1000F0AD0C6 +:10A6D000817941F0010181719BF80510C172A9F1E6 +:10A6E000010000F0FF09BE4201D9384600E03046C3 +:10A6F000DDF804A0C5B22A46BAF80400C0F3071179 +:10A7000001EB0A000C300E99E9F79EFEBAF804003E +:10A710004FEA303000EB05604FEA3051781BC7B28A +:10A72000701BAAF8041086B20E9828440E900D985B +:10A73000401B80B20D90002FA2D120462468FBF769 +:10A740006BF9002C8CD10099C8F8001001980460B6 +:10A7500010980199416013E000230B22584610998C +:10A76000FDF756FB78B910984068817941F00101F6 +:10A7700081719BF80510C172A9F1010000F0FF0979 +:10A78000B9F1000FE8D110984068046033E7000089 +:10A7900000B5024609E000BF02F10C00FDF70CFD18 +:10A7A000800601D5104600BD1268002AF4D10020B1 +:10A7B00000BD2DE9F0418CB00F460868FFF7E8FFB7 +:10A7C0000025002878D00468A079C00774D03CE048 +:10A7D000A0886946C0F3071604F10C00804601F01A +:10A7E00065F8002868D09DF80200400763D5A0886E +:10A7F00004F10B03C0F307119DF82B000A1A00EBBC +:10A8000008011844E9F720FE9DF80200002220F01C +:10A8100004008DF8020021466846FFF7D5F8A088AD +:10A82000761E66F30B10A080A07920F00100A071C5 +:10A830009DF82B00401EC0B28DF82B00A188C1F3FB +:10A840000711884204D025462468002CC0D132E08C +:10A850008CB315B9254624686CB3A0886946C0F34B +:10A86000071605F10C00804601F020F89DF8020063 +:10A8700020F010008DF802009DF82A1004F10C0061 +:10A880000A1821466846FFF79FF8A988F01E60F372 +:10A890000B11A9809DF82B0005F10F01321A01441C +:10A8A0004044E9F7D1FD7D60002228681146FBF79E +:10A8B0009FF80020286000200CB0BDE8F081000067 +:10A8C00030B50546D1E90030D0F8004003F10C0066 +:10A8D000FDF75FFC002804D0697901701B68A34272 +:10A8E000F4D130BDF0B505463C308BB0FF220321DA +:10A8F0000746FAF725FFB0B105F134002522012102 +:10A900000646FAF7BFFE70B16946284600F0E2FB42 +:10A9100004000AD03846FBF75FF83046FBF70EF824 +:10A9200020460BB0F0BD0720FBE7EC6B4FF00106B3 +:10A93000207920F00F0000F107002071E07920F06D +:10A940000C00E071607920F0100060718DF80160FA +:10A950004FF018008DF80200A86D817D29B940786C +:10A96000400602D558208DF8020000222146684694 +:10A97000FFF72AF82468207920F00F0000F1070083 +:10A9800020719DF82910E07961F3C30020F00400E4 +:10A99000E071607920F0100060718DF801604FF077 +:10A9A00009008DF80200A86D4078400602D54920C4 +:10A9B0008DF80200A86D407840070BD59DF8020085 +:10A9C00040F002008DF80200A86DC17AE07961F3D1 +:10A9D0008200E071002221466846FEF7F5FF2168FB +:10A9E000087920F00F00083008719DF82920C879F7 +:10A9F00062F3C30020F00400C8714879002220F0FF +:10AA00001000487100208DF8010003208DF802002D +:10AA10006846FEF7D9FF002083E730B5044634309E +:10AA20008BB00546FAF78AFFFF22022104F13C00B1 +:10AA3000FAF786FE30B3252201212846FAF722FED6 +:10AA400000B36946204600F045FB00281BD1E16BAE +:10AA50004FF00005087920F00F0000F107000871A1 +:10AA6000C87920F00C00C871487920F010004871B6 +:10AA70008DF801504FF018008DF80200A06D827D16 +:10AA80001AB108E007200BB030BD4078400602D56F +:10AA900058208DF8020000226846FEF795FFB0B3FB +:10AAA000E06B0168087920F00F0000F107000871E1 +:10AAB000C87920F00C00C871487920F01000487166 +:10AAC0008DF801504FF008008DF80200A06D40781D +:10AAD000400602D548208DF80200A06DB0F80100B4 +:10AAE000420715D59DF8020040F002008DF80200E3 +:10AAF000A06DC27AC87962F38200C871A06D4078F7 +:10AB0000800613D49DF8020040F0030006E014E034 +:10AB100080060BD49DF8020040F001008DF8020081 +:10AB20009DF82920C87962F3C300C87100226846E5 +:10AB3000FEF74AFF08B10020A5E7FF20A3E710B504 +:10AB400004468CB0FF2201213C30FAF7F9FDE8B34E +:10AB50002522012104F13400FAF794FDB0B36946CF +:10AB6000204600F0B7FA002842D1E16B087920F0C6 +:10AB70000F0000F107000871C87920F00C00C871BF +:10AB8000487920F0100048714FF000008DF8010066 +:10AB90008DF80200A06D4078800608D401208DF861 +:10ABA00002009DF82920C87962F3C300C871A06D26 +:10ABB0004078400605D59DF8020040F040008DF831 +:10ABC0000200A06D407840070DD500E012E09DF82E +:10ABD000020040F002008DF80200A06DC27AC87930 +:10ABE00062F38200C87100226846FEF7EDFE002085 +:10ABF0000CB010BD0720FBE770B505468CB0FF22F6 +:10AC000003213C30FAF79CFD00287CD0252201214D +:10AC100005F13400FAF736FD002874D0694628465D +:10AC200000F058FA00286FD1EC6B002632462079EC +:10AC3000214620F00F00C01D2071E07920F00C00AB +:10AC4000E071607920F0100060718DF801601820CB +:10AC50008DF802006846FEF7B7FE2468122205F15F +:10AC60006001207920F00F00C01D2071E07920F0F4 +:10AC70000C00E071607920F0100060718DF80160C7 +:10AC800028208DF802000DF11500E9F7DDFBA889F9 +:10AC9000ADF82500A86D4078800608D429208DF8ED +:10ACA00002009DF82910E07961F3C300E071A86DFE +:10ACB0004078400605D59DF8020040F040008DF830 +:10ACC0000200A86D407840070BD59DF8020040F0C7 +:10ACD00002008DF80200A86DC17AE07961F382006C +:10ACE000E071002221466846FEF76EFE2168087971 +:10ACF00020F00F0000F107000871C87920F00C0067 +:10AD0000C871487901E015E012E020F010004871A8 +:10AD10008DF801608DF80260E86D4079400602D53B +:10AD200040208DF8020000226846FEF74DFE00200C +:10AD30000CB070BD0720FBE770B505468CB0FF2254 +:10AD400003213C30FAF7FCFC38B32522012105F140 +:10AD50003400FAF797FC00B36946284600F0BAF9C8 +:10AD600000281BD1EC6B4FF00206207920F00F0079 +:10AD700000F107002071E07920F00C00E0716079AB +:10AD800020F0100060718DF801604FF018008DF810 +:10AD90000200A86D817D19B108E007200CB070BDDC +:10ADA0004078400602D558208DF802000022214646 +:10ADB0006846FEF709FE2468207920F00F0000F1B4 +:10ADC000070020719DF82910E07961F3C30020F09D +:10ADD0000400E071607920F0100060718DF801606E +:10ADE0004FF009008DF80200A86D4078400602D5AA +:10ADF00049208DF80200A86D407840070BD59DF8DA +:10AE0000020040F002008DF80200A86DC17AE079DE +:10AE100061F38200E071002221466846FEF7D4FD0E +:10AE20002168087920F00F0000F1070008719DF8F3 +:10AE30002920C87962F3C30020F00400C871487962 +:10AE400020F0100048714FF000008DF801004FF025 +:10AE500001008DF80200A86D4078400602D541201F +:10AE60008DF8020000226846FEF7AEFD002095E74F +:10AE70002DE9F0478F49804651F82840E9F7D2FA8A +:10AE8000252690FBF6F106FB1100C5B20CB101209E +:10AE900000E0002040F6941287A1EAF7A5FDDFF854 +:10AEA0002492E36B1BB1607808B12078F0BB04F109 +:10AEB0004400EBF7ABFE68B1A06D4078C0072046B8 +:10AEC00002D0FFF70FFD01E0FFF739FE00286DD13A +:10AED000E36B30E0A06C002101602046656CFCF75C +:10AEE000CDFA034605E02846FDF78DF900B1037061 +:10AEF0002D68002DF7D16CE01846FDF70BF90746D9 +:10AF00001846FDF72AF927B1628B398862F30B01E5 +:10AF1000398048B1017865F305010170E079284472 +:10AF2000B0FBF6F106FB1105587900E003E020F0D4 +:10AF3000200058711B6818680028DDD1587902215B +:10AF400020F020005871606C8088C0F3071204F173 +:10AF500044000546FAF7F4FB38B304F13C012846F7 +:10AF6000EBF766FE656C00272868066806F10C0A98 +:10AF700070686860B0885146C0F3071205F10C0094 +:10AF8000E9F762FA7F1C2D68FFB2022FF0D3606CE4 +:10AF900099F803134A4621FA08F1C37901F0010137 +:10AFA00061F30103C37101230BE00720BDE8F087C3 +:10AFB0005B1C032B05D192F8041321FA08F101F070 +:10AFC00001010068C57961F30105C571A56C854271 +:10AFD000EED1A06D08EB4802666C817A09EB420065 +:10AFE000FE3004F1280200F0B7FD0500DED1206B31 +:10AFF0003549001DC16035490161417821F00801E2 +:10B000004170A16D8A7C418862F389014180C178D9 +:10B0100021F07C014031C170A16D0A7D017862F39D +:10B0200001010170A16DC97CC177616C4160626BE7 +:10B03000816862F31E018160427D017D22F03F0242 +:10B0400021F040012732427541F00101017520498C +:10B050001830FBF7DCFEF07900F00302A06D017DF3 +:10B06000B088C0F3071006F0D3FC00F5967189B2E2 +:10B07000E18100EB4100226B0A2100F50270D185CD +:10B080006062A26D40F27123D2F8031021F07F417B +:10B090004B43834205D3D2F8060020F07F40814223 +:10B0A00001D9122504E0606CFAF793FBA06C0060F4 +:10B0B00028467BE7487A0020626C6535305F6C6C0F +:10B0C0006D2E630030750020D6BE898E5555550013 +:10B0D0006B76002070B5054600200C4681F82800EC +:10B0E000698B208A61F30B002082A86DC17D607C92 +:10B0F00061F307106074A07C20F03F00A074A96D7C +:10B100008A7D217D62F3471121751249097805294D +:10B1100002D340F0400001E020F0400009346072AA +:10B120002846FCF7ABF9A077A86D0B4AC1682160EF +:10B13000008AA080A86D093C04F12903817A288A3D +:10B1400000EB400002EB4000FE30E21C00F042FE4B +:10B15000002070BDF40100203075002010B50446B9 +:10B16000C06C002809D10021402002F00BF8FF211B +:10B17000E0640170E06C80F8201010BD30B50C4820 +:10B1800087B00825046A606B2065FAF717FB00207A +:10B19000608204AA01218DE8070002462B4605497A +:10B1A0006FF00040FBF70AF9C4F8900007B030BD1B +:10B1B000487A0020E1B601002DE9F04116461D460F +:10B1C0000F4604460202062305212C2001F0E4FF6D +:10B1D0001221017084704770A0F803604571BDE8CA +:10B1E000F04102F039B910B51C46012301F0D4FF3B +:10B1F0000470BDE8104002F02FB910B51C460123C1 +:10B2000001F0CAFF0470BDE8104002F025B910B586 +:10B21000044604235A020521252001F0BDFF448085 +:10B2200000210170BDE8104002F016B92DE9F04789 +:10B230000C4606460188408881427DD8727B072AE9 +:10B24000FBD8B27B032AF8D8B279032AF5D87279F1 +:10B25000032AF2D820296FD3B0F5804FEDD87D4D69 +:10B2600009204FF0000955F824104FF00108496DEE +:10B27000887155F82410496D81F8079030790528B8 +:10B280005AD2DFE800F078036995080055F82400E9 +:10B29000406D80F8078055F82400222234300121C7 +:10B2A000FAF7F0F955F8240002213C30FCF7AEF82B +:10B2B00055F82400406D80F8068055F82400C76BCF +:10B2C000387968F303003871B88820F47F60C030A3 +:10B2D000B8800E2000F0BEFD0146787961F30410BD +:10B2E00020F0800040F02000787155F82400406D77 +:10B2F000007A0028F87902D040F0080001E020F040 +:10B30000080020F00400F871B179F01D00F04AFC4B +:10B31000002866D155F82410B079496D487255F867 +:10B320002400D6F80710406DC0F80A10B6F80B10CC +:10B33000C18155F8240000E08AE0406D417AF87937 +:10B3400061F38200F87155F82400406DD0F80A10BE +:10B35000F960C089388244E055F824002222343054 +:10B360000321FAF78FF955F8240002213C30FCF74D +:10B370004DF806202AE055F824002222343003211B +:10B38000FAF780F955F8240002213C30FCF73EF82A +:10B3900055F82410496D81F8069055F82400C76BC4 +:10B3A0000E2000F057FD797960F30411797118E0EF +:10B3B00055F82400222234300121FAF763F955F8B8 +:10B3C000240001213C30FCF721F8022055F824101C +:10B3D000496D887155F82400C06B417921F0100146 +:10B3E00041713079012826D0042824D055F8241042 +:10B3F000B07B496D48713079012822D055F824106E +:10B400007088496D4880308855F82410496D08804F +:10B4100055F824107079496D0872012106F10D006C +:10B4200000F008FCA0B155F82410707B496D08713C +:10B430000020BDE8F08755F82410496D81F805908B +:10B44000D9E755F824104FF40060496D4880DBE7D8 +:10B450001220EEE7487A002070B5022604460670F6 +:10B46000012060700D460846F7F706F984F82A00B7 +:10B470002879002100F00F00A07007280AD2DFE829 +:10B4800000F00B1A04090B0907000320A07003E069 +:10B49000A67001E001280ED0A888C0F30710801F15 +:10B4A000C2B2A2721F2A10D805F11E0104F10B00CE +:10B4B000E8F7CAFF00E0A172A8696060A88B20814C +:10B4C0006879C009E070012070BDA172002070BDD4 +:10B4D00070B5C86B14460D46007900F00F000128C6 +:10B4E00003D06078032805D101E0122070BDE07818 +:10B4F0001F2802D900200870F7E70846FFF72EFE44 +:10B50000E86CE278401C211DE8F79EFFE96CE078CA +:10B510000870002070BD70B5507814460D460328A1 +:10B5200002D1E0781F2803D900200870122070BDD6 +:10B530000846FFF713FEE86CE2782130211DE8F79A +:10B5400083FFE96CE07881F820000120287000205A +:10B5500070BD10B5807A1446C043800708D10846F4 +:10B56000FCF7E6FA2046BDE81040022101F0F4BFE6 +:10B5700010BD3EB51225DDE906148DE8320000F05D +:10B5800013F83EBD3EB51325DDE906148DE8320003 +:10B5900000F00AF83EBD3EB51425DDE906148DE83D +:10B5A000320000F001F83EBD2DE9F84308A98046BD +:10B5B000B1E881021E4951F82050B5B3FE2016189B +:10B5C00043F1000338462C6BFCF7C7FD396802468F +:10B5D000487920F080004871E77969F38607E771C0 +:10B5E000A86D877D207967F301002071AF6DBF7D65 +:10B5F00067F383002071607920F004006071207E81 +:10B6000020F0010020761078627E60F305026276F9 +:10B61000A1602846FBF7A6FFCDF80080286B3246D4 +:10B62000001DFAF7BFFABDE8F883FFE70020FAE74C +:10B63000487A002038B50546DDE90404A21843F134 +:10B6400000030095FAF7AEFA38BD0000F8B50646DB +:10B65000DDE906450649A068001DAA18256843F1E2 +:10B6600000030D6464684C640096FAF79BFAF8BD19 +:10B6700000000940F8B50446DDE90610FE25521920 +:10B68000054D0E6843F100032E6449686964009417 +:10B69000FAF788FAF8BD0000000009402DE9F843E8 +:10B6A0008146DDE90858FE201718686D2E6B43F1BE +:10B6B0000004361D0079FCF747FA08481FFA88F1A4 +:10B6C000C162A96A0164E96A41643A462346304688 +:10B6D000CDF80090FAF766FABDE8F883000009405B +:10B6E00038B5074C049954F82110FE240090121923 +:10B6F000086B43F10003001DFAF754FA38BD00004F +:10B70000487A00202DE9F8438146DDE908072549FC +:10B7100051F82050F5B32C6BFE201618E07943F158 +:10B72000000820F07C004830E071207E20F001000D +:10B730002076A889401E81B205F17200EBF7B1FABC +:10B74000617E324660F305016176A86D4346817DD6 +:10B75000207961F301002071607920F004006071AC +:10B76000207E40F040002076A889401E6083A760BC +:10B77000D5F869002061B5F86D00A08295F86F00DA +:10B78000A075787920F080007871CDF80090286B52 +:10B79000001D00E003E0FAF705FABDE8F883002099 +:10B7A000FBE70000487A002038B5074C049954F8AC +:10B7B0002110FE2400901219086B43F10003001DB4 +:10B7C000FAF7F0F938BD0000487A00202DE9F84377 +:10B7D0008146DDE90808304915461E4651F82040EB +:10B7E000F4B3A06D407AFCF7AFF9216BFE202D1861 +:10B7F000C87946F1000620F07C004030C871A06D89 +:10B80000027D087962F301000871487920F0040094 +:10B810004871606C8860087E20F0400040F00100B4 +:10B820000876487E20F03F0027304876676C606BD2 +:10B83000797921F08001797139684A7922F08002A2 +:10B840004A71396809684A7922F080024A7141795F +:10B8500021F0200141713868B84205D0012004E090 +:10B86000FFE70020BDE8F883002040F621120BA17D +:10B87000EAF7BAF839462046FBF774FE0A491FFA80 +:10B8800088F0C862CDF80090206B2A46001D334630 +:10B89000FAF788F9E6E70000487A0020626C65351F +:10B8A000305F6C6C6D2E6300000009402DE9F041A3 +:10B8B000074604460078012510F03F000E46087048 +:10B8C00021784FEA9111717000F1010186F82B1077 +:10B8D00053D06078B07004F10204C10709D0216828 +:10B8E000C6F80310A188A6F8071004F106044FF06B +:10B8F000070581070AD52168C6F80910A18805F156 +:10B900000605A6F80D1004F106042DB2410705D571 +:10B9100014F8011B05F10105F1732DB2010705D5DE +:10B9200034F8021B05F1020531822DB2C10608D59B +:10B9300021887182A17805F10305317504F10304B2 +:10B940002DB280060AD51222214606F11500E8F72D +:10B950007BFD05F1120504F112042DB2B07840060A +:10B9600005D514F8010B6D1C86F827002DB2307830 +:10B97000A84207DA0020BDE8F0810020B07086F808 +:10B98000280004E0401B06F8280FE01BB0700120DF +:10B99000F1E770B504460D461830FFF787FF002821 +:10B9A00007D0A18895F82B00C1F30711884201D870 +:10B9B000012070BD002070BD2DE9F041C7891646F9 +:10B9C0000C46002531462046FCF7EEFA6D1CF61BAE +:10B9D0002468EDB2032DF5D3BDE8F08100B50B4628 +:10B9E000FCF7F1FB0A498B42417804D221F0200197 +:10B9F00041701E2104E041F0200141704FF4967126 +:10BA0000B3FBF1F1028861F30C02028000BD00007B +:10BA1000C4BF030070B50546807801F10204C00779 +:10BA200007D0D5F803002060B5F80700A08004F126 +:10BA30000604A878800707D5D5F809002060B5F876 +:10BA40000D00A08004F10604A878400702D5E87B29 +:10BA500004F8010BA878000702D5288A24F8020B05 +:10BA6000A878C00605D5688A2080287DA07004F1DA +:10BA70000304A878800607D5122205F11501204697 +:10BA8000E8F7E2FC04F11204A878400602D595F824 +:10BA900027002070012070BD10B50121827800239D +:10BAA00042B3D40700D00721940702D501F1060163 +:10BAB00009B2540702D501F1010109B2140702D5F8 +:10BAC00001F1020109B2D40602D501F1030109B264 +:10BAD000940602D501F1120109B2520601D5491CA2 +:10BAE00009B290F82820114409B23F2909DD0370FA +:10BAF000002010BD0370012180F82B1080F8283041 +:10BB000006E00170491C80F82B10891A80F82A1071 +:10BB1000012010BD2DE9F041C76CC46B002F19D076 +:10BB200000264FF0FF088CB107EB46152A781F2A34 +:10BB30000CD8691C04F10C00E8F786FC2978A08871 +:10BB4000891D61F30B10A08085F800802468761CA5 +:10BB5000022EE8DBBDE8F08170B51446054631B130 +:10BB600001290DD0022902D003290DD108E00C488B +:10BB70000A49054605F063FB30B92246002107E07B +:10BB8000064905F05CFB08B1122070BD2246012178 +:10BB90002846FBF731F9002070BD0000054802007F +:10BBA0006476002010B5C3780268002463F31F6236 +:10BBB000838849B113F4404114D0B1F5804F21D0AE +:10BBC000B1F5404F2ED104E0184905F038FB04468A +:10BBD00027E0C3F30D00104324D0521C24D14FF6AC +:10BBE000FF701BE0C3F30D01114305D0521C04D1BB +:10BBF000A3F57C51FF3900D101240D4905F01FFB4D +:10BC000080B90EE002F07F40C3F30D01084309D074 +:10BC1000FF20B0EB126F07D147F6FF70834201D0CF +:10BC200002E00CB1122010BD002010BD054802003A +:10BC30006476002070B502780024D20801D0012972 +:10BC40001BD00023002907D817E0042B04D1027869 +:10BC5000520901D0262410E00578002225FA02F6C8 +:10BC600006F00106521C3444D2B2E4B2082AF5D3DD +:10BC70005B1C401CDBB28B42E7D3204670BD00004A +:10BC8000094991F8EC2062B1420901EB820100F010 +:10BC90001F02D1F8F01001209040014201D0012094 +:10BCA0007047002070470000307500208C2101484B +:10BCB000E8F7F1BB94760020134A10B5D17804461A +:10BCC00002291FD09078B8B10020907001B110887F +:10BCD0000221D170FFF79BFAFAF7E2F90B4850F80E +:10BCE0002400D0F89000FAF79DFF20022146BDE81D +:10BCF00010400122FCF7ACBA012903D1BDE8104085 +:10BD0000FFF73CBA10BD000046040020487A00202E +:10BD100070B50446E8F786FB1449C2B214488B7824 +:10BD2000C55C0B7865F31F1323708B780D78C35CAB +:10BD30001B0143EA151363708B78C35C104663F3F1 +:10BD40001F10A0700A4B48789B1C185C000140EA49 +:10BD50001210E07048780322401CB0FBF2F302FBA3 +:10BD6000130048700878401C087070BD29760020C8 +:10BD70000048020070B5002415460E4608280FD270 +:10BD8000DFE800F00E04060E08180A0CF02411E09B +:10BD9000AA240FE0FF240DE00F240BE0552409E056 +:10BDA000082801D2012000E0002040F20B2205A16A +:10BDB000E9F71AFE224631462846BDE87040E8F70A +:10BDC00063BB0000626C655F6C6C6D5F7574696C61 +:10BDD0002E63000070B51C461546064611B10129B8 +:10BDE00012D10DE00D490E4805F029FA60B9002086 +:10BDF00020700C48D0F834112960B0F838010AE0FE +:10BE0000064905F01CFA08B1122070BD012020700F +:10BE100030682860B088A880002070BD0548020006 +:10BE2000647600203075002002490A680260496883 +:10BE300041607047743E020005490122824091F83A +:10BE40004611114201D001207047002070470000C8 +:10BE500030750020064900F0070201EBD0010120F7 +:10BE600009789040014201D00120704700207047BE +:10BE7000743E020000EBD10001F0070200780121BE +:10BE80009140084000D0012070470000044991F81B +:10BE90004611884301D00020704701207047000000 +:10BEA000307500202DE9F041154C00250126804613 +:10BEB00016FA01F6C5EBC507E05D68B13919491CF2 +:10BEC000404605F0BCF9A8B1C5EBC500205C304286 +:10BED0000DD00020BDE8F081C5EBC5000119D8F8F0 +:10BEE000002041F8012FB8F804008880E05D30435D +:10BEF000E05503E06D1CEDB2142DDBD30120E9E722 +:10BF0000947600200021417181714FF400624280DB +:10BF1000028007220271034A92F84521027441749B +:10BF2000704700003075002005480021102200F8FD +:10BF3000011C4173428008228280417070470000DA +:10BF4000767500202DE9F0410D4D0F460646002480 +:10BF500055F8240048B190F82810B14205D13C3082 +:10BF600006223946E8F7A9FA38B1641CA4B2082CB5 +:10BF7000EED34FF6FF70BDE8F0812046FBE70000EE +:10BF8000EC7A00202DE9F041114E0D46174656F887 +:10BF90002540804694B16069F6F73FF880B10020F3 +:10BFA00046F825006069F5F7A5FD0021404601F03F +:10BFB000D3FA2046BDE8F04100F046BF002102E080 +:10BFC000277002214046BDE8F04101F0C5BA0000EB +:10BFD000EC7A00200649002051F82020002A05D0E4 +:10BFE000401C80B20828F7D34FF6FF70704700005E +:10BFF000EC7A002030B591F8284018320023022C4A +:10C0000025D391F82A4022441DE000BF12F8014BCD +:10C01000002C1CD023445B1CDBB29D4217D312F8CA +:10C02000015B282D0DD1156840F8425F9588858009 +:10C030009579857110F81E5C45F0010500F81E5CCD +:10C0400042382244521E91F828509D42DED830BD1D +:10C0500070B5064616480D4650F82500816E19B198 +:10C060003E224A70846E0FE00F20FFF709FEB8B140 +:10C070000323324605214FF0041001F08DF8102102 +:10C080000170A0F801500446012229463046FFF70E +:10C0900079FF002C0BD02046BDE8704001F0DCB9E0 +:10C0A00029463046BDE870400122FFF76BBF70BDE6 +:10C0B000EC7A002010B500220449042000F090FE24 +:10C0C000BDE8104020210248E8F7E5B984480200A5 +:10C0D000EC7A002070B504461A4D042000EB0426CB +:10C0E00055F8240018B30020382217A1E9F77CFC8A +:10C0F0000021702001F002FB45F8240000281FD029 +:10C100007021E8F7C8F955F82400124A1249C48092 +:10C1100055F824303046F5F795FC55F82410486161 +:10C1200038B13046BDE87040012101F015BA012058 +:10C13000DAE7E1B23046BDE870400122FFF722BFE6 +:10C1400070BD0000EC7A0020626C6535305F6C6C6D +:10C15000702E630065C30100A9C301002DE9F04101 +:10C16000884601781E461746C90702D00024174D9D +:10C1700026E041785A7CB1EB121F0AD18178B9428E +:10C1800007D1C11C404605F05AF810B10120BDE8A6 +:10C19000F0810020FBE700BF05EBC401727C91F841 +:10C1A000A400B0EB121F09D191F89D00B84205D14F +:10C1B0009E31404605F043F80028E7D1641CE4B204 +:10C1C00095F89C00A042E7D8E3E700003075002016 +:10C1D00070B51546114A002492F8D800430701D5DE +:10C1E0000C2411E040F0080082F8D80008880828E4 +:10C1F00012D20B4951F8201071B1C1B2042202EBE6 +:10C2000000200122FFF7BEFE224642F246012846E8 +:10C21000EEF72AF9002070BD4224F5E730750020C2 +:10C22000EC7A00202DE9F0410D461D49C2F30720AC +:10C23000904651F82040002724B314F1240621D061 +:10C24000A87810B36879022800D21227082800D9EC +:10C2500011276169496B11F8222F60F306020A70F9 +:10C2600060696A79A91D406B6C30E8F7EDF8606988 +:10C27000E978406B10F8202F61F34512027028799D +:10C2800018B901E0422701E0FF20B0702B883A4640 +:10C2900042F253014046EEF7F9F80020BDE8F08184 +:10C2A000EC7A002010B51346C2F30720897800F01D +:10C2B000B5F9024642F259011846EEF7D5F80020CA +:10C2C00010BD00001046C2F30721044A10B552F811 +:10C2D00021200AB1FFF7BCFE002010BDEC7A00203F +:10C2E0002DE9F0471948C2F30727914650F8274037 +:10C2F0000E4691F80880484600F0B0FE050022D0B6 +:10C300000CB3616930684A6B90421CD1B8F1170FC9 +:10C3100008D040F283320EA10020E9F765FB022D20 +:10C3200008D010E03046F5F7F1FC30466169F5F7CA +:10C330003FFDF4E7207808B1012200E000223946F1 +:10C340004846FFF71FFE0020BDE8F087EC7A00208A +:10C35000626C6535305F6C6C702E63000020704736 +:10C36000002070472DE9F041CD88042000EB05271F +:10C3700091F824000C46810702D594F8306000E063 +:10C38000012620F0020084F82400384600F066FE02 +:10C39000012807D1EAB2334621463846BDE8F041CC +:10C3A00000F022B8BDE8F08138B514460546927910 +:10C3B0000B46042000EB0221A88858B10020009011 +:10C3C000204600F03BFB00280CD12846BDE8384051 +:10C3D000F5F723BE009313460A462146284600F08F +:10C3E00093FBF0E738BD00002DE9FF4F48690C468C +:10C3F00001F12407466B474985B016F8040F4FF04A +:10C400000008C0F381001D4631F8100087F8038052 +:10C4100000F1EA09B87808B1012100E00021606963 +:10C42000383000F07BF8A089C246284480B2A08151 +:10C430002189DFF8E4B029442181E289216902FBE6 +:10C4400000112161D4E91423A0FB02C508FB0252AC +:10C4500000FB0325D4E916021CEB000804F11800C8 +:10C46000554104903878C1070DD02189B4F8472090 +:10C47000914208D320F00100387004F1420106F126 +:10C480001800FAF7C4FC94F82510307861F38300A3 +:10C49000307021890498EAF704FC717D012260F371 +:10C4A0000501717530462169FBF772F820696FF05C +:10C4B000E90109EB4002CDE9002BB8EB000265EB86 +:10C4C0000A00CDE90246521840F1FF336069F5F7E2 +:10C4D0008BFD6069406C18B1012009B0BDE8F08F98 +:10C4E000D4E9142012EB08084541E1892069084489 +:10C4F0002061A089401C80B2A0812189491C218132 +:10C50000F9898842AED907990598FFF7A1FD002067 +:10C51000E3E70000C63E02002DCC010070B50568BF +:10C520000E462C46204616B1F9F724FB01E0F9F738 +:10C5300013FB2468AC42F5D170BDF8B504460D4636 +:10C5400090F8270094F82610164688421AD2142034 +:10C55000FFF796FB002815D0E879000612D5A06BEE +:10C5600010B1297C8909417194F827002B46401CA1 +:10C5700084F82700009660692289E188406B001DDD +:10C5800000F064F8F8BD00002DE9F04788468C6B98 +:10C590008146998892F82B00C1F3071188422DD269 +:10C5A000091A1833CDB2C61826E0E079C0F1F701B8 +:10C5B000CFB2BD4224D904F1080108443A463146BD +:10C5C000E7F742FFF720E0710120A071E81BC5B238 +:10C5D0003E44FF234A4605210F4800F0DDFD074693 +:10C5E00020683860606878600020F871404600F08C +:10C5F00093F83C46C8F83870002DD6D1BDE8F087D6 +:10C60000C1B204F1080008442A463146E7F71CFF8E +:10C61000E0792844E071F1E70500040008280DD214 +:10C62000094A52F8200048B1243007D00029017887 +:10C6300006D021F0040101700020704742207047AD +:10C6400041F00401F7E70000EC7A00202DE9FC5FDF +:10C650000746007F0C9C1D4693468A46800601D4FF +:10C66000022600E00126B87F00F07F08287C8109BF +:10C6700008D002214FF00008B1EB901F01D1022633 +:10C6800000E0012600F01F00314605F0DAF981468E +:10C69000012000F0C1FB002837D10D2101EB490337 +:10C6A000224605211A4801F0ABF804002DD01520D0 +:10C6B0002070A4F801A0A4F80AB0A87900F03F0007 +:10C6C000E0702846F5F7D8FF00EB80004000A0801E +:10C6D00010486837334690F8FC02A071287C4A461F +:10C6E0008009E0712672287AC0F3C000607284F875 +:10C6F0000C90CDE90078696904F10D0005F0A8F906 +:10C700002046BDE8FC5F00F0A7BEBDE8FC9F00002E +:10C71000060004003075002070B50546846B0E20BD +:10C72000FFF7AEFA38B195F82400400703D420464D +:10C7300000F092FE03E0A4F1180000F041FC00209C +:10C74000A86370BD816B002903D002228A71FFF7B4 +:10C75000E3BF70472DE9F04F8DB00546DDE918A91C +:10C76000887D394FDDF858B00C4680064FF496733B +:10C7700001D41E2000E01846B4F815104FF6FF78DB +:10C78000C1F30C014143002689F80060607820BBAA +:10C79000A0785FEA806C20D55FEA007C1DD59942C5 +:10C7A0001BD3A978FF2915D1C00716D0507923468D +:10C7B000C009A870D4F80300C5F80300B4F8070056 +:10C7C000A5F807005079E11CC209D7F88800FFF7E7 +:10C7D000C5FC10B1AA78012A03D940460DB0BDE8C6 +:10C7E000F08FD7F88810B4F8177009314B88098892 +:10C7F000D800B0FBF7F00A2780B20A2900D23946E8 +:10C8000009390746884200D239460DF1680E89B2CF +:10C81000BEE880110DF1180ECDF814A0AEE8CB11D2 +:10C82000208A617CED1CCDF80090CDE90125C0F394 +:10C830000B000909CDE903105A4604F11500179BB6 +:10C8400000F004F8CAE70000407500202DE9F05F11 +:10C8500092469B460546DDF858800A9FFFF7BAFBD3 +:10C8600006464FF0010908283DD2FFF733FC4D483A +:10C8700050F8264087F80090A4B30420002200EB73 +:10C8800006293A701498207104F124000F99417020 +:10C890000B9901710C9904F1500C0B68E3638988C2 +:10C8A000A4F840100D9941710E99E185698840F214 +:10C8B000E24359434FEAE173ACE80A0C1099C18195 +:10C8C0001199818112990182297801721599C1F318 +:10C8D0004003017863F3820101706878800607D411 +:10C8E0001E2007E001E087F800903046BDE8F09F89 +:10C8F0004FF496702988C1F30C014143D4E91630F6 +:10C9000059185041C4E916106A78520606D54FF4FA +:10C910001612891840F10000C4E91610287A41095E +:10C920006888F9F7DDF9E081298A218161815FEA70 +:10C93000080100D0084620616069426B6868121DDA +:10C940009061287A117F60F304011177B5F80D002A +:10C950001082E87B9074D5F80900D060D5F80910F2 +:10C96000183204F11800EAF7BAF91398F2B2C3B218 +:10C9700021464846FFF738FD58B168880A2100EB88 +:10C98000400001EB4000C2084946074800F02EFE77 +:10C99000ABE7F1B201224846FFF7F4FA4FF6FF7019 +:10C9A000A4E70000EC7A0020080004002DE9F04F15 +:10C9B0008DB00446DDE9185AB4F80510B5F8030047 +:10C9C0009046C000B0FBF1F086B2B5F801200A2015 +:10C9D000DDF85CB0994631460A2A00D20246093A8F +:10C9E000914200D311468FB2E7F71CFD697901230C +:10C9F0008B4007219943CDE909B14FF0000CCDE9F7 +:10CA00000BCAB5F80310A27ECDE90771CDE9052662 +:10CA1000617E80B201F00F02CDE9032004F11B0317 +:10CA2000C1F30011CDE901131698009042464B4620 +:10CA3000E01CFFF70BFF0DB0BDE8F08F2DE9F041D2 +:10CA40008CB01D46129E88460446002706B13770FA +:10CA50006879800656D5287A10F02E0F52D1ECB3A3 +:10CA600069461846FEF795FFC0B342462946204660 +:10CA7000FFF763FD94F82B0068B19DF802000007F2 +:10CA800009D5BDF81000E18DC0F30B00884239D004 +:10CA9000E08584F82B700EB1012030702A4669467B +:10CAA0002046FFF7A7FAA66BC6B12846F5F7E4FDC6 +:10CAB00030719DF80200400602D59DF82700F07005 +:10CAC0002B466A4621464046FFF75EFD9DF8020070 +:10CAD000C0060CD4A06B8771204600E012E0FFF77F +:10CAE0001BFE14F8240F40F0020020700AE0BDF88D +:10CAF0001300C00403D001200CB0BDE8F081204633 +:10CB0000FFF720FE0020F7E72DE9FF4F83B04FF03D +:10CB10000005109E9A460C0083468DF8045009D0FB +:10CB20000846FFF70FFE7079800603D5307A10F0C3 +:10CB30002E0F03D0002007B0BDE8F08FA84606F105 +:10CB400018002561FBF725FB0546A06E4FF0010993 +:10CB5000E8B100271A2245B1297823794FEA911CC0 +:10CB600009FA0CF10B4203D104E02179090701D540 +:10CB700042700127A06E00F06FFCC4F8688037B1E6 +:10CB8000012251460598FFF7FDF90120D3E725481A +:10CB900090F8EC1019B1B0F8F000400405D431461B +:10CBA0002046059AFFF7C9FCC4E7012000F034F9DC +:10CBB00008B1002005E0FF2305211B48059A00F07D +:10CBC0001FFEA0630028B6D00F210170A16B7F204B +:10CBD000A1F801A0A16BC87015B12878800900E008 +:10CBE000FF20A16B33465246487184F82B9001A870 +:10CBF000009020460599FFF721FF05469DF80400A7 +:10CC000068B10948A28EC01C059900F0EFFCDBE971 +:10CC10001201C4E9160120896081A4F80C8028461D +:10CC200089E70000307500200500040038B5014692 +:10CC3000EA240598121943F100030091F8F7B2FFB6 +:10CC400038BD00000F4AD06FD2F8641180B201F4F1 +:10CC5000704140EA01100C490023B0F5702F0968BB +:10CC60000CD0B0F5804F00D80846D367D2F86411D5 +:10CC700021F47041C2F8641140680047C2F8643181 +:10CC80000846F9E700000440B44000000A460146A7 +:10CC90000148E8F75FB90000703D020070470000EE +:10CCA00010B50C46014604A0E8F74FF92046BDE850 +:10CCB0001040102101F06AB8252D367320000000C5 +:10CCC00008B572B64FF480410020E8F7CFF8154957 +:10CCD0000020087004F0F8FC00221349104604F00C +:10CCE00061FC00221149012004F05CFC114910484C +:10CCF00008600421684600F097FF0098E7F79CFB66 +:10CD0000EEF78BFCE9F72AFEFFF79CFF0A48007854 +:10CD1000800603D5082109A004F092FD00F0CCFFA5 +:10CD2000FEE700000E040020116E000095B6000022 +:10CD3000FF340200140400201C0000206C6F6164AA +:10CD40005F6170700000000010B50446E7F77AFEDE +:10CD500004480122A240016891430160BDE81040EF +:10CD6000E7F77ABEA47A00202DE9F041154D0E4672 +:10CD700007462C69002C23D00A4601462046EAF7D4 +:10CD80000BF805F1100178B10846E9F745FF2D6968 +:10CD9000284600F07DFB75B1E86800F0A3FC50B1B7 +:10CDA000032000F0ABFB06E033463A46064800F0AD +:10CDB00052FA040004D02046BDE8F04100F044B827 +:10CDC000BDE8F0816C7A0020996D0000C268C868E7 +:10CDD000101AB0F1004F01D30120704700207047B6 +:10CDE00070B516460C460546E7F72CFE002303E017 +:10CDF000A068C6545B1C9BB2E0899842F8D80549EC +:10CE000001EB850044600878401C0870E7F724FEB9 +:10CE1000002070BDC07A0020054901EB4000418D23 +:10CE2000008E814201D90120704700207047000028 +:10CE30006C7A002030B4A0F1180403B1A360C4E9F7 +:10CE4000031230BC00F008BB2DE9F0475FEA000890 +:10CE50004FF000066FD0A8F104056988A1F50340E2 +:10CE6000383801D1012000E0002040F2171250A113 +:10CE7000E8F7BAFD4FF20F0068802F880024E7F72B +:10CE8000E1FDDFF8389100BF09EB860209EB4601AE +:10CE90009269898C904508D31144414505D309EB2B +:10CEA000860084692CB1012004E0761CF6B2032EC2 +:10CEB000EAD300204FF49A723DA1E8F795FDA04512 +:10CEC00001D9012000E0002040F2351238A1E8F736 +:10CED0008BFD09EB4606708DB84201D3012000E0BE +:10CEE00000204FF49B7232A1E8F77EFD708D4AF26C +:10CEF0005A58C01B7085002640F23D1949E06189EF +:10CF0000414501D1012000E000204A4628A1E8F770 +:10CF10006BFD20892044A8421AD12089384480B270 +:10CF20002081256801198D423CD12989084420813E +:10CF300015B1012001E039E0002040F24B121CA1A4 +:10CF4000E8F752FD286820602868F8B1446029E0BD +:10CF5000A5421CD20EB1012000E000204FF4AC72BB +:10CF600013A1E8F741FD35606E60E819A5F80A8065 +:10CF7000A04208D120682860206800B1456020895F +:10CF8000384428810EE02C6065602F810AE0264637 +:10CF90002468002CB3D100203560C5E900062F813C +:10CFA000A5F80A80BDE8F047E7F756BDBDE8F08771 +:10CFB0006D73735F6D656D2E630000006C7A0020E9 +:10CFC000FFF742BF0148006870470000A47A0020C4 +:10CFD0002DE9F0410025CCB20746C1F30B26072C02 +:10CFE00001D2012000E00020932218A1E8F7FCFC08 +:10CFF000194800EB840044680CB1012000E00020D7 +:10D00000972212A1E8F7F0FCE089B04201D9012093 +:10D0100000E0002098220DA1E8F7E6FCE089B0428C +:10D0200010D9206840B1A168895D00EBC101384684 +:10D0300000F0F8F9050005D1616819B1384600F033 +:10D04000F1F905462846BDE8F08100006D73735F75 +:10D050007461736B2E630000C07A002070B5C4B297 +:10D06000C0F30B25072C01D2012000E0002040F284 +:10D0700035120FA1E8F7B8FC104800EB84004468B3 +:10D080000CB1012000E000204FF49D7208A1E8F7E8 +:10D09000ABFCE089A84201D9012000E0002040F269 +:10D0A0003B1203A1E8F7A0FCA068405D70BD000042 +:10D0B0006D73735F7461736B2E630000C07A002020 +:10D0C00010B5E7F7BFFC074C0120C4F8380300BFD8 +:10D0D000D4F8380310F0010FFAD1E7F7BDFCD4F80B +:10D0E0002C0310BD0000094010B538210548E7F7B2 +:10D0F000D2F900F009F800F00DF8BDE8104000F09A +:10D1000019B800006C7A00201C210148E7F7C3B968 +:10D11000A47A002010B50549022000F0CDF9BDE841 +:10D1200010402C210248E7F7B6B9000029D30100CE +:10D13000C07A00200149032000F0BEB9CDD3010020 +:10D140002DE9F041046890460D46074600263CB1A3 +:10D15000214628464246904718B926462468F6E7F5 +:10D160007D602C6016B13560BDE8F0813D60FBE765 +:10D1700030F8020CA0F50341383901D00120704786 +:10D180000020704710B500F0B9FA002802D1F9F775 +:10D1900046FE002010BD000010B500F031FB040079 +:10D1A00001D0012000E00020232202A1E8F71CFCAE +:10D1B000204610BD6D73735F6D73672E63000000B2 +:10D1C0002DE9F0410746DFF84C800E46C81C08EBFD +:10D1D000870420F003011546A161E7F733FC7019BD +:10D1E00020F00301A069091A0181A1694AF25A508D +:10D1F0004881A16900200860A169486008EB4700E8 +:10D20000A908858401EB41010186BDE8F041E7F7FB +:10D2100023BC00006C7A00202DE9F04190460E46B8 +:10D22000074600250C6811E041462046B84758B132 +:10D2300020680DB1286000E03060206810B1002047 +:10D24000206005E0756003E025462468002CEBD1E2 +:10D250002046BDE8F0812DE9F047984691460E46FC +:10D26000074600250C6812E0424649462046B8476A +:10D2700058B120680DB1286000E03060206810B11E +:10D280000020206005E0756003E025462468002C3E +:10D29000EAD12046BDE8F08770B50C4D064632460F +:10D2A00029460B48FFF7B8FF04000DD0E7F7CAFB8B +:10D2B0000648214608380022E9F77EFCE7F7CCFB58 +:10D2C000022000F01BF9EAE770BD0000747A00202C +:10D2D0005BB6000070B50F4C2068002819D0B0FA7A +:10D2E00080F0C0F11F00C5B2062D01D2012000E080 +:10D2F0000020A32208A1E8F777FB04EB8505686806 +:10D3000000B10120A42204A1E8F76EFB6868804701 +:10D31000E2E770BDA47A00206D73735F70726F6373 +:10D320006573732E6300000070B5E7F78BFB23482D +:10D33000E9F772FC0446E7F78FFB200025D0FFF7E2 +:10D3400017FF80F00100C8221DA1E8F74DFBD4E9CA +:10D350000201FFF73DFE050000D00120CD2218A1FB +:10D36000E8F742FBBDB104F1080004F118010DC853 +:10D37000A84710F0FF000ED0012806D002280ED0DA +:10D38000E2220FA10020E8F72FFBE7F75BFB0B4839 +:10D39000006858B10DE02046FFF712FEF5E7074898 +:10D3A000214608300022E9F707FCEEE70220FFF7EC +:10D3B000CBFCBDE87040E7F74FBB00006C7A002063 +:10D3C0006D73735F7461736B2E63000070B5144DE1 +:10D3D0000320FFF7B9FC2C692CB1E068401E00F077 +:10D3E00081F928B10CE0BDE87040002000F050B891 +:10D3F000204600F04DF8E06800F074F900280DD0E8 +:10D4000007481030E9F708FC0446FF22D4E901017F +:10D4100000F036F82046FFF717FDD9E770BD000091 +:10D420006C7A002030B58B88A3B100224FF6FF75CF +:10D430000EE00C6854F83240844201D0AC4205D171 +:10D440000868042101EBC201405830BD521C92B261 +:10D450009342EED8002030BD10B5A0F11804E7F7D4 +:10D46000F1FA064821460022E9F7A6FBE7F7F4FAAD +:10D47000BDE81040022000F041B800006C7A0020A6 +:10D4800010B50023FFF788FEBDE81040FFF7E4BFAA +:10D4900068B1C1680748C0F84013016DC1F380212D +:10D4A000002906D1C16D41F48061C165012001F000 +:10D4B000ABBC70470000094070B503250E4604461A +:10D4C000062802D20EB1012000E00020462206A16B +:10D4D000E8F78AFA062C04D20748002500EB8400FE +:10D4E0004660284670BD00006D73735F70726F6395 +:10D4F0006573732E63000000A47A002070B50546A2 +:10D500000F48006810F0FF0F01D0012400E0002454 +:10D51000062D01D2012000E000205C2209A1E8F7DD +:10D5200063FA0CB9E7F78EFA0A480122AA400168AB +:10D53000114301600CB9E7F78FFAE9F731F970BDD3 +:10D5400004ED00E06D73735F70726F636573732E2B +:10D5500063000000A47A00202DE9F041C4B20E4619 +:10D560000746C0F30B25072C01D2012000E0002064 +:10D5700040F2131219A1E8F737FA1B4800EB8400B8 +:10D580004468E089A84201D9012000E000204FF45E +:10D590008C7212A1E8F728FA0CB1012000E00020FB +:10D5A00040F219120DA1E8F71FFAE089A84213D939 +:10D5B000A068441901D0012000E0002040F22112AF +:10D5C00006A1E8F711FA2078B04205D02670384657 +:10D5D000BDE8F041FFF760BEBDE8F0816D73735F99 +:10D5E0007461736B2E630000C07A002010B51201C5 +:10D5F00000F018F807480069002809D00068401CAE +:10D6000000D00120BDE81040FC2203A1E8F7ECB9EE +:10D6100010BD00006C7A00206D73735F74696D65D6 +:10D62000722E63002DE9F04115000E4607460ED01C +:10D63000B5F1004F01D36FF000450B461649024685 +:10D6400088461648FFF707FE040002D008E00125CF +:10D65000F3E701211020FFF795FD0446C4E90176A8 +:10D66000FFF72EFD05440E4A21464046E560FFF7D0 +:10D6700067FD094810380069A04201D1FFF708FF93 +:10D68000284600F02FF8002804D0BDE8F041032020 +:10D69000FFF734BFBDE8F0817C7A0020996D00006F +:10D6A000CDCD010010B5FFF78DFC08B1002010BDF5 +:10D6B000012010BD0A4810B504696CB1FFF700FDE8 +:10D6C000E168814203D2401A401E4FF6FF71081AEA +:10D6D00040F27121484310BD4FF0FF3010BD0000F3 +:10D6E0006C7A002010B50446FFF7EAFC001BB0F18D +:10D6F000004F01D2012010BD002010BD2DE9F35FC5 +:10D70000C01C002420F00305083527460C2D00D24C +:10D710000C25E7F797F9DFF8D8B0019839180320FE +:10D72000B1FBF0F200FB12180BEB880086690EB11A +:10D73000012000E000208D222EA1E8F755F94AF2E1 +:10D740005A5A05F10C0916E07089504501D10120A3 +:10D7500000E00020922227A1E8F746F93089A8428C +:10D7600008D3484501D2716821B114B121898142A1 +:10D7700000D934463668002EE6D11CB120894845D0 +:10D7800000D205467F1CFFB2032F02D2002CC4D06A +:10D7900000E08CB12089A84213D1606800B101205B +:10D7A000BC2214A1E8F720F9D4E900010860206840 +:10D7B00058B16168416008E0E7F74EF90020BDE824 +:10D7C000FC9F401B80B22081044448F23830258001 +:10D7D00060800BEB4800241D418D29444185E7F70B +:10D7E0003BF90120EE2203A1E8F7FEF82046E6E728 +:10D7F0006C7A00206D73735F6D656D2E63000000A1 +:10D800002DE9F0410E4607461C461546012103F15D +:10D810001800FFF773FF00280CD000210160C0E959 +:10D820000454C0E9027600F1180521462846E6F7BF +:10D8300032FE2846BDE8F08170B50A4D686D40069D +:10D840000FD52C6E4020E9F79FFA286EA04328667A +:10D85000002C06D004480078400602D5204603F08C +:10D860008BFF70BD000009401C0000202DE9F04F27 +:10D870004FF00009DFF87CB15F4E8DB042F22C58BA +:10D88000CA46746D45462C4071D02046E9F77CFAB3 +:10D890000027A846A00602D50120E8F799FFA004BA +:10D8A00001D5F9F7E7F960077AD5D6F80C01002819 +:10D8B00076D040F080452D1F049595F882008DF8B4 +:10D8C000180095F826008DF81900A86F0590686F6C +:10D8D000B5F88220C3B28146D1B2032B02D0042B0B +:10D8E0002DD124E0052906D016291CD017291AD0DD +:10D8F000182924D117E0DBF838100291097901F0DA +:10D900000F0107291BD102994979890617D5C6F855 +:10D910000CA1DBF84000F9F785F936480299103080 +:10D92000F6F7AAF81CE0C6F80CA1E86F16E0334938 +:10D93000C9F30B2051F8200008B1172A0BD04A4632 +:10D9400004A94FF40030F9F715FA47B395F87400BD +:10D9500003280FD10CE0C6F80CA14069F4F746FA91 +:10D9600001274A4604A97804F9F704FAEEE73DE0F6 +:10D97000F6F7E6F89FB1E00512D4756D05EA0805E3 +:10D980002846E9F701FA42F2040084432C434FF49D +:10D9900098721BA1C4F30020E8F726F87AE7FFE7A6 +:10D9A000600502D50320FFF7A9FDE0057FF569AF0B +:10D9B000CFB10498B0F86800ADF81C000498B0F836 +:10D9C0006A10ADF81A109DF81900814203D2ADF823 +:10D9D0001A00ADF81CA04A4604A94FF00210F9F74E +:10D9E000C9F96006E2D5F8F793F94AE70DB0BDE84A +:10D9F000F08F00003075002000000940EC7A002014 +:10DA00006474626C652E630000210148EDF7C2BDAD +:10DA1000E804002001210148EDF7BCBDE804002026 +:10DA200002210148EDF7B6BDE804002003210148BA +:10DA3000EDF7B0BDE804002004210148EDF7AABDD0 +:10DA4000E804002005210148EDF7A4BDE80400200A +:10DA500006210148EDF79EBDE8040020072101489A +:10DA6000EDF798BDE804002008210148EDF792BDCC +:10DA7000E804002009210148EDF78CBDE8040020EE +:10DA80000348016841F0200101600120FFF736BD25 +:10DA9000000008400A210148EDF77CBDE8040020A1 +:10DAA000A0F13001092901D808467047A0F16101B1 +:10DAB000052901D857387047A0F14101052901D83F +:10DAC000373870474FF0FF3070470000064A00209B +:10DAD0000146126802EB81035B6903B1401C491CDB +:10DAE0000829F7DB70470000BC37020004480168D2 +:10DAF000044A11430160002211460620EDF754BD8F +:10DB0000040007400100200070B5154613460E467C +:10DB10000A4604460121ECF7A5FF022C07D0042C8D +:10DB20000BD129463046BDE87040E9F7FDBA2946D9 +:10DB30003046BDE87040E7F773BE70BD10B50446CF +:10DB4000EEF774FD0146E08A814203D2BDE8104041 +:10DB5000EEF76CBD10BD03F00DBD00000A46014696 +:10DB600021480B2910D2DFE801F0061013201728F6 +:10DB7000383033353B001D48016812B141F00101D6 +:10DB800001E021F0010101607047D0B203F0ECBC6C +:10DB90001749104603F0CCBD1648016812B121F0B8 +:10DBA0008051F0E741F08051EDE7016812B141F496 +:10DBB0000071E8E721F40071E5E7016812B141F472 +:10DBC0008061E0E721F48061DDE790B203F0E4BC1E +:10DBD000094800E00948026070471046EFF7E4BBCF +:10DBE000D0B2EFF7DBBB0000700104400000002062 +:10DBF0001D1802006C0004402404002028040020AA +:10DC000070470000034909680160034909684160E1 +:10DC1000704700009000002094000020F8F7E0B961 +:10DC200000487047F034020089B2F6F7EDBB0000FF +:10DC30000149086070470000140400200FB410B5BB +:10DC400003A90298E7F776F910BC5DF814FB000011 +:10DC5000034AC2E90001012201490520EDF7A4BCF5 +:10DC600014000020E6F7DEBB18B1012806D0002022 +:10DC700070470348006800F48000704703F06EBCF2 +:10DC80008800044002480068C0F303207047000089 +:10DC90006401044072B6BFF34F8F05480168054A1E +:10DCA00001F4E06111430160BFF34F8FFEE7000014 +:10DCB0000CED00E00400FA0510B5E9F777F8BDE8CF +:10DCC000104004F083BA0000034B43F8301003EB1C +:10DCD000C000426070470000A004002070B50C46F0 +:10DCE0000A490D560A4941F8304001EBC000426034 +:10DCF0002846E7F77BF828461CB1BDE87040E7F7F7 +:10DD00008DB8BDE87040E7F77DB80000F43402003C +:10DD1000E804002001490870704700000E0400204C +:10DD200001490860704700001004002001490860A4 +:10DD3000704700002004002003F03EBC084940EA80 +:10DD400001020849CA67D1F864214FF4704322F4F4 +:10DD5000704203EA10100243C1F86421FFF79AFFF2 +:10DD60000000FFFF00000440034A1278920602D52B +:10DD700089B203F065BD70471C00002002490A68A3 +:10DD800060F30B220A6070476401044070B50D1EF9 +:10DD900006460DDD002404E0315D06A0E7F7A6F895 +:10DDA000641CAC42F8DBBDE8704004A0E7F79EB805 +:10DDB00070BD000025303258200000000A0000002D +:10DDC00070B51D46144601280BD002280DD004283A +:10DDD00009D0FC2815D1BDE87040114609A0E7F72D +:10DDE00085B80BA005E00CA003E009B10CA000E091 +:10DDF0000DA0E7F77BF829462046BDE87040FFF705 +:10DE0000C5BF70BD4C4F47202D2D2025730A000043 +:10DE1000434D44203D3E2000455654203C3D2000CB +:10DE200041434C203C3D200041434C203D3E2000DE +:10DE300088B0EDF701F80021ECF752FFEEF7A0FAF9 +:10DE400001F01CFF002211460120EDF7ADFBEAF7BF +:10DE5000B5FD0120EDF73EF8064D4FF0FF342246A8 +:10DE60006946A86804F052FE0128F8D16846E6F732 +:10DE700051FEF4E700000020FEB50646082801D355 +:10DE80000020FEBDEBF71CFA0028FAD1E8F738FDB8 +:10DE90000400F6D07821E6F7FEFA1720A681E0828A +:10DEA00000250D482576257040F826400B4800785F +:10DEB00078B9A689EEF7BAFB02218DF80810ADF803 +:10DEC00009000095032302AA042130460195EEF7CC +:10DED000E3FE2046FEBD00005C690020E800002053 +:10DEE00070B5FFF7C9FF04001AD0A1890DA0E7F7AC +:10DEF0002DF804F1600024670546E8F7FBFD224693 +:10DF000013492846E8F72CFE47F2305240F281418F +:10DF10002846E8F70DFE2846E8F7DCFD204670BDF0 +:10DF2000002070BD4741545420636C69656E7420B5 +:10DF300074696D656F75742073746172742C2068D8 +:10DF4000616E646C65203078253032780000000006 +:10DF5000959000002DE9F041184C0F460546E66803 +:10DF60002068001D03F084FE38B9206890F82C105A +:10DF700001208840216981432161681C07D137B1A4 +:10DF80002168BDE8F041091D0D4803F0FCBE206882 +:10DF90003544B5424560216801F1040104D2A06B0B +:10DFA000BDE8F04103F0D7BE606B03F0D4FEA06A79 +:10DFB000854200D2A562BDE8F08100002400002067 +:10DFC000840B00202DE9F041054603F0E9FE2D4CBD +:10DFD000A068401CA06020682B4F10B1606930B36E +:10DFE0002BE02560A068012827D1002606EB8600DB +:10DFF00007EB800003F0A1FE761C0F2EF6D323481A +:10E0000003F09BFE2148143003F097FE1F48283090 +:10E0100003F093FE1D483C3003F08FFE1B48503048 +:10E0200003F08BFE194860631430A06305E020689C +:10E03000E96AC06A884200D82560606A401C606254 +:10E04000E96A0120226988401043206101EB8100C8 +:10E0500007EB8000291D03F096FE03F0C1FE606906 +:10E0600000280CD02068E96AC06A884207D20849B3 +:10E070004FF080500860BFF34F8FBFF36F8FBDE844 +:10E08000F081000024000020080A0020340B00204A +:10E0900004ED00E038B503F083FE0E4C2068A8B90B +:10E0A0000D4803F04AFE0C48143003F046FE0A48BF +:10E0B000E06014302061084B0020C43B009003F165 +:10E0C0004C020C210A2004F02FFA2060BDE83840F1 +:10E0D00003F086BE600000205C0C002030B4026CAF +:10E0E0000B46002A0BD0C1681144C1608468A1426C +:10E0F00001D30168C16030BC1846E6F7A5B930BC51 +:10E1000070472DE9F041856B174604460026026CE6 +:10E1100082B1C7B1E068E6F797F9E168206C091AA7 +:10E12000E1602268914202D2A168081AE060022FE1 +:10E1300016D017E02068A8B9A06804F0E9FF0646E9 +:10E140000020A0600EE06068E6F77EF9216C606850 +:10E1500008446060A168884204D32068606001E0E0 +:10E1600005B16D1E6D1CA5633046BDE8F081000051 +:10E1700010B5044690F8510050B101280BD0022888 +:10E180000ED0BDE8104040F61E7106A0FFF760BD3E +:10E19000206B03F03BFE2046BDE8104003F036BE86 +:10E1A00010BD00007461736B732E63000A48002178 +:10E1B0000269012A00D901210268D26A0AB100204D +:10E1C0007047064A1268012AF9D80029F7D1816AF6 +:10E1D000C068081A7047000024000020080A0020C8 +:10E1E0000A4902680A6042684A6082688A60C268B6 +:10E1F000CA6002690A6142694A6182698A61C069CA +:10E200000122C8610420EDF7CFB9000040050020CD +:10E2100010484FF4B041420706D0C01D0D4920F010 +:10E220000700411AC1F5B0410B4A00230144C2E97D +:10E2300000030839103A21F0070111604B600B60B0 +:10E240000B1AC0E9001393604FF000405360D06098 +:10E2500070470000840C00209C0000201F4C204EC2 +:10E2600012E000BF03F09CFDF068C568281D03F0B4 +:10E27000FFFCA068401EA0606068401E606003F064 +:10E28000AFFD2846FFF774FF60680028EAD1154803 +:10E290000068012807D914494FF080500860BFF387 +:10E2A0004F8FBFF36F8FFFF781FF0228D7D303F0A3 +:10E2B000EDFFA06AE168884204D240F65C510BA0F1 +:10E2C000FFF7C6FCFFF772FF03F000F9022801D345 +:10E2D00003F0E6FD04F0F0FFC1E700002400002099 +:10E2E000700B0020080A002004ED00E07461736BDD +:10E2F000732E6300002807D00021816001600B4667 +:10E300000A46C16004F08AB9704710B5029C49B151 +:10E310002260C4E90F010121204604F039F90020F0 +:10E32000A06410BD2460F4E72DE9F05F8846DDE9C4 +:10E330000B9483466FF00301206B01EB82010844CC +:10E340000A9E20F007079A46780704D040F2613110 +:10E350001CA0FFF77DFC0025B8F1000F0ED00020B7 +:10E36000221818F8001082F8341018F8001011B1B3 +:10E37000401C1028F4D384F8435001E084F8345052 +:10E380000F2E00D30E26E662C4E91165201D03F0AE +:10E39000DFFC04F1180003F0DBFCC6F10F00246180 +:10E3A000A0616462E56484F850505246594638468C +:10E3B00000F000FB2060B9F1000F01D0C9F8004067 +:10E3C000BDE8F09F7461736B732E63002DE9F04715 +:10E3D0001E46DDE9089417460D00804604D140F240 +:10E3E00065110CA0FFF734FC002C11D0FFF752FE92 +:10E3F00004F11801C4F80080A1E86002201D03F0B8 +:10E40000A7FC002F04D014F8240F40F00400207063 +:10E41000BDE8F08774696D6572732E6300000000BB +:10E4200030B5114900E011460A688242FBD34B68BF +:10E430005C18844203D14068184448600846436829 +:10E440001C18944209D1084C103C2468A24209D0FF +:10E4500052681A4442600A6812680260814200D021 +:10E46000086030BD0460F9E79C00002070B500240E +:10E470000B4D41609142006106D8D11A82699142E8 +:10E4800006D2011D286907E09A4203D2994201D3BE +:10E49000012403E0011DE86803F05DFC204670BD27 +:10E4A0006000002010B5044603F07AFCA06B28B190 +:10E4B0005FF0000403F094FC204610BD0124F9E74E +:10E4C0002DE9F3410F4600980026846C24B940F6EC +:10E4D000453115A0FFF7BCFBA06BE16B884204D36C +:10E4E00040F6463110A0FFF7B3FBA06BE16B88420A +:10E4F0000CD294F945503A4669462046FFF701FE92 +:10E500000646681C05D06D1C84F845503046BDE8B1 +:10E51000FC81606A0028F9D004F1240004F08CFE2C +:10E520000028F3D00126F1E771756575652E63004B +:10E53000F8B5054616480E46C068C068C468201D78 +:10E5400003F096FB94F82400410716D5A0692B46EA +:10E55000411932462046FFF789FF90B1002003465B +:10E56000014600902A46204604F076FF48B94FF451 +:10E57000FC7108A0FFF76CFB03E020F0010084F8B9 +:10E580002400216A01B02046BDE8F04008470000A1 +:10E590006000002074696D6572732E6300000000D6 +:10E5A00070B586B0384E65E00198002862DB039CA8 +:10E5B000606910B1201D03F05BFB04A800F0B2F805 +:10E5C000054601980A2855D2DFE800F00505052C1C +:10E5D000324805052C3294F824002A4640F0010008 +:10E5E00084F824000298A169034601442046FFF7FD +:10E5F0003DFF90B3216A2046884794F824004007E5 +:10E6000038D5002000900298A169002342181946CD +:10E61000204604F021FF00BB40F213311BA0FFF79E +:10E6200017FB27E014F8240F20F00100207021E0F0 +:10E6300094F8240040F0010084F824000298A061BE +:10E6400020B940F22B3111A0FFF702FBA0692B4645 +:10E6500041191A462046FFF709FF0BE094F8240001 +:10E66000810703D4204603F0D1FB03E020F0010032 +:10E6700084F82400002201A9306804F047FA002839 +:10E6800092D106B070BD00006000002074696D6515 +:10E6900072732E6300000000F8B50D46064603F0C5 +:10E6A000F5FD684600F03EF80446009810B104F00D +:10E6B00003FEF8BD1148ADB101690968D9B1002563 +:10E6C000311B2A46006803F097FC04F0F5FD002892 +:10E6D000EFD10B494FF080500860BFF34F8FBFF36D +:10E6E0006F8FF8BDA642EBD804F0E6FD2146304618 +:10E6F000FFF71EFFF8BD0125E2E7000060000020E3 +:10E7000004ED00E00648416B096829B1416BC96816 +:10E71000C9684968816270474FF0FF31FAE700002D +:10E720002400002070B5054604F07EFC064E044629 +:10E73000B068844203D200F009F8012000E0002014 +:10E7400028602046B46070BD60000020F8B5184D08 +:10E7500025E0C068C4680668201D03F089FA216AB4 +:10E760002046884794F82400400718D5A069304413 +:10E77000B04206D924616060211DE86803F0EBFA1D +:10E780000DE000200346014600903246204604F08A +:10E7900063FE20B94FF4617106A0FFF759FAE868EB +:10E7A00001680029D5D12969C5E90310F8BD000029 +:10E7B0006000002074696D6572732E6300000000B4 +:10E7C00007484068401C03D0CA2106A0FFF740FA62 +:10E7D000202080F31188BFF34F8FBFF36F8FFEE7C8 +:10E7E00074000020706F72742E630000074CE068A4 +:10E7F000016841B1C0680021D0F80000FFF74CFF6C +:10E80000FFF7CEFEF3E701210020F7E760000020CC +:10E810002DE9F041044603F0C3FA94F9455004F1A0 +:10E82000240610E0A06C20B100212046FFF748FE2E +:10E8300004E0606A48B1304604F0FEFC08B103F021 +:10E840002DFC6D1E6DB2002DECDC4FF0FF3684F810 +:10E85000456003F0C5FA03F0A3FA94F9445004F1BB +:10E86000100709E0206948B1384604F0E5FC08B11A +:10E8700003F014FC6D1E6DB2002DF3DC84F84460CF +:10E88000BDE8F04103F0ACBA2DE9F04105460026A1 +:10E8900003F0FCFC324F386808B9FFF7B9FCF868A0 +:10E8A000054212D18DB1083568070AD005F007007E +:10E8B000C0F108000544680703D0952129A0FFF79F +:10E8C000C7F915B17868854202D904F0F5FC3BE040 +:10E8D0002348103001460C6801E020460C46616870 +:10E8E000A94202D221680029F7D13968B8468C4282 +:10E8F000EBD006682168016060680836401B10286C +:10E900000DD96719780703D0C22116A0FFF7A0F927 +:10E910006068401B786038466560FFF781FD62687B +:10E92000D8F804104046891AC8F80410D8F80830FE +:10E93000994200D28160D8F80C0002430020C4E95B +:10E94000000204F0B9FC0EB903F0F2F9700704D02C +:10E950004FF4817103A0FFF77BF93046BDE8F081E9 +:10E960008C000020686561705F342E630000000039 +:10E970000449086818B10868826C521C82640868EF +:10E98000704700002400002010B5040004D140F2BC +:10E99000E53105A0FFF75CF903F002FAE46903F042 +:10E9A0001FFA204610BD000074696D6572732E63F6 +:10E9B0000000000010B5031F4FF080741C601B1F87 +:10E9C00021F001011960191F024B0B601439403806 +:10E9D0000A6010BDC1E7010000127F2801DD7F2021 +:10E9E00004E06FF07E01884200DC084640B27047C8 +:10E9F0008000B0F5004F02DB47F6FF7003E00349EB +:10EA0000884200DC084600B2704700000180FFFF2A +:10EA10000E4902460020096831F9103093420EDB9E +:10EA200000280BD031F9103001EB40019B1A31F96D +:10EA3000021C511A8B4201DB401EC0B27047401CC1 +:10EA4000C0B24028E8D33F207047000020040020D7 +:10EA50000248417A491C417270470000740100204D +:10EA600070B504461D46A52000F0DEF90246ED1CF7 +:10EA7000ABB2A189A068BDE87040E8F7A1BA2DE962 +:10EA8000F74F91F8019086B0A9F105008A4600F091 +:10EA9000FF0B022639E00AEB06053AF8067095F8F6 +:10EAA0000280B5F803000090781E81B20698E8F75E +:10EAB00033F9009804970590069C681D0027BBF168 +:10EAC000020F0DD0694600F065F894F8500068B167 +:10EAD0001022694604F11C00E5F7EFFCA0B905E03F +:10EAE00007886846394603F0A5F8EEE784F83480D5 +:10EAF0000498E0860598208794F8500020B9678331 +:10EB00009DE80F001C340FC44E4408988642C2DBB7 +:10EB100009B0BDE8F08F00002DE9FF5F4D78834616 +:10EB2000281F90460E46C7B2022411E0301936F86D +:10EB300004A0B0F80290022F14D0001D694600F026 +:10EB400029F86B464A4651465846E8F797FA2C444E +:10EB50004445EBDBBBF80C1004B005A0BDE8F05F4A +:10EB6000E6F7F4B98188684603F064F8E9E7000045 +:10EB70007265706F72745F676174745F73657276CB +:10EB80006963657320666F72202530325820646F88 +:10EB90006E650000102200F00FB8032200F00CB8E0 +:10EBA000062200F009B8072200F006B8082200F09B +:10EBB00003B80622AFF3008030B5002305E0D51A74 +:10EBC000C45C0D445B1C05F8014C9342F7DB30BD7F +:10EBD0001CB5044601A841F63952904701236A4604 +:10EBE00001A92046E5F75AFBBDF90000FFF700FF39 +:10EBF0002080BDF90200FFF7FBFE60801CBD000015 +:10EC000070B51E4D4A426B0C00280EDD002903DD55 +:10EC1000BDE8704000F036B82CDAA94200D11A469F +:10EC200011B200F02FF8404218E01BDAA84201D1DF +:10EC3000184600E0404200B243F6FF74002903DDAD +:10EC400000F020F8201A09E00ADAA94200D11A4699 +:10EC500011B200F017F8A0F57C50FF3800B270BD7B +:10EC6000204670BD002902DD4FF4005070BD01DA6E +:10EC7000034870BD4FF0000070BD00000080FFFF32 +:10EC800000E0FFFF10B50A46904203DBBDE81040EC +:10EC900000F008B80146104600F004F8C0F5005036 +:10ECA00000B210BDCA03884202D14FF480507047B1 +:10ECB00092FBF0F000B240F64521884203DC42F6B8 +:10ECC000A90148430AE0064942F68B4200FB0211C3 +:10ECD0004043044A40F3CF3000FB02100014704759 +:10ECE000B634D3FFD1F3FFFF401804D510F5004030 +:10ECF0000AD5002008E04FF40041884204DBA0F56B +:10ED00000040884200DB481E00B27047C11700EB8C +:10ED10005141C913002800DA491E494200EBC130B5 +:10ED200000B27047818900221820E6F7E3BF08B5DA +:10ED3000C18D0091838D828942F603010820E7F797 +:10ED400036FA08BD818901221820E6F7D3BF2DE9E4 +:10ED5000FF4104468789068F458F03F0E1FA216C55 +:10ED600016228DF80820ADF80960ADF80B50294443 +:10ED7000CDE90010052302AA04213846EDF78CFFE7 +:10ED8000BDE8FF811FB58489018F408F0C228DF86B +:10ED90000820ADF80910ADF80B000020009001909C +:10EDA000052302AA04212046EDF776FF1FBD08B512 +:10EDB000C18D0091838D828942F602110820E7F708 +:10EDC000F6F908BD08B5016C0091838F028F818927 +:10EDD0001220E7F74FFC08BD02490A6860F34512AC +:10EDE0000A6070470000094002490A6860F3041293 +:10EDF0000A6070470000094002490A6860F3000297 +:10EE00000A6070472004094002490A6D60F38A22B3 +:10EE10000A6570470000094002490A6D60F34D32EF +:10EE20000A657047000009400346D01E037022F8AF +:10EE3000021C704710B501240470417042800371B8 +:10EE4000052010BD10B50446581F047023F8041C9B +:10EE500023F8022C10BD000001460148E7F7F3BC7F +:10EE6000900100202DE9F047804686B03548EEF746 +:10EE7000C1F8344F8146643F0026B87B7C6C354630 +:10EE8000BE73012832D0022830D1268841462EA0F8 +:10EE9000E6F760F84FF0370AB8F1000F03D0B8F189 +:10EEA000010F23D116E0032060732648EEF7A4F883 +:10EEB00001B2A18429A0E6F74DF8A07830BBE57037 +:10EEC0002571B9F82A0010B1342020731EE084F8AF +:10EED0000CA01BE004206073A07838B9207908B931 +:10EEE000E07818B1E570257184F80CA0B8F1000F36 +:10EEF0000CD0B8F1010F22D17A7B06B03146BDE8C3 +:10EF0000F047104B9B1FD72001F083B80D4D4FF0F9 +:10EF1000D808AD1F7C7BA81DEEF76EF80746334678 +:10EF200042460D2102A8CDE9004501F0E3FFADF80E +:10EF300013700D2302AA0021042000F0F3FA06B09A +:10EF4000BDE8F087D80100207375636565642065AE +:10EF500076656E742069733A25780A0041444452FC +:10EF60004553535F5245534F4C5554494F4E5F5391 +:10EF7000554345454445442C20696E6465782025F9 +:10EF8000640000003EB50D46044615496846E7F7A3 +:10EF900082FC0BE06846E7F784FC817AA14205D148 +:10EFA00006222946001DE5F788FAA0B16846E7F772 +:10EFB00063FC0028EED1E7F761FD01000DD08C72F3 +:10EFC00028684860A88808810548E7F731FC01F007 +:10EFD00097FA00203EBD55203EBD56203EBD0000A4 +:10EFE000BC0100202DE9F047104C0646DDF82080DA +:10EFF0001068C4F85E009088A4F862001F461546A9 +:10F000008946667304F16400EDF7F8FF04F16400CB +:10F01000EDF7F8FFA7732B4632464946C4F8448003 +:10F02000BDE8F047D62000F0F4BF000074010020D6 +:10F0300030B4034B0124DC73DA6430BCE8F748BB1E +:10F040007401002070B50C4605460D212046E5F7F9 +:10F0500022FA2888A4F80D00A878E07370BD10B5D6 +:10F0600000F052FC002800D0C07B10BD08B500F0B5 +:10F070004BFC002809D00221017600210091427941 +:10F080000188831DDA2000F0AFFF08BD08B500F04D +:10F090003BFC002809D0032101760121009142792F +:10F0A0000188831DDA2000F09FFF08BD10B500F035 +:10F0B0002BFC002804D0817B19B1C17B09B1007EF3 +:10F0C00010BD002010BD000070B500F01DFC040054 +:10F0D00011D0094D0420296A4876207B032806D1E7 +:10F0E000208800F04DFA296A012008762073BDE8D7 +:10F0F000704001F005BA70BD740100202DE9FF4792 +:10F100008946DDE90C8605461F4669461046FFF72D +:10F110004AFD6C46E11D4846FFF745FD8DF80E801F +:10F120008DF80F700020295C225C51403154401C46 +:10F130001028F8DBBDE8FF873FB500240094019458 +:10F14000029403940C6801948988ADF80810116842 +:10F15000CDF80A109188ADF80E1000216C46455C80 +:10F16000625C55405D54491C1029F8DB3FBD00002E +:10F170002DE9FF411D4DA97A01290AD01C4E032912 +:10F180000DD0052919D004B01AA0BDE8F041E5F76B +:10F19000E1BE002000900190029003901BE000244B +:10F1A0006F46E87A04EB001000F0DAF8315D484071 +:10F1B0003855641C102CF4DB0AE00D4A0020694627 +:10F1C000103A335C145C63400B54401C1028F8DB8D +:10F1D000E87A401CE87200F003F90548002269460D +:10F1E0002038FFF725FFBDE8FF81000074010020F3 +:10F1F000BC730020736D5F636D61635F68616E64F3 +:10F200006C655F6165735F656E67696E655F72658A +:10F210006164792063616C6C656420696E2073742D +:10F2200061746520257500002DE9F0413D4D0026F3 +:10F2300088B0A97A0446022909D0042964D0062995 +:10F2400069D008B038A0BDE8F041E5F783BE0146BB +:10F2500010226846E5F7F8F86946102001F0ACFE88 +:10F260002078000605D59DF80F0080F087008DF806 +:10F270000F009DE80F0004AC0FC404A9102001F09A +:10F280009BFE9DF80000000605D59DF81F0080F04C +:10F2900087008DF81F00688A304E08B1010710D032 +:10F2A00000F00F0700240DF11008BC4217DA688A3D +:10F2B00020F00F00204400F053F818F804104840E4 +:10F2C00012E000246F46688A2044103800F048F8A5 +:10F2D000395D48403055641C102CF4DB08E018F808 +:10F2E000040001D180F080003055641C102CDCDB60 +:10F2F000287BE97A401E814201DA032000E00520E4 +:10F30000A87208B0BDE8F081014614481022103000 +:10F31000E5F79AF8ECE70146D5E90E209047AE7282 +:10F32000EFE7000074010020736D5F636D61635F40 +:10F3300068616E646C655F656E6372797074696F25 +:10F340006E5F726573756C742063616C6C656420AC +:10F35000696E20737461746520257500AC7300209C +:10F360000F4910B54A8A904205DB01460DA0E5F72A +:10F37000F1FD002010BD101A401E032802DA0849D2 +:10F3800016310AE0121F904204DA096B084410F8A3 +:10F39000030C10BD0249801A3431085C10BD000016 +:10F3A00074010020736D5F636D61635F6D657373DE +:10F3B0006167655F6765745F627974652E206F753C +:10F3C00074206F6620626F756E64732C20616363B6 +:10F3D0006573732025752C206C656E2025750000E3 +:10F3E0000248817A491C8172704700007401002034 +:10F3F0000348807A08B10020704701207047000060 +:10F40000740100202DE9F0470F4608A91646B1E81F +:10F41000200701461C4610221548E5F715F8154847 +:10F42000E41D00F11E010770A0F80160C1F8008022 +:10F43000A1B2A0F116040E4A61822563C4E90E9AB6 +:10F440000020203AE072106450649064D06401F1AE +:10F450000F00C0F307102073012500B92573227B2C +:10F4600005A0E5F777FDA572BDE8F04701F048B8C3 +:10F470009C7300208A010020736D5F636D61635F80 +:10F4800073746172743A206C656E2025752C20624D +:10F490006C6F636B20636F756E74202575000000C0 +:10F4A000024B5870DA6299707047000074010020B6 +:10F4B00010B5114C0A2804D11078072801D110206A +:10F4C000E071084600F020FA002813D00021817373 +:10F4D000C1730176491E818401214173817800291D +:10F4E00008D0017B002905D1A17809B1242100E0D1 +:10F4F0002321017310BD00007401002070B50C467B +:10F500000546164610211046E4F7C5FF22460C2199 +:10F510003046E7F7F1F82A463046BDE870400E2144 +:10F52000E7F7EAB8FEB506460E481C461546876A58 +:10F5300017B100210420B8470A4968461C31E7F793 +:10F54000AAF908E06846E7F7ACF9476823462A4677 +:10F5500000213046B8476846E7F78EF90028F1D118 +:10F56000FEBD00007401002070B50C460546102158 +:10F570002046E4F790FF2868A0606868E06070BDEE +:10F5800070B5084D0446A88AA0420AD101F0BEFD1C +:10F590004FF6FF70A8822146BDE870400248E5F7AB +:10F5A000D9BC70BD740100207C3D020010B500F094 +:10F5B000ABF9002802D0817B09B1007C10BD00208E +:10F5C00010BD00002DE9F047144604282CD1217805 +:10F5D0001727974E4FF000094FF033084FF0220ADB +:10F5E000302971D006DC05296FD008296ED00E298C +:10F5F000ECD105E18E484FF0010A3E2990F9010057 +:10F6000013D06029E2D191780229DFD1401C03D0C8 +:10F61000F07818B1032002E0052000E001203072EC +:10F6200086F809A000F06CFFFBE0A178012903D067 +:10F63000052938D00A29F7D1E178002978D1401C72 +:10F6400076D0A788384600F05FF90500ECD02F800F +:10F65000A079A870E0796871A91D04F10800FFF78E +:10F66000A8FAA87808B173A100E074A175A0E5F725 +:10F6700071FC85F80E9085F80F9085F818904FF082 +:10F68000FF30A88485F80DA0A87848B1287B002811 +:10F69000CAD1B07808B1242000E023202873C0E04C +:10F6A00085F80C80BDE0B4F8030000F02DF90500EA +:10F6B000BAD0297B69A0E5F74DFC287B2C2806D021 +:10F6C000B4F80D0088B114E05BE07AE026E0142085 +:10F6D0002873306A90F8241001B10121E97390F881 +:10F6E000242064A0E5F736FC9BE0611D00200A5C45 +:10F6F00062B105F11C01601DFFF758FAB4F80D0066 +:10F700006883252028734FF6FF7005E0401C082809 +:10F71000EDDB262028732888B08282E0B4F803004D +:10F7200000F0F2F805007CD06179A9732A7C00E032 +:10F730007BE056A0E5F70EFC297B5FA0E5F70AFC0D +:10F74000A87B00286DD0306A90F8240000B1012019 +:10F75000E873287B162805D0362862D185F80C80FE +:10F76000288824E0A87808B12F735AE0284600F0D2 +:10F770001BFB18B1284600F05BFBF5E785F80CA0F1 +:10F780004FE0B2F8030000F0BFF8040049D0217C3C +:10F790004FA0E5F7DFFB217B47A0E5F7DBFB207BF4 +:10F7A000162807D036283CD184F80C802088FFF733 +:10F7B000E7FE36E0A07808B1277332E084F80CA0A9 +:10F7C0002FE0B4F803502846FFF7DAFE284600F091 +:10F7D0009BF8050025D0B5F9240000280BDBA9789B +:10F7E00039B9297B362904D1A178052901D1EDF752 +:10F7F0001CFCECF757F885F80C90A5F8009010E089 +:10F800003F49B4F803000988884203D1A01D00F0E5 +:10F8100083F806E03B490988884202D1A01D00F028 +:10F82000A1F9BDE8F04700F06BBEBDE8F08700002D +:10F8300074010020736C6176650000006D61737463 +:10F84000657200004E657720736D5F636F6E6E2C7E +:10F8500020726F6C65202573000000004C544B2013 +:10F86000526571756573743A2073746174652025EF +:10F870007500000061757468656E74696361746415 +:10F88000203078257820307825780A00456E63721C +:10F89000797074696F6E2073746174652063686138 +:10F8A0006E67653A2025752C206B65792073697A1F +:10F8B00065202575000000006576656E742068611E +:10F8C0006E646C65722C20737461746520257500FC +:10F8D000456E6372797074696F6E206B6579207202 +:10F8E00065667265736820636F6D706C6574652CF6 +:10F8F000206B65792073697A65202575000000000A +:10F90000E03A0200E83A020010B5EBF72FF80028C1 +:10F9100000D05A3010BD00002DE9FF41884D064649 +:10F920000020E873296CA9B1286469463046FFF7C6 +:10F9300034F90322694605F16100E4F7BEFD28B100 +:10F9400005F16400EDF75EFBBDE8FF810020FFF7E5 +:10F9500089FAF9E7287A022823D0042823D0687A84 +:10F96000052829D0A87A02282FD004282DD00628CF +:10F970002BD0EC6C002CE7D07148227B016A1C2A4A +:10F9800001F193007BD03DDC0F2A4ED025DC0B2A01 +:10F990004BD00D2AD8D163313046FFF7FBF8122047 +:10F9A00078E0684901E0674910393046FFF7F2F81E +:10F9B000BDE8FF41E7F74EBA614930465B31FFF7DA +:10F9C000ECF8BDE8FF41FFF743B869463046FFF762 +:10F9D000E1F86846FFF728FCB6E7112A42D0152A5D +:10F9E000B2D101463046FFF7D5F8217C56A0E5F7A5 +:10F9F000B1FA286A217C933001F0C4FBA078E8B307 +:10FA00002D2047E01E2A7FD0202A7CD02F2A5FD0CD +:10FA1000312A99D101463046FFF7BCF8286A217C8B +:10FA2000933001F0AFFB322034E02088EAF79EFFEC +:10FA3000074669463046FFF7ADF82B6AA07803F118 +:10FA4000350318B107F10902394602E03A4607F1D9 +:10FA500009016846FFF770FB04B02046BDE8F0419D +:10FA600000F0BEBA69463046FFF794F8286A1022C3 +:10FA700069468330E4F721FD38B101E00CE00DE088 +:10FA8000296A04200876012004E0A07808B1132038 +:10FA900000E01420207357E73C20FBE7694630461E +:10FAA000FFF778F80E216846E6F718FE81B2286A5B +:10FAB000A0F8C41028A0FDF7E9F8286A30F8C41FA0 +:10FAC00042885140818025A0FDF7E0F81D20E1E744 +:10FAD00069463046FFF75EF80E216846E6F7FEFD00 +:10FAE00081B2286AA0F8C4101BA0FDF7CFF8286ADD +:10FAF00030F8C42F81884A40428018A0FDF7C6F82C +:10FB00003020C7E700E005E001463046FFF742F845 +:10FB10001F20BFE7E2313046FFF73CF8286AC06992 +:10FB200008B12120B6E7A07808B12220B2E733203F +:10FB30002073208804B0BDE8F041FFF721BD00002C +:10FB4000740100208C7300206B65795F73697A659E +:10FB50002025640A000000007900000065646976D1 +:10FB6000000000002DE9F041414D0626697A032985 +:10FB700013D02C6D002C1FD02946227B096A092A3C +:10FB80005BD02ADC052A38D0072A15D1026841F853 +:10FB9000532F40684860082042E035492A7C58319C +:10FBA000022A0BD00268AA658088A5F85C00087854 +:10FBB00000F03F0008706E72BDE8F0810288A5F881 +:10FBC0005820807885F85A00087800F03F0040F00F +:10FBD0004000087004206872EEE7182A34D01A2A10 +:10FBE000EAD10021E6F77AFD81B2286AA0F8C610B2 +:10FBF00020A0FDF74BF81B2012E00068C0F31307AC +:10FC00001D48874201D34042074400F06BFC286A3C +:10FC10003A460C212530E6F775FDA07810B1292071 +:10FC20002073C9E703202073204601F075FA286A83 +:10FC3000407E0028C0D12673BEE7026841F85B2FE2 +:10FC4000406848600A20EBE7CA31FEF7AFFF286A38 +:10FC5000227C10F8D11F01F0F001491E11440170FF +:10FC6000E27B01F0EF0101EB021101701920D7E7EF +:10FC700074010020646976003F420F0070B5164C95 +:10FC8000072010216071A171E0710025A572257215 +:10FC90006572E57304F16400EDF7B0F92564A573AE +:10FCA0000E48A56460654FF6FF70A08204F16C01F8 +:10FCB00025710B4848600846EAF734FD06210948DB +:10FCC000ECF70CFD04F1740107484860BDE8704092 +:10FCD0000846EBF743BE000074010020A0BB0D00F6 +:10FCE000C5F50100A1000200B1F4010070B50446A1 +:10FCF000002600F0F7FB134D60792A6A82F8400174 +:10FD0000D4F80600C2F841016089A2F845016B6A87 +:10FD100023B125326079A11D98470646A0782C6A48 +:10FD200008B14C3406E0453400F05CF8296A4531EE +:10FD30004871887168786070A6702878E070A8793A +:10FD4000207170BD7401002010B5EAF70FFE002885 +:10FD500004D090F86700022801D0002010BD0120D7 +:10FD600010BD0000044890F90100401C01D00020A3 +:10FD700070470120704700007401002010B5FFF7A4 +:10FD8000C3FD00280CD0074A0221126A5176017B7C +:10FD9000032901D106210173BDE8104000F0B0BB7A +:10FDA00010BD00007401002070B50C4D8178286AE8 +:10FDB0004C3009B1807900E0407900F01DF804462C +:10FDC000286A2246016A0648E5F7C4F8286A006AEC +:10FDD000A04201D1012070BD002070BD740100203F +:10FDE000A83D0200034906200978C90700D0072072 +:10FDF000704700007401002010B50024C10700D036 +:10FE00000324810701D544F00C04400701D544F0D8 +:10FE10001004214602A0E5F79DF8204610BD000021 +:10FE20006B65792073656E743A25780A00000000CE +:10FE3000FEB5064600244A4D601E0290286A90F8DE +:10FE40002000400713D56846EDF7D8F80AE0684669 +:10FE5000EDF7D0F8296A0A30102201F59071E4F725 +:10FE60002CFB90B16846EDF7CDF80028EFD1286A59 +:10FE700000F24110E6F716FC0246286A90F840119D +:10FE800038A0E5F767F84CB120E06846EDF7B2F826 +:10FE900004466846EDF7B0F80290E8E7296A91F861 +:10FEA000400138B902AA01F241110020EDF788F8AB +:10FEB00004000BD1296A02AB01F5907291F8400160 +:10FEC00001F24111EDF70CF8040044D0287928B173 +:10FED000286ACC221021E230E4F7D6FA296A1022EF +:10FEE000E23104F14800E4F7AFFA0027A765296A78 +:10FEF00091F82000C00607D5102201F5987104F191 +:10FF00003400E4F7A1FA6764286A006AC10720D0C8 +:10FF100080071ED5F27B317C1CA0E5F71BF8296A0F +:10FF20001022B1F806016085D1F80801E062D1F82D +:10FF30000C01206301F5887104F11A00E4F784FADA +:10FF4000307C6070F07BA070307E032806D00020EB +:10FF5000E070EBF7A7FC0298B084FEBD0120F7E744 +:10FF600074010020736D2070656572206164647295 +:10FF700020747970652025752C207065657220616C +:10FF8000646472657320257300000000736D3A206D +:10FF900073657420656E6372797074696F6E206921 +:10FFA0006E666F726D6174696F6E20286B65792063 +:10FFB00073697A652025752C2061757468656E7487 +:10FFC00069636174642025752900000010B5FFF78E +:10FFD0009BFC10B1B0F9240010BD4FF0FF3010BDF4 +:10FFE000017B491C0173704710B588B00A9CCDE9AC +:10FFF00000230B460246122102A800F07BFF8DF879 +:020000040002F8 +:100000001340122302AA00210420FFF78BFA08B044 +:1000100010BD00B585B0CDE900230B4602460B218B +:1000200002A800F067FF0B2302AA00210420FFF7BB +:1000300079FA05B000BD10B586B0CDE900230B46B6 +:100040000246089C0F2102A800F054FFCDF813408F +:100050000F2302AA00210420FFF764FA06B010BDA6 +:100060007047000070B50D46FFF74EFC040014D039 +:1000700000F038FA2A46094D0C21286A2530E6F7A7 +:1000800041FB296A03204876207B032801D1062002 +:100090002073BDE8704000F033BA70BD74010020D9 +:1000A0002DE9F0471546042820D0092821D108461B +:1000B000FFF72AFC04001CD02A78052A1BD0217BDC +:1000C00096A0E4F747FF227B0126DFF878824FF005 +:1000D00003094FF0060A2A2A77D018DC232A15D004 +:1000E00010DC022A05D0222A1ED1B9E01078782827 +:1000F0001ED0BDE8F087A07808B1232000E03320AF +:100100002073F6E7242A77D0272A0DD174E00E2732 +:10011000392A32D004DC2B2A7BD0332A04D10BE0DD +:100120003A2A55D03B2A74D0297887A0E4F712FFE9 +:10013000BDE8F04700F0E4B928780B2801D1A07899 +:1001400018B1204600F044F9F2E7607B3725042817 +:1001500011D0032801D0E670EAE7B4F92400ECF7E7 +:1001600045FF40B1408D30B1B4F924107EA0E4F7D2 +:10017000F1FE3420CFE02573DAE728780228E0D1B9 +:10018000D8F82000296840F84C1FA9888180A979F7 +:100190008171204600F01CFF18B1D8F820100876B5 +:1001A00058E0D8F8200090F8240001280ED084F8F8 +:1001B0000C90204600F0B0FFD8F82000407E0028C8 +:1001C000B6D100BF84F80CA0B2E723E00420A2E07F +:1001D00028780328B5D1D8F82010681C8331FEF7A1 +:1001E000D9FC132097E000BFD8F82010681C7331A9 +:1001F000FEF7D0FC27739BE728780128A1D1286857 +:10020000C4F81100A888A4F81500A879E075282082 +:1002100081E021E02878032893D1D8F82010681CC9 +:100220008331FEF7B7FCD8F8200090F824000228AC +:1002300005D162792188A31DD320FFF7EAFED8F803 +:100240002000417E042904D00129BBD184F80C9000 +:100250006EE7067626736BE728780428C4D070E72B +:1002600028780146801F052841D2DFE800F0030C02 +:100270001C283700D8F82010086A40F001000862F6 +:1002800001F5887117E0D8F82010086A40F00200E4 +:100290000862B5F80100A1F8060101F58471E81CB7 +:1002A000FEF784FC26E0D8F82010086A40F004002D +:1002B000086201F59071681CFEF76CFC1AE0D8F832 +:1002C0002010086A40F008000862687881F8400150 +:1002D00001F24111A81CFEF76CFC0BE0D8F82010CD +:1002E000086A40F01000086201F59871E3E72DA05C +:1002F000E4F730FE2046FFF757FD0028A8D020463F +:10030000FFF796FDA07828B1232020732088FFF7FF +:1003100037F90DE7172020730AE70000736D5F704F +:1003200064755F68616E646C65723A2073746174A1 +:10033000652025752C207064752030782530327842 +:100340000000000074010020556E657870656374CC +:1003500065642050445520257520696E20737461B2 +:100360007465202575000000736D3A205365747420 +:10037000696E672075702070726576696F7573207D +:100380006C746B2F656469762F72616E6420666F82 +:10039000722064657669636520696E6465782025DE +:1003A00075000000556E6578706563746564205053 +:1003B000445520257520696E20534D5F5048335FAA +:1003C000524543454956455F4B455953000000008F +:1003D000064A0821126A1176817809B1232100E0CA +:1003E000332101730088FFF7CBB8000074010020AF +:1003F00000487047CC0100200148007C7047000095 +:100400007401002010B504460648E6F773FB064861 +:10041000002C047405D0E7F737FBBDE81040E7F780 +:1004200013BB10BDCC73002074010020064910B529 +:100430004865087C002806D00448E6F75BFBBDE869 +:100440001040E7F721BB10BD74010020CC730020E1 +:10045000024908650248EAF7DBBB0000740100208E +:10046000E83A020001494862704700007401002028 +:1004700010B5FFF749FA040016D0637B227BA17800 +:100480000AA0E4F767FD04206073A07818B1204645 +:1004900000F015FD04E0207B332801D137202073C4 +:1004A000BDE8104000F02CB810BD0000736D5F7205 +:1004B0006571756573745F70616972696E672069D3 +:1004C0006E20726F6C652025752C207374617465C5 +:1004D0002025752069726B207374617475732025F3 +:1004E00075000000054900200246096A0B18401CEF +:1004F00083F825201028F9DB7047000074010020E4 +:100500002DE9F04F8DB0EAF73FF900285AD0F94CA9 +:10051000207A012802D0032808D105E0E07B28B921 +:1005200000216A4601200EE0E07B48B1607A022893 +:1005300012D04FF0010A042812D0062812D124E06C +:100540006A4600210320FEF7D9FFE6F783FCE06A44 +:1005500000226946103085E3FEF77AFA0020E1E2D6 +:10056000E07B38B1A07A01282FD003282DD00528B0 +:1005700031D12AE0DF4869465830FEF763FDFEF7C7 +:1005800067FA00226946DC486CE3DA485830E6F73F +:1005900089F80146D9A0E4F7DDFC84F809A0DB2046 +:1005A0008DF8000006208DF80100A06DCDF8020046 +:1005B000B4F85C00ADF8060008236A460021042068 +:1005C000FEF7B0FF0DB0BDE8F08FE07B012802D050 +:1005D000FEF7CEFDF6E7A07B0026002866D106A830 +:1005E000EAF7EEF907E006A8EAF710FA00F15A0573 +:1005F000687B012807D006A8EAF7E8F90028F2D1BD +:10060000A07B50B152E00095298868790223AA1D89 +:10061000FEF7E8FC02206873F2E7B6484830E6F7D8 +:100620001CF978B9A56CB34829464830E6F752F969 +:100630000096A87A01232A1D0021FEF7D3FC284644 +:10064000E6F716FAA07B88BB3EE0AA486430ECF7D8 +:10065000D1FC0546001DE6F725F802462978ADA035 +:10066000E4F778FC2878617B884206D1A14906220C +:100670005E31281DE3F721FF80B1607B90B1E07B04 +:10068000012819D09B4869465E30FEF7DBFCC4F8B0 +:1006900040A0694605F10A00626CE3E20020FEF723 +:1006A000E1FB09E093486430ECF7ACFC914864301E +:1006B000ECF7A0FC0028C8D18E486430ECF79AFC17 +:1006C00010B90120FEF7CEFB4FF0230B4FF6FF775A +:1006D00006A8EAF775F9A1E006A8EAF797F900F18C +:1006E0005A05287B28281BD004DC242807D025287D +:1006F000F1D16FE034283CD03728ECD182E000966D +:100700000196288802238A4A0621ECF7C5FA20B10F +:1007100028880621ECF76AF880E0272028737DE01E +:100720002846FFF7E3FA206AD5F8111040F8451F74 +:10073000B5F815108180E97D8171284600F048FCEC +:1007400020B1216A087685F80CA009E0284600F05F +:10075000BDFC206A90F82400022808D029202873C4 +:100760002988A182A878002854D072A253E00420DE +:10077000F5E7B5F92400ECF739FC236A8046408D93 +:10078000A3F80601D8F82C10C3F80811D8F83000E7 +:10079000C3F80C01102208F11A0103F58870E3F781 +:1007A00053FE98F80300009098F8023098F8012062 +:1007B000B5F9241062A0E4F7CDFB98F80100287485 +:1007C00098F80200E87398F8030000B10320287637 +:1007D0003520C4E7206AE96940F8CA1F296A4160E8 +:1007E000698B20F8021CC17901F00F01491C2974A2 +:1007F000C079C9B2C0F30012EA735FA0E4F7AAFBA4 +:100800002E20ACE72846FFF771FA284600F05EFC80 +:100810003820A4E767A26AA0E4F79CFBA08AB8424C +:1008200005D106A8EAF7D2F800287FF455AFA08AD0 +:10083000B8423FF4CFAE0621A046EBF795F8F0B1F1 +:10084000B8F81400FFF760F80500F2D0297B69A022 +:10085000E4F780FB287B1B2842D015DC1A2840D205 +:10086000DFE800F03F313F3FEF3FEF3FEF3FEE3F2C +:10087000ED3FEC3FED3FEBEAE93F3FEF3FEF062175 +:10088000A08AEBF7B3FF9DE62E282BD00EDC26289E +:1008900029D006DC1D2827D01F2826D0212820D1CA +:1008A00028E2292822D02D28F9D1F2E135281ED0BE +:1008B00004DC302818D03228F1D103E2382817D0D0 +:1008C0003C28ECD1EDE105208DF81C00D8F8200083 +:1008D000007E8DF81D00A87808B1232095E093E0F4 +:1008E000B1E117E2FBE1D3E02CE135E1D7E096E09E +:1008F000C2E00000740100208C7300204E65772058 +:1009000072616E646F6D20616464726573733A2006 +:1009100025730000646576696365207479706520CD +:1009200025752C20616464723A2025730000000054 +:10093000543D0200726573706F6E64657200000052 +:100940006462206B65792025752C206B6579207396 +:10095000697A652025752C2061757468656E7469E7 +:1009600063617465642025752C20617574686F72ED +:10097000697A656420257500736D3A207265636538 +:1009800069766564206C746B20726571756573742B +:100990002077697468206B65792073697A652025F2 +:1009A000752C2061757468656E7469636174656423 +:1009B00020257500696E69746961746F72000000AA +:1009C000736D3A20636F6E6E656374696F6E20306D +:1009D0007825303478206C6F636B656420736574A0 +:1009E000757020636F6E7465787420617320257351 +:1009F00000000000736D5F72756E3A20737461744D +:100A000065202575000000003320287300960196AC +:100A10002888022307AA0621ECF73EF9EEE1206AB6 +:100A200007A900F58870FEF7B5F836202873206A0C +:100A3000B0F8061106E0EBE054E016E19EE074E049 +:100A4000C6E06BE0F5A0E4F785FA206A002100F526 +:100A50008470E5F747FE0646206A042100F584709D +:100A6000E5F740FE0246206A07A93346B0F80601C2 +:100A7000CDE90001298821E1D8F82020012002F8E1 +:100A8000450F3920287300960196288807233EE0F9 +:100A900085F80CB02988EB48EAF7BAF892E5206AA5 +:100AA000022180F84C10FFF79DF90146206A237857 +:100AB00000F14C024530D37043790B40537180797B +:100AC0000723084090712A202873009601962888F1 +:100AD0000621ECF7E1F8284600F0EEFA284600F08F +:100AE0001BFB6FE504208DF81C00D8F820000DF1E9 +:100AF0001D015330FEF74EF8A87808B12C2000E015 +:100B00003B202873009601962888112307AA062106 +:100B1000ECF7C2F8284600F0CFFA75E12846FFF757 +:100B20005FFA2846FFF794FC4CE598F80F0001287F +:100B3000F3D02846FFF754FA216A2A460846353191 +:100B400025308FE098F80F000028E6D1206A07AA28 +:100B50000021B0F8C60008E098F80F000028DCD1AA +:100B6000206A07AA0121B0F8C600FEF7C7FC284694 +:100B7000FFF736FA2A4607A9E06A73E098F80F00F3 +:100B80000128CAD02888E9F7F1FEA97802AA21B184 +:100B9000C17BCDE90012037A03E0017ACDE90012AE +:100BA000C37BD8F8200000F14C02D11F7330FEF750 +:100BB000A5FA2846FFF714FAD8F82010C146A33149 +:100BC00002A8FDF7E7FF2A4602A9D9F820001BE09A +:100BD00098F80F000128A0D02888E9F7C7FEA97867 +:100BE00002AA21B1C17BCDE90012037A03E0017AA8 +:100BF000CDE90012C37BD8F8200000F14C02D11FD0 +:100C00005330FEF77BFA16E02530FEF711FAFBE0D1 +:100C100098F80F0001287DD0A87802AA0028D8F8FB +:100C2000200003D000F17301533002E000F15301C2 +:100C3000733000F031F92846FFF7D2F92A4602A9AD +:100C4000D8F82000E0E798F80F00012862D0206A69 +:100C500002A9CA30FEF788FC2846FFF7C1F92A46E8 +:100C600002A97948FEF7E4F9ACE403208DF81C00F2 +:100C7000206A0DF11D016330FDF78CFFA87808B1E3 +:100C80002B2000E03A202873009601962888112333 +:100C900089E0206A07A99330FDF77CFF16202873AE +:100CA00017E0206A07A99330FDF774FF1620287318 +:100CB00007A8CDE90060298800231A466348E9F7B0 +:100CC000A7FF7FE4206A07A99330FDF763FF85F84B +:100CD0000CB0298807AA5E48E9F79AFF72E498F8F1 +:100CE0000F00012816D0206AB0F8C81059A0E4F708 +:100CF00031F9ACE7D8F82000C16961A0E4F72AF91E +:100D0000D8F82000C169CA070ED0216AC96921F04C +:100D1000010100E078E0C16106218DF81C100DF1A1 +:100D20001D0100F193005BE08A0715D5216AC969AE +:100D300021F00201C16107218DF81C10B0F8C81024 +:100D4000ADF81D100DF11F01CA30FDF72FFF009601 +:100D5000019628880B2326E04A070CD5216AC96929 +:100D600021F00401C16108208DF81C0036480DF106 +:100D70001D01103034E00A071DD5216AC96921F030 +:100D80000801C16109208DF81C00E06A90F8261066 +:100D90008DF81D100DF11E012030FDF70AFF0096A1 +:100DA00001962888082307AA0621EBF775FF284635 +:100DB00000F082F906E4C90615D50A218DF81C1049 +:100DC000216AC96921F01001C161217921B1CC22C8 +:100DD0001021E230E3F758FB206A0DF11D01E230EB +:100DE000FDF7D8FE50E7A878A0B12846FEF7DCFF53 +:100DF00040B12846FFF71CF885F80CB02888FEF7AC +:100E0000BFFB01E022202873B8F81400B8423FF479 +:100E10005FAC38E533202873F0E70000736D3A20AB +:100E20006863695F6C655F73746172745F656E633C +:100E300072797074696F6E206564697620307825E8 +:100E400030347800003B02007C730020F03A02004E +:100E5000F83A02004C544B20526571756573743A30 +:100E600020726563616C63756C6174696E6720776D +:100E7000697468206564697620307825303478009C +:100E80006B657920746F206469737472696275741C +:100E9000653A25780A0000008B689360C968D160C4 +:100EA00081681160C0685060704710B5FEF72CFD76 +:100EB000002803D0BDE8104000F001B810BD017B50 +:100EC00009B1232903D124210173FFF719BB70470E +:100ED0000149487170470000740100200149087001 +:100EE0007047000074010020014AD0719171704771 +:100EF0007401002030B4891EDDE9024502704170A2 +:100F000043800471411D284630BCFDF752BE0000ED +:100F100010B5174C0021206A80F824104721095C85 +:100F200031B14E21095C19B1042180F8241010BDA3 +:100F3000FFF7D8FA206A00F14501CA78520703D4B6 +:100F40004F22125C5207F2D549780429EFD84D227E +:100F5000125C042AEBD8074C02EB820323445B5C4F +:100F600080F82430BDE8104003A0E3F7F3BF000091 +:100F700074010020563D0200736D5F7365747570D7 +:100F80005F746B3A206D617374657220696F2063C2 +:100F900061703A2025752C20736C61766520696F2D +:100FA000206361703A202575202D3E206D657468A0 +:100FB0006F6420257500000010B50022401E06D485 +:100FC0000B5C42EA4302DC090A542246F6E710BDF4 +:100FD00070B5254C05468178206A21B100F14501A4 +:100FE00090F84B2003E090F8512000F14C01097972 +:100FF000102923D8072921D3E379994202DBA37969 +:10100000994200DB19462974C1B1002101621046E2 +:10101000FEF7F2FE216AC861FFF77AFF206A90F8B6 +:10102000241012A0E3F796FF206A90F82400052808 +:1010300017D2DFE800F0050909090D00062070BD90 +:10104000617901F0010106E06179C1F3800102E0FC +:101050006179C1F3400121B100B10120E8730020A2 +:1010600070BD032070BD000074010020534D503A44 +:101070002067656E65726174696F6E206D65746856 +:101080006F64202575000000014610220148E3F737 +:10109000DBB900008C730020014901200871704702 +:1010A0007401002010B5022101730088FEF768FA70 +:1010B000BDE81040FFF724BA10B5044600F026F84A +:1010C0002046BDE8104000F001B8000070B50D4C9E +:1010D0000546206A0561E5F70DFD2946206AE5F71A +:1010E0003DFD2A460849206AE5F73AFD47F23052AD +:1010F00040F28121206AE5F71BFD206ABDE87040BF +:10110000E5F7E8BC74010020A51002000148006A60 +:10111000E5F7F0BC7401002038B5044618480021FA +:10112000006A00F12502417690F824500121042D37 +:1011300016D2DFE805F01A021604A3782BB1417627 +:10114000A31D62792188D42014E00C211046E5F714 +:10115000C9FA009062792188A31DD220FEF76BFFA7 +:1011600038BDA378002BF0D1E9E741766279218878 +:10117000A31DD02001B0BDE83040FEF74ABF0000FB +:1011800074010020002203E0C1F10F03491CC25486 +:101190001029F9DB7047000070B50F49012208687B +:1011A00062F3020008600D4D0D4C0A1520462968B7 +:1011B000E3F74AF92868A0F54051CC390BD16968AA +:1011C000002908D04FF6FF7202E08B782354C91C27 +:1011D00008889042F9D170BD040409401004002031 +:1011E00000000A40FCB500250C4602462B4610784C +:1011F000571CFCF755FC06463878FCF751FC002ECE +:101200001BDB002819DB50EA061016D4921CE054B0 +:10121000052B08D012F8010B3A280BD02D2809D045 +:1012200020280AD106E000982060BDF804000125BE +:10123000A08002E05B1C062BD9DB2846FCBD10B564 +:101240000622E3F73AF908B1002010BD012010BDD5 +:1012500001480068704700004C04002002494A68B9 +:1012600002600989818070474C0400200248018A8D +:10127000016000F015BA00002C04002070B5284869 +:10128000D0F80413274C627D002A47D0E368D0F8D9 +:101290008050D9439D4211D0234B5D68C5F303159F +:1012A000022DFAD1C0F88010416D8906FCD5022AC2 +:1012B0000FD0032A23D0042A21D114E0C0F88010D3 +:1012C000032A01D0042A29D1BDE870400020E5F7A7 +:1012D0007FBA1648816821F480118160816841F4E9 +:1012E000801181600BE0D0F80C13114802691144A1 +:1012F00021F07F424FF0E0218A6180680861F4F7B5 +:101300006FFE000D40EA01302168814206D2218A39 +:1013100008442060BDE8704000F0C2B970BD000014 +:10132000000009402C040020000004400000074099 +:10133000A87800202DE9F0475D4CC8274FF0000841 +:101340005C4D064684F81580A4F10809022838D3BC +:10135000E07CB0B3207DA0BBA07C90BBD5F814038B +:10136000C0072ED100F0D4F8032E01D8022000E0EF +:1013700003206075192E0AD94F4802683AB14168B6 +:101380000120904718B104206075D9F8047006EB6D +:101390004600C0EBC610C7EBC000A16800F0D2F851 +:1013A00005F54075401EA860686820F440706860CC +:1013B000617D286861F302002860A5F54075E5F7B6 +:1013C000BFF93E4E306B40F020003063607D042852 +:1013D0001BD0C6F88C8088B1D5F88010A246C943CE +:1013E000E160C5F88010042813D238B105F54175C5 +:1013F00033486861286840F001002860BFF34F8FD0 +:1014000030BFBFF36F8FBDE8F0872E49C6F88C1050 +:10141000E2E706F5B276306840F001003060D9F8B6 +:101420000000C5F81803284F3968DFF88C90DFF802 +:10143000988009F1080908F11808C9F80010D8F8CF +:1014400000104FF0E024C9F804102169C9F8081011 +:101450006169C9F80C10A169C9F81010E2F790FE93 +:10146000306820F001003060D5F88010DAF80C0008 +:101470008142C8D0D9F800103960D9F80420C8F8E2 +:101480000020D9F8081021F001012161D9F80C00E1 +:101490006061A9F11000D0E90021002090470020F0 +:1014A000E3F7C8FCBDE8F0470120E3F7C3BC000048 +:1014B0002C04002000000940A07800200000044017 +:1014C00000FF6000C0FF3F0008ED00E010B50446DB +:1014D000E5F78EF9094900228A7458B104EB4401FA +:1014E000C1EBC411B0EBC10F06D24FF47A71B0FB5F +:1014F000F1F010BD01208874204610BD2C0400209E +:10150000024902684A608088088170474C040020C4 +:1015100010B50A4C0A48616811B1C0F8101310BD2B +:10152000D0F810230023581E01466260E2F748FFFE +:10153000000C40EA0140A06010BD00002C04002017 +:101540000000094010B5A0FB0134002202FB01415C +:1015500000FB0210190100D5401C10BD0148406875 +:10156000704700002C0400200149C8747047000037 +:101570002C04002010B500F093F80548D0F814139F +:10158000C907FBD1FFF7C4FF0248406810BD000047 +:10159000000009402C040020014908827047000027 +:1015A0002C040020034B43F8301003EBC0004260D2 +:1015B00070470000987800202DE9F04116460D464E +:1015C0000746B0F54E7F61D9314C00BFD4F8140303 +:1015D000C007FBD1FFF79CFFE3F734FA04F5407432 +:1015E000A760606820F440706060206820F0070009 +:1015F000001D206027480068A061274BA4F54074B7 +:1016000086B3304600262A18DF02DFF890C0521E4B +:1016100030464FF0010E00BF3CF810103944A9428B +:1016200005D9BA4203D30EFA00F73743FEB2401C85 +:10163000C0B20F460528EFD3186B40F020001863A6 +:1016400050330020D863988F66F3CF2098871F20EF +:10165000D98FB04360F3CF21D987D88F40F4F86099 +:10166000D88704E0FFE7186B20F020001863D4F857 +:10167000040340F00100C4F80403BFF34F8F30BFF0 +:10168000BFF36F8FBDE8F041E3F7E6B9BDE8F08145 +:10169000000009402404002000000440CC3E020069 +:1016A0000749002048600748D0F81413C90705D13E +:1016B000D0F8141341F00101C0F814137047000072 +:1016C0002C0400200000094018484168C1F30311B0 +:1016D0000229FAD1416E5C2262F3D0114166016D9C +:1016E000532262F31A410165016D21F0F0012031AE +:1016F0000165016D21F4706101F500710165016DF5 +:1017000021F4704101F580510165416D21F0FF0127 +:10171000891C4165416841F400014160016B41F061 +:10172000200101630021C0F88C10704700000440C4 +:10173000014AC2E9000170471C0000207FB5144631 +:101740000B4A0D46064607CA8DE80700E3F7ACFBD7 +:101750008DF80C608DF80D508DF80E40054C019001 +:101760000323646803AA09216846A0477FBD0000DF +:10177000203502001C0000201FB5084A044607CA95 +:101780008DE80700E3F790FB0394054C01900423D8 +:10179000646803AA09216846A0471FBD2C350200D2 +:1017A0001C000020FEB514460B4A0D46064607CA2B +:1017B0008DE80700E21CADF80220E3F775FB01900D +:1017C000ADF809608DF80B402346044C2A460C21E5 +:1017D00064686846A047FEBD383502001C00002042 +:1017E000FEB514460B4A0D46064607CA8DE80700AB +:1017F000A21CADF80220E3F757FB8DF809608DF8C5 +:101800000A402346044C01902A4664680B2168462E +:10181000A047FEBD443502001C0000203EB5074D28 +:101820002C68002C08D0CDE90002ADF80810ADF806 +:101830000A3068466968A0473EBD0000E004002009 +:101840003EB5094A0C46054607CA8DE80700ADF8C3 +:101850000240E3F729FB2346044C01902A466468C2 +:1018600009216846A0473EBD5C3502001C000020EF +:101870002DE9FE4316460E4A0D46074607CA0A9C46 +:101880008DE80700601C9846ADF80200E3F70CFBFA +:101890002346084C8DF8087066F35F0501908DF8BB +:1018A0000950646842460A216846A047BDE8FE83A5 +:1018B000503502001C00002070B515460E46044647 +:1018C000FCF73CF9401E80B2854208D22046E7F77B +:1018D00047F82046BDE870400021E5F79BBB608FCC +:1018E00028446087267070BD70B50C46C18D0546D2 +:1018F000A14201D8E5F710FA21462846BDE870401C +:10190000052200F011B870B515460E46044600F0E9 +:1019100007FD618F08446087204600F001FD08B193 +:10192000267070BD257070BD10B50446C08D88420C +:1019300008D82046E7F714F82046BDE810400021FB +:10194000E5F768BB491CA185227010BD2DE9F04761 +:10195000824619488946014602701D4614460027F2 +:101960005046EBF7D5FBF0B9781EBDE8F087A888A4 +:10197000D5F80080083586B2B44201D3012000E0DA +:1019800000208D220DA1E4F72FF8B44201D272B6E7 +:10199000FEE73346424639460748EBF727FDA01BD2 +:1019A00084B2B81987B2002CE1D1034A49465046A7 +:1019B000EBF78EFC0020D8E774040020636F6E7490 +:1019C000726F6C6C65727461736B2E630000000043 +:1019D0000249096831F91000704700002004002016 +:1019E00071B101290FD0A0F5BC706FF01A0101EBA5 +:1019F000E000091101EBE000002807DB80B270472E +:101A00005038C010F8E72C388010F5E700207047F8 +:101A100061B101290ED0C000012A0FD0C00000F52D +:101A2000AC7000BF00F5BC7080B27047502101EB74 +:101A3000C000F9E72C2101EB8000F5E740005630AB +:101A4000F0E7C0000C3880B2C8400830C0B2704720 +:101A50002DE9F05F81465006050E9B463C20164658 +:101A60000C460023DDF82C800BE000BF31F9132079 +:101A7000002A00DA5242B2FA82F2824200D21046C2 +:101A80005B1CAB42F2DB12280AD31138002205E0BE +:101A900031F81230834021F81230521CAA42F7DB91 +:101AA0004848407890B100200CE000BF34F8201086 +:101AB0000A1209EB40010A7004EB800252881212EC +:101AC0004A70401CB042F1DBBDE8F09F0846082296 +:101AD0000121E5F7F1FAFDF719F90746B4F902100B +:101AE000B4F90000FDF78CF8404201B20020FDF788 +:101AF000FBF8824601462046FDF76AF80125394683 +:101B00005046FDF7F1F8824604EB85005146FDF79B +:101B10005FF86D1C082DF2DB39460846FDF7E4F846 +:101B20000746BBF1020F10D139460846FDF7DCF835 +:101B300007460AE039465046FDF7D6F8824604EBE0 +:101B400085005146FDF744F86D1CB542F2DBB8F153 +:101B5000000022DD00270546042800DA450005F1D3 +:101B600008018E4219DBF21F294604F11C00E5F73B +:101B7000A3FA90FBF5F0FDF7C9F8804608250AE0C6 +:101B800041463846FDF7B0F8074604EB8500394674 +:101B9000FDF71EF86D1CB542F2DB00220FE000BF1E +:101BA00034F92200FCF718FF09EB4203187004EB2C +:101BB0008200B0F90200FCF70FFF5870521CB242CD +:101BC000EEDB81E7F401002038B5049C00940C465C +:101BD0000146204642F60544A04738BD10B58EB0F8 +:101BE000017B0DF1280CC47B837B427BACE81E009B +:101BF000017A0DF1180CC47A837A427AACE81E009F +:101C000001790DF1080CC47983794279ACE81E00A2 +:101C1000C2788178CDE900124378027803490448FC +:101C2000E3F774F90EB0024810BD00002837020037 +:101C30002469002070B50C46054610220449E2F7DD +:101C400003FC22462846BDE870400021E4F75ABD57 +:101C50001837020010B50C220449001DE2F72DFCD4 +:101C600008B1002010BD012010BD00001C3702008B +:101C7000D0E9013201699A60D0E901235A604A68CB +:101C8000824201D182684A60002202610868401ED7 +:101C9000086008687047000010B5040004D140F2E5 +:101CA0008A7105A0FBF7D4FF00F07AF8A46B00F06E +:101CB00097F8204610BD000071756575652E6300AC +:101CC00010B5040004D140F2AC7102A0FBF7C0FFD4 +:101CD000A06B10BD71756575652E630010B50400AD +:101CE00004D140F29B7106A0FBF7B2FF00F058F858 +:101CF000D4E90E10441A00F073F8204610BD00001D +:101D000071756575652E6300034B036003F1540024 +:101D1000086080201060704760050020034B03605E +:101D200003F154000860802010607047B407002061 +:101D3000012200210720E9F737BC00F108014FF02C +:101D4000FF32C0E90112C1600161002101607047EA +:101D500000210161704730B50B685A1C02D000F1B8 +:101D6000080202E0026904E02246546825689D42A8 +:101D7000FAD953684B6099608A60516008610168C4 +:101D8000491C016030BD42684A6093688B6093686B +:101D90005960916008610168491C0160704700004A +:101DA000202080F31188BFF34F8FBFF36F8F084956 +:101DB0004868401C4860012809D10648006810F0B6 +:101DC000FF0F04D04FF4B37103A0FBF741BF70477E +:101DD0007400002004ED00E0706F72742E63000048 +:101DE00010B5074C606820B940F26D1105A0FBF7F3 +:101DF0002FFF6068401E606001D180F3118810BD24 +:101E000074000020706F72742E63000070B500289B +:101E100028D0154DA0F108046068E968084204D193 +:101E20004FF48B7111A0FBF713FF206820B140F233 +:101E300017110EA0FBF70CFF6168E868014211D092 +:101E40002268002A0ED18143616000F01FFA6068A9 +:101E50006968084468602046FCF7E2FABDE8704013 +:101E600001F02ABA70BD00008C0000206865617026 +:101E70005F342E630000000007482021816007497D +:101E8000C160002101614FF0E020016181611F21EB +:101E9000416103210161704774000020FFFF0700CA +:101EA0002DE9F041334E0546F068854200D90546DC +:101EB0004FF0E024206920F001002061A169B268A0 +:101EC000681E02FB00173069874200D93F1A72B6BC +:101ED000BFF34F8FBFF36F8FE5F75AF858B36761C1 +:101EE0004FF00008C4F81880206940F0010020611C +:101EF0002846FFF71FFA4046FFF7C0F962B6BFF366 +:101F00004F8FBFF36F8F72B6BFF34F8FBFF36F8FDB +:101F1000022020612069C00314D5A069B168381A75 +:101F2000081A3269401E904201D3884200D9481EE7 +:101F30006061681E10E0A0696061206940F00100E6 +:101F4000206111E0B168A0694D432A1AB2FBF1F09B +:101F5000431C4B43991A6161C4F81880216941F010 +:101F60000101216100F07AF9B068401E606162B63B +:101F7000BDE8F0817400002010B5E2F7FDF80F4CC9 +:101F800010280CD34FF0E021084490F8F00321789A +:101F9000884204D240F2A52109A0FBF759FE0A4865 +:101FA0000068616900F4E060884206D9BDE810402D +:101FB00040F2B52102A0FBF74BBE10BD740000201B +:101FC000706F72742E6300000CED00E010B5040019 +:101FD00004D140F2B77106A0FBF73AFE94F8460030 +:101FE000002804D12046BDE81040FFF70FBF10BD08 +:101FF00071756575652E630070B515460E4604460D +:10200000FFF7CEFE94F944104FF00000491C01D1B7 +:1020100084F8440094F94510491C01D184F8450026 +:10202000FFF7DEFEA06B28B92A46314604F12400F2 +:1020300000F056F82046BDE87040FCF7E9BB000010 +:1020400010B5040011D00D48006B20B140F23C5196 +:102050000BA0FBF7FDFD00F019F900212046FBF76E +:1020600079FF01F029F9002807D107494FF0805086 +:102070000860BFF34F8FBFF36F8F10BD24000020A7 +:102080007461736B732E630004ED00E002490A6A09 +:102090000260C968416070472400002001490120A6 +:1020A000C86170472400002070B50D46040004D1BB +:1020B00040F6CE3107A0FBF7CBFD0848016820466B +:1020C0001831FFF748FE2846BDE870400121FBF7B4 +:1020D00041BF00007461736B732E63002400002005 +:1020E00070B514460D46060004D140F6F93109A03A +:1020F000FBF7AEFD0948016830461831FFF743FE93 +:102100000CB14FF0FF3521462846BDE87040FBF783 +:1021100021BF00007461736B732E630024000020E4 +:1021200070B50D46040047D0A06C20B94FF4815122 +:1021300022A0FBF78DFD606CA84200D30546E06A43 +:10214000A84239D0A06C012836D11E4E3068844296 +:1021500004D141F23B0119A0FBF77AFDE06AE56288 +:10216000A169002902DBC5F10F01A161164D00EB49 +:102170008000616905EB800081421DD1201DFFF7C1 +:1021800077FD012150B9E06A00EB800255F822206A +:1021900022B9326901FA00F082433261E06A3269A1 +:1021A00081401143316100EB800005EB8000211D6F +:1021B000BDE87040FFF7E7BD70BD00007461736B50 +:1021C000732E630024000020080A002030B587B079 +:1021D0000024039405AA04A903A80494FFF794FD1E +:1021E000DDE903010094CDE90110002315A1174892 +:1021F000059A00F0CDFE164D0028E8621FD001F0D0 +:10220000F5F8012809D0401C19D107B04FF402613C +:10221000BDE830400FA0FBF71BBD202080F31188E4 +:10222000BFF34F8FBFF36F8F4FF0FF30A8620120D5 +:102230006861EC6007B0BDE8304000F083B807B0DB +:1022400030BD000049444C45000000005DE2010043 +:10225000240000207461736B732E630070B5084C0A +:102260000546E068A16A2844884204D940F6152151 +:1022700004A0FBF7EDFCE0682844E06070BD0000BE +:10228000240000207461736B732E63000248016B9D +:10229000491C0163704700002400002070B5134CF6 +:1022A000206B10B10120E06170BD0020E061206969 +:1022B0000F4EB0FA80F0C0F11F0000EB800556F819 +:1022C000250020B940F6B7310AA0FBF7C1FC06EBA8 +:1022D000850000F10802416849684160914201D1DE +:1022E00049684160C868206070BD0000240000207B +:1022F000080A00207461736B732E630080B2020AB7 +:10230000C3B2891CC8B21946FFF718BA401E042888 +:1023100004D20122196882401143196000207047DD +:1023200010B50446FBF70AFC401F618FA28F80B2F4 +:10233000914201D3002010BD511A89B28842FAD9C6 +:10234000084610BD7CB5294D28780190FF202870E3 +:1023500028788DF800009DF800009DF8001000F02E +:10236000E000884204D04FF48A7121A0FBF770FC92 +:102370009DF80000204C00F02000207007206061D4 +:1023800008E000BF9DF80010A0F101004FEA4101F4 +:102390008DF800109DF800100906F3D46061042840 +:1023A0000CD040F2271112A0FBF752FC6069042800 +:1023B00004D04FF498710EA0FBF74AFC207D000278 +:1023C00000F4E0606061019828700C48016841F4F5 +:1023D00060010160016841F060410160FFF74CFD60 +:1023E00000206060E1F792FE00207CBD00E400E088 +:1023F000706F72742E6300007400002020ED00E006 +:1024000070B50D460446FFF7CBFCA06C08B9A06B75 +:1024100008B1002401E0A5640124FFF7E1FC204697 +:1024200070BD000070B50C46050004D140F2D52106 +:1024300009A0FBF70DFCAC4204D940F2D62106A05E +:10244000FBF706FC02220021284600F047F800288E +:1024500000D0846370BD000071756575652E6300E2 +:10246000F8B516460C46050004D140F2B9210BA080 +:10247000FBF7EEFBAC4204D940F2BA2107A0FBF710 +:10248000E7FB02200022009033461146284600F068 +:102490004BF8002800D08463F8BD000071756575A5 +:1024A000652E630010B502460021012000F016F8E9 +:1024B0000446FBF71FFF204610BD38B50B4600222F +:1024C00000901146012000F02FF80446FBF712FFA0 +:1024D000204638BD00220421AFF30080F8B517462E +:1024E0000E46050004D14FF4BB710DA0FBF7B0FB05 +:1024F0009EB105FB06F04C30FCF7C6F904000AD08B +:10250000002084F8460004F14C023B463146284640 +:102510000094FBF7FAFE2046F8BD0020EBE7000030 +:1025200071756575652E63002DE9F8431C46DDF86D +:10253000208016460D46070004D14FF49D7112A06D +:10254000FBF786FB24B94FF49F710FA0FBF780FBCC +:102550001EB145B94FF4A17102E025B140F243111B +:1025600009A0FBF775FB4C2000904CB1012084F8CA +:10257000460043463246294638460094FBF7C5FEDE +:102580002046BDE8F883000071756575652E63000F +:1025900070B50D46040004D140F203111CA0FBF7F6 +:1025A00057FBFFF7FDFBD4E90F20216802FB001168 +:1025B000A1600021A163216861600A46E06B216C83 +:1025C000401E00FB0121E16004F144014FF0FF30A7 +:1025D0000870487004F1100055B1FFF7AEFB04F12C +:1025E0002400FFF7AAFB00BFFFF7FAFB012070BD34 +:1025F00021690029F8D000F01FFE0028F4D0064918 +:102600004FF080500860BFF34F8FBFF36F8FEBE741 +:1026100071756575652E630004ED00E02DE9FF47D7 +:1026200082B01D468A464FF00008040004D140F2F3 +:10263000F12152A0FBF70CFBBAF1000F06D1206C80 +:1026400020B140F2F2214DA0FBF702FB022D07D191 +:10265000E06B012804D040F2F32148A0FBF7F8FA20 +:1026600000F0D4FC30B9049820B140F2F62143A028 +:10267000FBF7EEFA434F4FF000094FF0805600BFD2 +:10268000FFF78EFBA06BE16B884207D3022D05D0CC +:10269000049840B3B8F1000F28D02CE0D4F838806B +:1026A0002A4651462046FBF72CFDA16C49B1022D6C +:1026B00002D1B8F1000F10D129462046FBF700FFE8 +:1026C00005E0616A19B104F1240000F0B5FD20B104 +:1026D0003E60BFF34F8FBFF36F8FFFF781FB012089 +:1026E00006B0BDE8F087FFF77BFB22E06846FFF706 +:1026F000CDFC4FF00108FFF773FBFFF7C7FDFFF7B5 +:102700004FFB94F94400401C01D184F8449094F9A3 +:102710004500401C01D184F84590FFF761FB04A9F6 +:10272000684600F0CFFB30B12046FCF771F800F0AE +:10273000C3FD0020D4E7FFF733FBA06BE16B8842B9 +:1027400013D1FFF74DFB04F110000499FFF7ACFC27 +:102750002046FCF75DF800F0AFFD002890D13E6008 +:10276000BFF34F8FBFF36F8F8AE7FFF739FB204628 +:10277000FCF74EF800F0A0FD82E70000717565756A +:10278000652E630004ED00E02DE9F04798461746FA +:102790008946040004D140F2C33129A0FBF758FA5E +:1027A000B9F1000F06D1206C20B14FF4717124A053 +:1027B000FBF74EFAB8F1020F07D1E06B012804D005 +:1027C00040F2C5311EA0FBF743FAFFF7D5FB2020EE +:1027D000EFF3118680F31188BFF34F8FBFF36F8F34 +:1027E000A06BE16B884207D3B8F1020F04D0002040 +:1027F00086F31188BDE8F08794F945504246494672 +:102800002046FBF77EFC681C04D06D1C84F8455004 +:102810000120EDE7A06C012520B141462046FBF7E1 +:102820004FFE06E0606A0028F2D004F1240000F0B8 +:1028300003FD0028ECD0002FEAD03D60E8E700005F +:1028400071756575652E63002DE9F0410E46040033 +:1028500004D14FF48C6123A0FBF7FAF9206C20B16E +:1028600040F264411FA0FBF7F3F9206830B9A0687B +:1028700020B140F269411BA0FBF7EAF9FFF77CFBAE +:102880002020EFF3118580F31188BFF34F8FBFF342 +:102890006F8FA16BE06B88421FD994F94500491CEA +:1028A000A163411C04D0401C84F84500012015E0C0 +:1028B000A06C012720B100212046FBF701FE06E0B5 +:1028C000606A0028F2D004F1240000F0B5FC002872 +:1028D000ECD0002EEAD03760E8E7002085F31188BD +:1028E000BDE8F08171756575652E630010B5040053 +:1028F00004D140F259210BA0FBF7AAF900F080FBAC +:10290000A16888420BD1E068401EE06005D1002339 +:102910001A4619462046FFF781FE012010BD00200F +:1029200010BD000071756575652E630010B504005B +:1029300004D140F6091104A0FBF78AF9A06B08B195 +:10294000002010BD012010BD71756575652E6300F6 +:1029500010B5040004D140F6311105A0FBF778F959 +:10296000A06BE16B884201D1012010BD002010BD99 +:1029700071756575652E63002DE9F743002582B0FA +:102980008946040004D14FF4CD6142A0FBF760F901 +:10299000B9F1000F06D1206C20B140F26C613DA06E +:1029A000FBF756F900F032FB30B9049820B140F241 +:1029B000716138A0FBF74CF9384F4FF000084FF029 +:1029C000805600BFFFF7ECF9A06BB8B1494620462E +:1029D000E568FBF783FBE560606A48B104F1240019 +:1029E00000F02AFC20B13E60BFF34F8FBFF36F8F22 +:1029F000FFF7F6F9012005B0BDE8F083049808B1AF +:102A00001DB106E0FFF7ECF927E06846FFF73EFB53 +:102A10000125FFF7E5F9FFF739FCFFF7C1F994F954 +:102A20004400401C01D184F8448094F94500401CC6 +:102A300001D184F84580FFF7D3F904A9684600F076 +:102A400041FA002820460AD0FBF7E2FE00F034FCF1 +:102A50002046FBF727FD0028B4D00020CBE7FBF78A +:102A600021FD88B104F124000499FFF71DFB2046E5 +:102A7000FBF7CEFE00F020FC0028A3D13E60BFF3A0 +:102A80004F8FBFF36F8F9DE72046FBF7C1FE00F02D +:102A900013FC97E771756575652E630004ED00E022 +:102AA0002DE9F0410E46040004D140F2577115A003 +:102AB000FBF7CEF836B9206C30B14FF4EB6111A0C2 +:102AC000FBF7C6F8206C20B940F259710DA0FBF756 +:102AD000BFF8FFF751FA2020EFF3118580F311883A +:102AE000BFF34F8FBFF36F8FA06B30B131462046DD +:102AF000E768FBF7F3FA0120E76085F31188BDE88A +:102B0000F081000071756575652E63002DE9F7474A +:102B1000002683B08A46040004D14FF4A06143A08C +:102B2000FBF796F8BAF1000F06D1206C20B140F205 +:102B300004513EA0FBF78CF800F068FA30B9059814 +:102B400020B140F2095139A0FBF782F84FF000099B +:102B50004FF08057DFF8DC80FFF722F9A56BC5B195 +:102B600051462046FBF7BAFA6D1EA563206950B1A5 +:102B700004F1100000F060FB28B1C8F80070BFF34A +:102B80004F8FBFF36F8FFFF72BF9012006B0BDE821 +:102B9000F087059808B11EB106E0FFF721F927E09C +:102BA0006846FFF773FA0126FFF71AF9FFF76EFB85 +:102BB000FFF7F6F894F94400401C01D184F84490E2 +:102BC00094F94500401C01D184F84590FFF708F9BD +:102BD00005A9684600F076F9002820460AD0FBF7E0 +:102BE00017FE00F069FB2046FBF75CFC0028B3D021 +:102BF0000020CBE7FBF756FC90B104F124000599C7 +:102C0000FFF752FA2046FBF703FE00F055FB0028C1 +:102C1000A2D1C8F80070BFF34F8FBFF36F8F9BE74F +:102C20002046FBF7F5FD00F047FB95E771756575EC +:102C3000652E630004ED00E02DE9F04790468946DB +:102C4000040004D140F2FB611EA0FBF701F8B9F1CA +:102C5000000F06D1206C20B140F2FC6119A0FAF7F8 +:102C6000F7FFFFF789F92020EFF3118680F3118831 +:102C7000BFF34F8FBFF36F8FA76BF7B194F9445039 +:102C800049462046FBF72AFA7F1EA763681C04D03A +:102C90006D1C84F84450012010E020690028FAD00F +:102CA00004F1100000F0C8FA0028F4D0B8F1000FC9 +:102CB000F1D00121C8F80010EDE7002086F311885B +:102CC000BDE8F08771756575652E630010B5044623 +:102CD000806C884201D1A06B08B1002010BDFFF7C5 +:102CE0005FF80020A064FFF77BF8012010BD08B555 +:102CF000002200920A466946FFF708FF009808BDC7 +:102D000008B500210A4600916946FFF795FF009833 +:102D100008BD00002DE9F343002683B004003546CA +:102D200004D140F2915153A0FAF792FF206C20B1E8 +:102D300040F295514FA0FAF78BFF00F067F930B9D8 +:102D4000049820B140F29A514AA0FAF781FFDFF8C7 +:102D50002C814FF000094FF0805700BFFFF720F89B +:102D6000A06BC8B1401EA063206810B9FBF700FE3D +:102D7000A060206950B104F1100000F05DFA28B1A4 +:102D8000C8F80070BFF34F8FBFF36F8FFFF728F8BD +:102D9000012005B0BDE8F083049808B14EB10CE005 +:102DA00025B140F2E15133A0FAF752FFFFF718F8CE +:102DB0005EE06846FFF76AF90126FFF711F8FFF7B2 +:102DC00065FAFEF7EDFF94F94400401C01D184F848 +:102DD000449094F94500401C01D184F84590FEF7D9 +:102DE000FFFF04A9684600F06DF80028204612D0C5 +:102DF000FBF70EFD00F060FA2046FBF753FB0028BE +:102E0000ACD075B3FEF7CCFF606A58B3206B006896 +:102E1000C0F10F0128E0FBF745FBE0B1206838B9AD +:102E2000FEF7BEFFA06800F0BDF90546FEF7D8FF2B +:102E300004F124000499FFF737F92046FBF7E8FC7A +:102E400000F03AFA002889D1C8F80070BFF34F8F1C +:102E5000BFF36F8F82E72046FBF7DAFC00F02CFA15 +:102E60007CE705E0FFE70021A068FFF759F99DE73F +:102E700000208EE771756575652E630004ED00E036 +:102E800070B50D46040004D14FF424710BA0FAF77D +:102E9000DFFE00F0B5F8A168884204D1E068401C6C +:102EA000E060012070BD29462046FFF733FF00286F +:102EB000F8D0E168491CE16070BD0000717565756E +:102EC000652E63002DE9F0410C46050004D140F663 +:102ED000944115A0FAF7BCFE24B940F6954112A022 +:102EE000FAF7B6FEFEF75CFF114EF2686B682068D9 +:102EF000D11A471C07D02F68366AB74209D09342CF +:102F000007D8012400E00024FEF76AFF2046BDE850 +:102F1000F081884205D9401A20602846FFF7B6F8AC +:102F2000F1E700202060ECE77461736B732E63009F +:102F3000240000202DE9FF5F8346DDE90E879946D6 +:102F400016468A469000FBF79FFC05001CD05420D3 +:102F5000FBF79AFC040014D00020256384F851008C +:102F6000CDE90240CDE900874B46324651465846EE +:102F7000FBF7DAF92046FBF725F8012004B0BDE89D +:102F8000F09F2846FEF742FF4FF0FF30F6E70000C3 +:102F90002DE9F04786B01F46DDE90F540E9E90469E +:102FA0008946824625B940F24D2113A0FAF750FE1A +:102FB00024B940F24E2110A0FAF74AFE54200090A6 +:102FC0000020B4B1ADB10221256384F85110039003 +:102FD00004A90096CDE901143B46424649465046B5 +:102FE000FBF7A2F92046FAF7EDFF049806B0BDE81A +:102FF000F0870490FAE700007461736B732E63002E +:10300000014800687047000024000020054841691D +:1030100019B1006B18B100207047012070470220E1 +:1030200070470000240000200148C068704700007D +:103030002400002010B5FEF79FFF0148C06810BDB6 +:10304000240000202DE9F0412D4C0027206B40B1D9 +:10305000A069401CA061E06900B101273846BDE8C5 +:10306000F081E668761CE66010D1606B006820B1E4 +:1030700040F67F2123A0FAF7EBFD606BA16B616343 +:10308000A063206A401C2062FBF73CFBA06ADFF8CB +:103090007C80864209D3606B006880B1606BC06839 +:1030A000C568686886420DD2A0622068C06A00EBDD +:1030B000800158F821000128CDD90127CBE74FF036 +:1030C000FF30F1E7281DFEF7D3FDA86A18B105F11E +:1030D0001800FEF7CDFDE86A012122698140114305 +:1030E000216100EB800108EB8100291DFEF74BFEFA +:1030F000E86A2168C96A8842CDD30127CBE700007E +:10310000240000207461736B732E6300080A002092 +:1031100070B504004FF000063AD01E4D2868844276 +:1031200004D040F6D1711CA0FAF792FDA06C20B932 +:1031300040F6D27118A0FAF78BFDA06C401EA06477 +:10314000626CE16A914223D010BB201DFEF790FD16 +:10315000134A012150B9E06A00EB800352F8233092 +:1031600023B92B6901FA00F083432B61606CE062A4 +:10317000C0F10F00A061E06A2B6981401943296109 +:1031800000EB800002EB8000211DFEF7FCFD012614 +:10319000304670BD240000207461736B732E630091 +:1031A000080A002070B504004FF0000038D0204D10 +:1031B000E16A2A68D26A914233D2A069002804DB0E +:1031C0002868C06AC0F10F00A0611A4E01EB8101AE +:1031D000606906EB810188421ED1201DFEF748FD83 +:1031E000012150B9E06A00EB800256F8222022B992 +:1031F0002A6901FA00F082432A612868C06AE06205 +:103200002A6981401143296100EB800006EB8000B0 +:10321000211DFEF7B8FD02E02868C06AE0620120C7 +:1032200070BD616C2A68D26A9142F8D370BD00000B +:1032300024000020080A00202DE9F041C068C4687D +:1032400024B940F6294117A0FAF702FD04F118004D +:103250000746FEF70DFD154D286B012660B1394676 +:103260001348FEF790FDE06A2968C96A884217D9B9 +:103270000120EE61BDE8F081201DFEF7F9FCE16A56 +:103280002A6906FA01F01043286101EB810009491F +:1032900001EB8000211DFEF776FDFBF733FAE2E734 +:1032A0000020E7E77461736B732E63002400002035 +:1032B0005C0B0020080A00202DE9F0472B4C00256C +:1032C0002E46206B20B940F6850129A0FAF7C0FCF4 +:1032D000FEF766FD206B401E2063206BE8BBA168F3 +:1032E000254F0120C9B3A7F5AA7980463868E8B10F +:1032F000F868C56805F11800FEF7BAFC281DFEF74E +:10330000B7FCE86A226908FA00F11143216100EB79 +:10331000800109EB8100291DFEF735FDE86A21686F +:10332000C96A8842E2D3C4F81C80DFE70DB1FBF71D +:10333000E9F9A56945B14746FFF784FE00B1E761A9 +:103340006D1EF9D10020A061E06930B10B49012662 +:1033500030070860BFF34F8F00E001E0BFF36F8FCD +:10336000FEF73EFD3046BDE8F08700002400002057 +:103370007461736B732E63005C0B002004ED00E03E +:103380002DE9FC4781461E461746884628200A9D9F +:10339000FBF77AFA04000AD0002084F82400CDE973 +:1033A000005433463A4641464846FBF70FF820465C +:1033B000BDE8FC877CB52826DDE90654009644B1BB +:1033C000022684F82460CDE90054FAF7FFFF204676 +:1033D0007CBD4FF4A57102A0FAF73AFCF7E70000B4 +:1033E00074696D6572732E630000000030B587B09C +:1033F0000024FAF74FFE114D2868B0B10020039069 +:10340000049005AA04A903A8FEF788FCDDE90321BE +:103410000E208DE80700002309A10B48059AFFF74D +:10342000B7FD686008B1012404E040F2131107A061 +:10343000FAF70EFC07B0204630BD00006000002007 +:10344000546D722053766300EDE7010074696D6579 +:1034500072732E63000000002DE9FE4F9946DDF8DF +:1034600030A090460E4607004FF0000404D14FF400 +:10347000C17111A0FAF7ECFB124D286880B1CDE9BB +:1034800000680297062E10DAFFF7C0FD02284FF001 +:10349000000308D0002269462868FFF7BFF80446F9 +:1034A0002046BDE8FE8F5246F5E700234A466946AE +:1034B000FFF76AF9F3E7000074696D6572732E63B4 +:1034C000000000006000002010B5040004D140F2AC +:1034D000D31102A0FAF7BCFB606810BD74696D657A +:1034E00072732E6300000000FDB40000E9B4000018 +:1034F0000100000802040506090E0F1011121A1827 +:1035000001735C0173A00174DE0100E8016A22020C +:10351000002C026A660210700260FFFF00000000CB +:10352000EFBE03000000000000000000EFBE04003A +:103530000000000006000000EFBE000000000000D8 +:1035400001000000EFBE00000000000002000000CB +:10355000EFBE00000000000000000000EFBE000011 +:103560000000000005000000FB349B5F800000802D +:1035700000100000000000006174745F76616C69E7 +:10358000646174655F73656375726974792E206612 +:103590006C61677320307825303478202D20726577 +:1035A0007120656E632073697A652025752C206112 +:1035B0007574686F72697A65642025752C20617551 +:1035C0007468656E746963617465642025752C2068 +:1035D000656E6372797074696F6E5F6B65795F7326 +:1035E000697A6520257500004154545F46494E4470 +:1035F0005F42595F545950455F56414C55455F52A3 +:103600004551554553543A2066726F6D202530342C +:103610005820746F20253034582C20747970652020 +:10362000253034582C2076616C75653A20000000F6 +:103630004154545F524541445F42595F47524F5590 +:10364000505F545950455F524551554553543A20A7 +:1036500066726F6D202530345820746F2025303409 +:10366000582C206275666665722073697A6520251C +:10367000752C20747970653A200000006174745FC5 +:103680007061636B65745F68616E646C65723A202B +:1036900064726F7070696E672061747420706475F5 +:1036A000203078253032782061732073697A652064 +:1036B0002575203E206174745F7265717565737441 +:1036C0005F62756666657220257500006174745FBF +:1036D0007061636B65745F68616E646C65723A20DB +:1036E000736B697070696E672061747420706475A3 +:1036F00020307825303278206173207365727665CA +:1037000072206E6F742069646C6520287374617414 +:103710006520257529000000000000000000100051 +:10372000800000805F9B34FB253032782530327872 +:1037300025303278253032782D25303278253032D8 +:10374000782D25303278253032782D253032782585 +:103750003032782D25303278253032782530327865 +:10376000253032782530327825303278000000005C +:103770005065726970686572616C206D747520693E +:1037800073206E6F7420696E697469616C697A6503 +:10379000640000004741545420636C69656E7420D6 +:1037A00074696D656F75742073746F702C20686117 +:1037B0006E646C6520307825303278007C6900209A +:1037C00051200000224E020052200000D24D020083 +:1037D00053200000C04D020054200000C64D0200DE +:1037E00055200000D14D020056200000CB4D0200B4 +:1037F00057200000DF4D020058200000044E020058 +:1038000059200000DF4D02005A200000ED4D02005B +:103810005B200000DB4D02005C200000D54D020063 +:103820005D200000D64D020001FC0000E24D0200C8 +:103830006863692E633A2061636C5F68616E646CD3 +:1038400065722063616C6C656420776974682041DF +:10385000434C207061636B6574206F662077726FD4 +:103860006E672073697A652025752C2065787065F0 +:1038700063746564202575203D3E2064726F70700E +:10388000696E67207061636B6574000041434C2072 +:10389000436F6E7420467261676D656E7420746F3D +:1038A000206C617267653A20636F6D62696E656452 +:1038B000207061636B6574202575203E20627566FB +:1038C0006665722073697A6520257520666F72209F +:1038D00068616E646C6520307825303278000000B5 +:1038E00041434C20466972737420467261676D656E +:1038F0006E7420627574206461746120696E206248 +:10390000756666657220666F722068616E646C65AC +:10391000203078253032782C2064726F7070696E98 +:1039200067207374616C6520667261676D656E7483 +:103930007300000041434C20466972737420467244 +:1039400061676D656E7420746F206C617267653A93 +:1039500020667261676D656E74202575203E206259 +:1039600075666665722073697A6520257520666FB5 +:10397000722068616E646C65203078253032780082 +:103980004254535441434B5F4556454E545F504F4C +:103990005745524F4E5F4641494C45440000000098 +:1039A0006863692E633A206576656E745F68616E40 +:1039B000646C65722063616C6C65642077697468FF +:1039C000206576656E74207061636B6574206F6628 +:1039D0002077726F6E672073697A652025752C20B9 +:1039E0006578706563746564202575203D3E2064AC +:1039F000726F7070696E67207061636B6574000030 +:103A00004843495F4556454E545F524541445F52D5 +:103A1000454D4F54455F535550504F525445445FA8 +:103A200046454154555245535F434F4D504C4554C4 +:103A3000452C20626F6E64696E6720666C616773E7 +:103A40002025782C206553434F2025750000000069 +:103A500006040000DF4D020011040000EF4D0200DB +:103A600013040000DF4D02001B040000EF4D0200B4 +:103A70001D040000EF4D0200030C000000000000D8 +:103A80007C0C0000F14D020005140000EF4D020017 +:103A900005200000F54D0200072000000000000096 +:103AA0000E200000000000001020000000000000B8 +:103AB00011200000F44D020012200000F44D02001D +:103AC00013200000F74D020014200000FF4D0200FB +:103AD00015200000EF4D020016200000EF4D0200FF +:103AE00017200000024E0200182000000000000015 +:103AF00019200000054E02001A2000000B4E0200A3 +:103B00001B200000EF4D020020200000F74D0200B6 +:103B1000222000000E4E020030200000F24D020074 +:103B200031200000C74D020032200000124E02007A +:103B300035200000F44D020036200000184E02002F +:103B400037200000284E020038200000284E0200D6 +:103B500039200000D24D02003C200000E04D020060 +:103B60003D200000E04D02003E2000002E4E0200ED +:103B70003F200000294E020040200000D24D0200EC +:103B800041200000C74D020042200000334E0200D9 +:103B900043200000384E0200442000003E4E020048 +:103BA000452000000000000046200000EF4D02000C +:103BB000472000003A4E0200482000003A4E020022 +:103BC00049200000000000004A2000000000000022 +:103BD000FF000000000000000000000000000000E6 +:103BE0004C324341505F4556454E545F4348414E29 +:103BF0004E454C5F4F50454E45442073746174757B +:103C000073203078257820616464722025732068E1 +:103C1000616E646C6520307825782070736D20307B +:103C2000782578206C6F63616C5F636964203078FD +:103C300025782072656D6F74655F636964203078E4 +:103C40002578206C6F63616C5F6D74752025752C11 +:103C50002072656D6F74655F6D74752025752C20FD +:103C6000666C7573685F74696D656F757420257512 +:103C7000000000006C326361705F73746F705F727C +:103C8000747820666F72206C6F63616C2063696466 +:103C900020307825303278004C324341505F455611 +:103CA000454E545F494E434F4D494E475F434F4E3B +:103CB0004E454354494F4E20616464722025732061 +:103CC00068616E646C6520307825782070736D2093 +:103CD00030782578206C6F63616C5F636964203095 +:103CE0007825782072656D6F74655F636964203034 +:103CF000782578006C32636170207265636569763F +:103D000065642072656D6F746520737570706F7275 +:103D10007465642066656174757265732C207365C3 +:103D2000635F6C6576656C5F305F616C6C6F776547 +:103D30006420666F722070736D202575203D2025EC +:103D4000750000000000000000000000FFFFFFFF02 +:103D5000000000000B01000002000200000200024F +:103D60000101030001000000000001010200010048 +:103D7000252D36732030782530347800736D3A2045 +:103D8000636F6E6E656374696F6E2030782578207E +:103D900072656C656173656420736574757020630A +:103DA0006F6E746578740000736D5F6B65795F6426 +:103DB0006973747269627574696F6E5F616C6C5F50 +:103DC00072656365697665643A20726563656976D4 +:103DD0006564203078253032782C206578706563F2 +:103DE00074696E6720307825303278006761705FC3 +:103DF00072616E646F6D5F616464726573735F742A +:103E000072696767657200000000000091B50000EC +:103E10008DB5000081B5000000000000A5D00000B5 +:103E20005BD000002DB500004D190200000000001D +:103E3000000000002000800000C00000000004001E +:103E400000002822000000000000000000F7FFFF33 +:103E50007F00000000F001F8FFFFFF0300000000FA +:103E60000000000000000000000000000000000052 +:103E7000000000003FF9FF0700000000FFFFFFFF08 +:103E8000FF01000000000000E84702004404002099 +:103E900003000100F401FA00960064004B003200B8 +:103EA0001E001400000000000000000000000000E0 +:103EB00000000000626C6535305F6C6C645F6563A8 +:103EC00070742E63000048082804904200200020EF +:103ED000004000400040000000000000A448020034 +:103EE0005E0400200100010006040304000001003C +:103EF0007D9D00001D040202010001007D9D000067 +:103F0000010C08080000030059D40100030C000054 +:103F100002000300000000002D0C03040200010059 +:103F20007D9D0000310C01010300030059D4010004 +:103F3000330C070804000300DD9F0000350CFD2250 +:103F400005000300ED9F0000630C0808010003005A +:103F500059D401007B0C02020400010059D4010075 +:103F60007C0C04040500010059D40100011000007C +:103F7000060003000000000002100000070003001C +:103F80000000000003100000080003000000000013 +:103F900005100000090003000000000009100000E7 +:103FA0000A000300000000000514020203000100E3 +:103FB0007D9D0000012008080B00030059D401007A +:103FC000022000000C00030000000000032000009D +:103FD0000D00030000000000052006060E0003008F +:103FE00059D4010006200F100000000059D4010030 +:103FF000072000000F000300000000000820202020 +:104000000100000059D40100092020200200000016 +:1040100059D401000A2001010300000059D4010015 +:104020000B2007071700030059D401000C200202DF +:104030001800030059D401000D20191904000000D4 +:1040400059D401000E20000005000000000000000F +:104050000F200000100003000000000010200000EE +:104060000600000000000000112007070700000004 +:1040700059D40100122007070800000059D401009C +:1040800013200E0E060001007D9D00001420050582 +:104090000900000059D401001520020207000100A8 +:1040A0007D9D000016200202080001007D9D000099 +:1040B000172020201100030059D40100182000000F +:1040C000120003000000000019201C1C0900010060 +:1040D0007D9D00001A2012120A0001007D9D000043 +:1040E0001B2002020B0001007D9D00001C2000002F +:1040F00013000300000000001D20010F0B00000052 +:10410000E59D00001E20030F0C000000FB9D000039 +:104110001F2000000A0000000000000020200E0EFA +:104120000D0001007D9D0000212003040E00010010 +:104130007D9D0000222006060C0001007D9D0000F0 +:1041400023200000150003000000000024200404C8 +:104150001600030059D401002F20000014000300B2 +:104160000000000030200202100001007D9D0000D0 +:10417000312003031A00030059D40100322007073D +:10418000110001007D9D00003320030F0B00000093 +:10419000CD9D00003420040F0C000000D99D0000CC +:1041A000352007070D000000719D00003620191909 +:1041B0000E000000719D00003720FFFF0F0000007F +:1041C000719D00003820FFFF10000000719D00006D +:1041D000392022221100000059D401003A200000A9 +:1041E0001B000300000000003B2000001C00030037 +:1041F000000000003C20010112000000719D000041 +:104200003D20000013000000000000003E200707D2 +:1042100014000000719D00003F20FFFF150000000A +:10422000719D0000402002021600000059D40100D8 +:1042300041200E0E2400030081A500004220060646 +:104240002500030059D4010043203C3C1700000026 +:10425000779E000044200E0E2600030059D4010072 +:104260004520000027000300000000004620020255 +:1042700001000400F19D0000472008081E00030013 +:1042800059D40100482008081F00030059D4010038 +:104290004920000020000300000000004A20000028 +:1042A00021000300000000004B2000001D0003005F +:1042B000000000004C20000022000300000000006D +:1042C0004D2004042300030059D401004F200F0F98 +:1042D0000B00000059D4010050200F0F0C0000000B +:1042E00059D4010051200D0D18000000719D0000EF +:1042F0005220020219000000719D000053200E0E92 +:1043000002000400F19D000054200D0D1200010078 +:104310007D9D000055200C0C130001007D9D0000C8 +:1043200056200707140001007D9D0000572003035D +:10433000150001007D9D00005820000028000300AA +:10434000000000005920030303000400F19D000059 +:104350005A200606160001007D9D00005B20050521 +:10436000170001007D9D00005C2008081800010076 +:104370007D9D00005D2006062900030059D4010040 +:104380005F2001012A00030059D4010001FC1E1E18 +:104390001900030059D40100FB010000DD9B00005F +:1043A000FE01000015A00000FB010620DD9B0000BF +:1043B000FB010820DD9B0000FB010920DD9B0000C4 +:1043C000FB010A20DD9B0000FB010E20DD9B0000AD +:1043D000FB011020DD9B0000FB011120DD9B000094 +:1043E000FB011220DD9B0000FB011420DD9B00007F +:1043F000FB031F2073A20000FB023620DD9B0000A0 +:10440000FE000000A9A10000FA000D20859C00001C +:10441000FE00000037A10000FE00000091A0000097 +:10442000FE000000D5A10000FE000000A3A10000D6 +:10443000FE00000023A20000FB010000DD9B000045 +:10444000FB01010CDD9B0000FB01310CDD9B00003A +:10445000FB01330CDD9B0000FB01350CDD9B0000F4 +:10446000FB09011091A30000FB410210DD9B00003D +:10447000FB090310DD9B0000FB0805107DA3000075 +:10448000FB070910DD9B0000FB033A20DD9B0000C9 +:10449000FB023B20DD9B0000FB034B20DD9B00006B +:1044A000FB024A20DD9B0000FB054C20DD9B000049 +:1044B000FE00000029A20000FE000000DBA10000B9 +:1044C000FE000000FDA10000FB055820DD9B000060 +:1044D000FB010120DD9B0000FB0402202FA2000055 +:1044E000FB090320DD9B0000FB010520DD9B000094 +:1044F000FB020720DD9B0000FB020F20DD9B00007C +:10450000FB111720DD9B0000FB0F01FCDD9B000071 +:10451000FB091820DD9B0000FB091C20DD9B00002F +:10452000FB092F20DD9B0000FB052320DD9B000005 +:10453000FB012420DD9B0000FA000604859C00009E +:10454000FA001D04859C0000FB042D0CD1A3000083 +:10455000FB040514C3A30000FE0000005B9D0000E7 +:10456000FE001D04A5A30000FE00000001A3000042 +:10457000FE0100002D9D0000FE041920459E000054 +:10458000FE0019205B9E0000FB0000001FA1000040 +:10459000FB057B0CDD9B0000FA001320859C0000CE +:1045A000FB0815203FA20000FA001620859C0000A1 +:1045B000FA001920859C0000FE00132043A1000092 +:1045C000FE0C162067A20000FE0D00006BA100008B +:1045D000FE0000001DA20000FB0B22204FA10000E6 +:1045E000FB010000F9A60000FB053020DD9B000068 +:1045F000FE000000F1A10000FE000000BFA10000CD +:10460000FE000000CFA10000FE000000F7A10000A6 +:104610000000000000000000FB000000259F0000DB +:10462000FB0000007D9F0000FB0000004D9F00008C +:10463000FE00000003A20000FE00000009A200002E +:10464000FE000000AFA10000504C0200704C0200C0 +:104650005F040020040008000F000300BD320100C9 +:104660000B000300313401000C000300153301007E +:104670000D0003003D3301000E000300593401001A +:10468000100003000D340100110003004D2B010048 +:10469000120003009132010013000300DD3301001A +:1046A000140003006D33010015000300A93301005D +:1046B00016000300453501000A0003004D3B0100D0 +:1046C000060003000D3C010007000300A93B0100A8 +:1046D000030003006142010008000300D93B010010 +:1046E00000000300A542010001000300D9420100BF +:1046F00002000300212F010004000300F527010040 +:10470000050003002128010009000300813B01008E +:10471000170003000935010018000300B934010037 +:10472000240003008931010025000300C930010085 +:10473000190003004D2B01001B000300952D010003 +:104740001C000300E12D01001A00030049300100A4 +:1047500020000300E92B010021000300292E0100A5 +:104760001D000300B12E010022000300712E010084 +:104770001E000300792B01001F0003003D2F0100E4 +:10478000230003004132010026000300752C0100C4 +:10479000270003002D2D010028000300F52E010045 +:1047A00029000300A53001002A000300312C01007C +:1047B0004C000300AD2F01004D0003000930010043 +:1047C0004E0003001D3201004F000300252C0100A4 +:1047D00000000200853601000100020015370100CB +:1047E000020002007135010058460200320000004C +:1047F000904D0200B84D02000C7B0020050009001E +:104800000C0002040600000000000000000400008C +:104810001000000000000000000000000000000088 +:10482000000000000000000000000000080004007C +:10483000C5C2010001000400D1C101000200040052 +:1048400025C2010003000400A5C20100000002000F +:104850005DC301000100020061C30100020002000B +:10486000E1C20100000000000000000000000000A4 +:104870000000000000000000000000002C480200C2 +:1048800007000000644802007C4802005604002033 +:1048900003000800FFFF0000D9A40000010005008C +:1048A00039A300009448020002000000E1E2000089 +:1048B0003C0001000C0C0000E1E200003D000100A2 +:1048C00008080000E1E200003E00010002020000D2 +:1048D000E1E200003F00010017170000E1E20000E4 +:1048E000400001000D0D0000E1E200004100010068 +:1048F00001010000E1E200004200010001010000AE +:10490000E1E200004300010002020000E1E20000D9 +:104910004400010009090000E1E200004500010037 +:1049200009090000E1E20000460001000101000069 +:10493000E1E200004700010001010000E1E20000A7 +:104940004800010006060000E1E200004900010005 +:1049500002020000E1E200004A0001000909000033 +:10496000E1E200004B00010018180000E1E2000045 +:104970004C00010018180000E1E200004D000100A9 +:1049800003030000E1E200004E000100010100000D +:10499000E1E200004F00010001010000E1E200003F +:1049A0005000010009090000E1E20000510001008F +:1049B00009090000E1E200005200010003030000C9 +:1049C000E1E200005300010003030000E1E2000007 +:1049D0005400010005050000E1E20000550001005F +:1049E00003030000E1E200005600010002020000A3 +:1049F000E1E200005700010001010000E1E20000D7 +:104A00005800010023230000E1E2000059000100EA +:104A100002020000E1E200005A0001000202000070 +:104A20000000020045000100010002007D000100BD +:104A30000200020041FE000000000100BDE700008E +:104A4000010001005107010002000100C10801003E +:104A50000400010021EC000005000100850E0100AA +:104A6000030001006108010006000100DDEE000006 +:104A700007000100ADF800000800010005F9000082 +:104A800009000100D5FA00000A000100D5F7000076 +:104A90000B0001007DF700000C00010041FA00004E +:104AA0000D000100A9F900000E00010061F90000ED +:104AB0000F000100A9E600001000010095F40000BD +:104AC00011000100F5F5000012000100E1F4000002 +:104AD0001300010081F5000014000100DDF000006A +:104AE0001500010071F10000160001002DF3000017 +:104AF00017000100D9F100001800010029F700009B +:104B000037000100D5E3000000000200450001006D +:104B1000010002007D0001000200020041FE0000D1 +:104B2000380001000DD70000390001004DD700000A +:104B30003A00010085FB00003B000100B9180100AC +:104B40002D000100F10A01003C000100AD4501000B +:104B50003D000100494501003F00010049470100B7 +:104B600040000100C547010041000100555301000C +:104B700042000100BD530100430001004D540100FB +:104B8000440001000D480100450001006548010096 +:104B900046000100E55001004700010059510100A5 +:104BA0004800010041550100490001000552010083 +:104BB0004A000100CD5201004B0001004D4E0100A2 +:104BC0004C000100854F01004D0001009151010092 +:104BD0004E000100415001004F000100A5500100AE +:104BE0005000010045460100510001002947010025 +:104BF00052000100354C010053000100054D010039 +:104C000054000100A94D010055000100454A010072 +:104C1000560001006D49010057000100094A0100DA +:104C200058000100914A010059000100B9480100F3 +:104C30005A000100214901004400030019F000005E +:104C400031000000010F010032000000B9800100B6 +:104C5000204A0200030000000000000000000000E5 +:104C60000000000000000000000000000000000044 +:104C7000384A020043000000051314151A293B00AE +:104C8000000002007999010001000200AD990100C5 +:104C9000020002006196010000000000F193010093 +:104CA00001000000E5920100030000007193010083 +:104CB00002000000CD9401000D0000005D8801009D +:104CC0000E000000DD8C01000F000000058A0100CD +:104CD00010000000398F0100110000007D8B0100E1 +:104CE000120000000D880100130000006986010019 +:104CF00014000000A1910100150000003590010092 +:104D000016000000FD90010004000000C5850100B0 +:104D100005000000A1850100090000004D9401007C +:104D2000170000007D870100330000005D85010051 +:104D300006000000618501000700000019850100E0 +:104D400008000000A59201000A0000008195010002 +:104D50000B000000C18601000C0000001F8701004D +:104D60001800000069890100190000002589010070 +:104D70002F0000003D94010000000200799901001D +:104D800001000200AD9901000200020061960100DD +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000804C02000300000032 +:104DB0000000000000000000984C02001F000000EE +:104DC00048313131310048313131004831323131EF +:104DD0000048313100483132323100483231004828 +:104DE00031003131323234343434343400483248D2 +:104DF000004832003142004832323232323200341E +:104E0000310050500048343432500048500048328D +:104E100032004831313132003132333331313142B5 +:104E200031313131313131003131313141003132C3 +:104E300032320031313232003131314231003131E0 +:104E40003142323231003232324400006C4E0200C4 +:104E50000000002074040000AE490000CC4E0200A7 +:104E600074040020A47A0000664F000001781AAA9A +:104E70000101801AFF0132016904416908091734F0 +:104E800011124014484E021A0F0414FA4D021A4728 +:104E9000085A461029045A49045AF21C2924290C9C +:104EA0005AF90429241945011D13E473025C2002F8 +:104EB000FF0501FF011B1201E3CC302A4C1013FF48 +:0C4EC000A003122003E3201C02277F0047 +:00000001FF diff --git a/bundles/typical/ING9188xx/platform_entry.hex b/bundles/typical/ING9188xx/platform_entry.hex new file mode 100644 index 000000000..4e5a23a2a --- /dev/null +++ b/bundles/typical/ING9188xx/platform_entry.hex @@ -0,0 +1,8436 @@ +:020000040000FA +:10400000187F00205D4200007B420000CD40000090 +:104010007F42000081420000834200000000000057 +:10402000000000000000000000000000E940000067 +:1040300087420000000000002D410000C14E00003A +:1040400039D801006DD8010009DA01008D42000065 +:1040500015DA010021DA01002DDA01008D4200009D +:104060008D42000039DA01008D4200008D420000CF +:104070008D4200008D42000045DA010051DA010056 +:104080005DDA010069DA010075DA010081DA010008 +:104090008D4200008D4200008D4200008D420000E4 +:1040A0008D4200008D42000095DA01008D42000033 +:1040B0008D42000000600200DFF80CD000F0F4FB3D +:1040C00000480047C1CC0100187F00201EF0040FFB +:1040D0000CBFEFF30880EFF3098081694EF2E11223 +:1040E000C0F2010210470000224B19680868B0E8CE +:1040F000F00F80F30988BFF36F8F4FF0000080F35B +:1041000011884EF00D0E7047000000000648006850 +:10411000006880F3088862B661B6BFF34F8FBFF3C3 +:104120006F8F00DF00BF00BF08ED00E0EFF30980F4 +:10413000BFF36F8F0F4B1A6820E9F00F106008B5BE +:104140004FF0200080F31188BFF34F8FBFF36F8FC4 +:104150001EF0A4F84FF0000080F31188BDE808407D +:1041600019680868B0E8F00F80F30988BFF36F8F13 +:10417000704700BF24000020EFF305807047000067 +:104180002DE9FF5FEFF31080EFF31181EFF312825F +:10419000EFF313830FB447F6BC00C2F200001A49D4 +:1041A0000160EFF30881EFF30982EFF31483EFF37B +:1041B000038441608260C36004611448016841F077 +:1041C00001010160BFF34F8F30BFBFF36F8F104805 +:1041D00041688268C368046981F3088882F30988AA +:1041E00083F3148884F30388BFF34F8FBFF36F8F7B +:1041F0000FBC80F3108881F3118882F3128883F357 +:104200001388BDE8FF5F7047CB41000004030940FD +:10421000BC78002040BA704740BA704740BA704737 +:1042200040BA704740BA704740BA704740BA7047CA +:1042300040BA704740BA7047C0BA7047C0BA7047BA +:10424000C0BA7047C0BA7047C0BA7047C0BA7047AA +:10425000C0BA7047C0BA7047C0BA70470C4801680E +:1042600011F0010F07D04FF0010221EA02010160B5 +:1042700008480068004708480047FEE7FEE7FEE7F9 +:10428000FEE7FEE7FEE7FEE7FEE7FEE7FEE70000EB +:1042900064010440BC780020B94000002DE9F0031F +:1042A0005FEA930C67D000BF30F9024B31F9026B23 +:1042B00030F9025B31F9027B04FB06F805FB07F9D4 +:1042C0004FEA6848A8EB69487C4322F8028B6414E3 +:1042D000754304EB654422F8024B30F9024B31F987 +:1042E000026B30F9025B31F9027B04FB06F805FB37 +:1042F00007F94FEA6848A8EB69487C4322F8028B2B +:104300006414754304EB654422F8024B30F9024B08 +:1043100031F9026B30F9025B31F9027B04FB06F8DC +:1043200005FB07F94FEA6848A8EB69487C4322F887 +:10433000028B6414754304EB654422F8024B30F998 +:10434000024B31F9026B30F9025B31F9027B04FB5D +:1043500006F805FB07F94FEA68487C43A8EB694873 +:104360006414754322F8028B04EB654422F8024B77 +:10437000BCF1010C98D113F0030304BFBDE8F003B6 +:10438000704700BF30F9024B31F902CB30F9025BC4 +:1043900031F9026B04FB0CF77F1405FB06F874433C +:1043A000A7EB6847641422F8027B05FB0CFC04EBC6 +:1043B0006C4C22F802CB5B1EE4D1BDE8F0037047E1 +:1043C0002DE9F05F0546002092469B46884606464A +:1043D000814640241BE0284641464746224600F0DD +:1043E0009EF853465A46C01A914110D311461846BA +:1043F000224600F085F82D1A67EB01084F46224649 +:104400000120002100F07CF817EB00094E41201E2E +:10441000A4F10104DFDC484631462A464346BDE8A4 +:10442000F09F00000649074A0868504343F23902EA +:104430001044086040087047014908607047000058 +:104440006C0400206D4EC64110B5431A934209D248 +:104450008318881803E010F8011D03F8011D521E8F +:10446000F9D210BD40EA01039B0703D009E008C957 +:10447000121F08C0042AFAD203E011F8013B00F829 +:10448000013B521EF9D210BDD2B201E000F8012B5F +:10449000491EFBD270470022F6E710B513460A46C4 +:1044A00004461946FFF7F0FF204610BD421C10F8E5 +:1044B000011B0029FBD1801A704730B5044600204B +:1044C000034600E05B1C934203D2E05CCD5C401BE2 +:1044D000F8D030BD30B50B46014600202022012423 +:1044E00009E021FA02F59D4205D303FA02F5491BC2 +:1044F00004FA02F52844151EA2F10102F1DC30BDD8 +:10450000202A04DB203A00FA02F100207047914093 +:10451000C2F1200320FA03F3194390407047202A88 +:1045200004DB203A21FA02F00021704721FA02F35D +:10453000D040C2F1200291400843194670472DE94E +:10454000FE4F804681EA0300C00F0C46009021F028 +:10455000004123F00045B8EB0200A94105D24046D6 +:10456000214690461C460B46024623F0004010436D +:1045700004D14046214603B0BDE8F08F270DC7F3B4 +:104580000A00C3F30A510290401A0190402866DAEB +:10459000C3F3130040F4801B0098924620B100231F +:1045A000D2EB030A63EB0B0B01985946C0F14002B2 +:1045B0005046FFF7A5FF06460D4650465946019A5C +:1045C00000F084F910EB08006141002487EA1152E1 +:1045D00084EAE7731A433BD0009A3AB3019A012A5E +:1045E0004FEA075210DC001B61EB02014FF0004262 +:1045F00002EA0752CDE90042001C41F58011324623 +:104600002B4600F082F9B6E7001B61EB0201001CAB +:1046100041F5801300185B412018A2F5001747EB05 +:10462000030140EAD570B6196D4111E06D084FEAFB +:10463000360645EAC0754FEA0752001B61EB0201DE +:10464000001C41F5801149084FEA30000019514122 +:1046500032462B4603B0BDE8F04F00F049B9009850 +:10466000012240000023D0EB020263EBE0730098CC +:1046700021464FEAE074B8EB000061EB0401E9E782 +:1046800083F000435BE781F0004158E72DE9FE4FDE +:1046900081EA030404F0004421F0004100944FF04B +:1046A000000B23F0004350EA010402D052EA030455 +:1046B00004D10020014603B0BDE8F08FC3F30A54D3 +:1046C000C1F30A552C44A4F2F3340194A0FB025424 +:1046D000C1F3130141F48011C3F3130343F48013B6 +:1046E00001FB024400FB034E840A970A44EA81540A +:1046F00047EA8357A4FB076802958D0A05FB0785E7 +:104700004FEA932C04FB0C542705029D4FEA0658F0 +:1047100047EA1637B5EB08056EEB070C870E920ECD +:1047200047EA811742EA8312A7FB0201B6EB0B01AD +:1047300064EB00042B0D43EA0C335E1844EB1C5071 +:10474000DA465146E7FB0201C5F313044FEA0B3387 +:1047500043EA14534FEA0432019C43EA0603A4F1EE +:104760000C040294009CCDE900B400F0CEF8A2E75E +:104770002DE9F04D81EA030404F0004B21F00045DF +:1047800014464FF0000A23F0004150EA050220D001 +:1047900054EA01021DD0C5F30A570246C5F31303BC +:1047A000C1F31300C1F30A5640F4801543F480139B +:1047B000A7EB0608101BD64608F2FD3873EB050080 +:1047C00002D308F1010801E092185B41B8F1000F33 +:1047D00003DA00200146BDE8F08D00204FF480117F +:1047E000064684460EE0171B73EB050705D3121B24 +:1047F00063EB050306434CEA010C49084FEA30001D +:1048000092185B4150EA0107EDD152EA030012D041 +:1048100082EA040083EA0501084303D100224FF035 +:10482000004308E0101BAB4102D20122002302E04A +:104830006FF0010253101AEB06004CEB085110EB1D +:104840000A0041EB0B01BDE8F04D00F051B8C1F397 +:104850000A52C1F3130140F2FF3341F480119A422E +:1048600002DA00200146704740F233439A42A2F236 +:10487000334202DC5242FFF752BEFFF741BE000056 +:1048800030B5002904DB4FF00044404264EB0101E5 +:10489000002B04DB4FF00044524264EB03039942C7 +:1048A00008BF904230BD0000064C074D06E0E068AE +:1048B00040F0010394E8070098471034AC42F6D367 +:1048C000FFF7FEFB4C4E02006C4E0200202A06DB76 +:1048D000CB17203A41FA02F043EAE07306E041FACE +:1048E00002F3D040C2F120029140084319467047BC +:1048F00010B5002B08DA401C41F1000192185B4111 +:104900001A4301D120F0010010BD2DE9F04D92466F +:104910009B4611B1B1FA81F202E0B0FA80F2203286 +:104920009046FFF7EDFD04460F4640EA0A0041EAD3 +:104930000B0153465A46084303D120463946BDE889 +:10494000F08D114653EA010015D0C8F140025046DF +:10495000FFF7E5FD05460E46504659464246FFF72D +:10496000CFFD084301D0012000E00020054346EAC6 +:10497000E0762C4337430A984FEA4453A0EB0800F3 +:104980004FEAD4240A304FF0000244EA47544FEA79 +:10499000D72502D500200146D1E70105101969414C +:1049A000DDE9084500196941BDE8F04DA0E770B5A3 +:1049B00001EB020410F8015B15F0070301D110F8B8 +:1049C000013B2A1106D110F8012B03E010F8016B0E +:1049D00001F8016B5B1EF9D12B0705D40023521E91 +:1049E0000FD401F8013BFAE710F8013B02F1020293 +:1049F000A1EB030303E013F8015B01F8015B521E16 +:104A0000F9D5A142D6D3002070BD000070B50B4986 +:104A1000D1E9000105F0FCFD002001F099FE4FF006 +:104A2000FF34074D02E000BF01F0B0FE21462868C8 +:104A30001EF070F90028F7D170BD0000E8340200C4 +:104A4000040000200348006810F0FF0F01D11DF0A2 +:104A5000A7B9704704ED00E00348006810F0FF0FAD +:104A600001D11DF0BDB9704704ED00E010B50C4652 +:104A7000091D8AB2FB2A00D9FB22014644F2902389 +:104A8000024806F0C5F8E0B210BD0000103B02007D +:104A900010B5C368D9B280290FD98468E06800B125 +:104AA00001204F2213A100F09FFFE16819B1206996 +:104AB000BDE81040084772B6FEE70446008A616907 +:104AC00082B2D8B2124B1B68984706F0B9F9002899 +:104AD0000FD1E068022806D004280AD1A069BDE8F9 +:104AE000104006F0A7B9A08BA169BDE8104006F000 +:104AF0009FB910BD4863695F696E7465726E616CC1 +:104B00005F7472616E73706F72742E6300000000C8 +:104B1000F00100201FB5416899B1052911D00A297B +:104B20000ED10A4C1ECC8DE81E00C168019141696E +:104B30000291008AADF80C001021684605F0C4FF10 +:104B40001FBD04B0BDE81040FFF7A2BFD03B02007C +:104B50002DE9FE4F044606F09DF908B1002000E063 +:104B60000220494E00278346B8464FF00109A6F1BE +:104B7000EC0A7CBB5920BDE8FE8FE38F03B351B331 +:104B8000431AA08E834200DC184685B202EBC200B5 +:104B900000EB02120AEB82000144208E7080B4F810 +:104BA0004A0040B3358004208DE82300284482B2B7 +:104BB0005946608D334606F063FB47B2D7BB25E00C +:104BC00032496FF0050081F8018081F8009081F88A +:104BD0000380D0E724E0FFE7A18E8B1E984201DD21 +:104BE000891E00E001468DB202EBC20000EB02110B +:104BF0000AEB8101D1E7A81C308094F8430004EB54 +:104C00004000B0F84600B0800620CDE7B4F84A0076 +:104C100001222844A4F84A001146204600F054F826 +:104C200094F84320B4F84A1004EB4200B0F8460070 +:104C30008142A2D394F84300B4F84A1004EB400038 +:104C4000B0F8462091421CD14334A4F80780A0F864 +:104C50004680207800EBC00101EB00110AEB8100D7 +:104C60006421FFF718FC21786078433C814204D12D +:104C7000FF2043346070207003E029EA010084F8CB +:104C80004300384677E70000606F002010010020E5 +:104C900010B590F820200B2A11D090F8451001296A +:104CA00001D0002010BD0749002301244B700C7077 +:104CB000CB700A2A03D1C08D002106F0CFFF01205E +:104CC00010BD00001001002000290ED022B1C28FBB +:104CD0008A420BD3511A0AE0B0F840208A4201D32D +:104CE000511A00E00021A0F8401070470021C18750 +:104CF000704730B500290FD000234FF6FF7462B122 +:104D0000C28F1144B1FBF4F504FB1514944213D87F +:104D1000C387012180F8451030BDB0F84020114410 +:104D2000B1FBF4F504FB1514944202D8A0F840300E +:104D300030BDA0F8401030BDC18730BD2DE9F04135 +:104D40001E4613460D4602284AD1B5F84000254CB0 +:104D50004FF00108002730B322462178224892F90B +:104D60000120012910442DD032461946FFF76CFB73 +:104D7000607830446070B5F84000401EA5F84000EF +:104D800094F90100E178884227D183B26E68E98DF9 +:104D9000154A0B20B047677084F80080E7702846FA +:104DA000FFF776FF0BE0677084F80080E77095F8F6 +:104DB00020000A2803D1E88D002106F04FFF0120D2 +:104DC000BDE8F0811978E1702770B21E991CFFF7D9 +:104DD0003BFB60783044801ECCE72846FFF758FF45 +:104DE0000020EDE7100100205B70002000F01F02A2 +:104DF0000121914040094FF0E02202EB8000C0F811 +:104E00008012704700F01F020121914040094FF0CD +:104E1000E02202EB8000C0F88011704700F01F0212 +:104E20000121914040094FF0E02202EB8000C0F8E0 +:104E30000011704700F01F020121914040094FF01E +:104E4000E02202EB8000C0F8001170474907090E0C +:104E5000002803DA00F00F00024A00E0024A815401 +:104E60007047000014ED00E000E400E0024A114049 +:104E7000014302480160704780FFFF1F08ED00E01A +:104E800000B589B019F080FD816803910021CDE95A +:104E9000011004480B464A1E694600681DF0BEFB1F +:104EA00009B000BD080000200148006870470000FC +:104EB0006801044001490872704700007401002035 +:104EC00010B5202080F31188BFF34F8FBFF36F8F91 +:104ED0001EF0B8F818B104494FF080500860002067 +:104EE00080F3118810BD000004ED00E00FB4054B05 +:104EF00010B503A9044A029800F0EAF810BC5DF866 +:104F000014FB000099760000700400200FB4084BD9 +:104F100010B504A902AA039800F0DAF8044602A921 +:104F2000002000F078FC204610BC5DF814FB000067 +:104F300017580000014B024A00F0CAB899760000E9 +:104F40007004002070477047704770477047704783 +:104F500070477047704702E008C8121F08C1002A56 +:104F6000FAD170477047002001E001C1121F002AEA +:104F7000FBD170472DE9FF5FDDE90220010DDDF86F +:104F800038B0024310D10F9801244CA2012808D058 +:104F9000002100980F9BC0E90021C0E90243BDE851 +:104FA000FF9F6FEA0B01F4E7A1F2FF3144F61050C6 +:104FB00041430D140F9801280ED0A5EB0B00401CA7 +:104FC0004FF000043E4EDFF8FC90B0F1000AA0461E +:104FD00005DACAF1000717E0CBF10000F0E7074659 +:104FE00012E0F80707D02246334640464946FFF70D +:104FF0004DFB804689462246334610461946FFF748 +:1050000045FB04460E467F10002FEAD1DDE9020180 +:10501000BAF1000F42464B4602DAFFF737FB01E0D8 +:10502000FFF7A6FB04460E460022274BFFF728FC9D +:1050300003D84FF0FF30014607E00022234B204603 +:105040003146FFF77CFAFFF702FC102409E0002C40 +:105050000ADB0A220023FFF7B3F9019B30321A550D +:10506000641E50EA0102F2D1641C019AC4F11103DA +:1050700014440F9A012A09D00122084301D15B454B +:105080000FDD4FF0000205F101050DE0084303D1EB +:10509000A3EB0B056D1E09E000204FF0110B0F90E4 +:1050A00088E701DA00226D1E002A83D000980F994C +:1050B000C0E90231C0E9004571E70000300000009E +:1050C000000024400000F03F0000F0430000E03FFB +:1050D0002DE9FF4F95B09B4689460646002512E212 +:1050E000252878D10024761CF94A27460121059409 +:1050F0003378203B01FA03F0104202D00443761CBF +:10510000F6E730782A2811D06FF02F033078A0F11D +:105110003002092A16D8059A44F0020402EB8202F2 +:1051200003EB42021044761C0590EFE759F8042B7C +:105130000592002A03DA504244F40054059044F0EA +:105140000204761C30782E2816D116F8010F44F090 +:1051500004042A280DD06FF02F023078A0F130031C +:10516000092B09D807EB870302EB4303C718761C0A +:10517000F3E759F8047B761C30786C280FD006DCF6 +:105180004C2817D068280DD06A2814D104E0742860 +:1051900010D07A280FD10DE044F400140AE044F452 +:1051A000801401E044F440147278824202D1761CEB +:1051B00004F58014761C307866280BD013DC582850 +:1051C00077D009DC002875D04528F6D04628F4D0E1 +:1051D00047281AD19FE118E0632835D0642879D098 +:1051E000652812D197E1702873D008DC6728F1D0C8 +:1051F00069286FD06E280DD06F2806D1B5E07328CE +:105200002CD0752875D0782874D05A4617999047B5 +:105210006D1C76E1C4F30250022809D003280DD09A +:10522000D9F8001004280DD00D6009F1040968E1D7 +:10523000D9F80010EA17C1E90052F6E7D9F80010D2 +:105240000D80F2E70D70F0E719F8041B8DF80010DF +:1052500000208DF80100EA46012003E059F804AB74 +:105260004FF0FF3061074FF0000102D40DE008F16C +:1052700001018846B9420FDA8045F8DB1AF80810B8 +:105280000029F4D108E008F1010188468142FADBE7 +:105290001AF808100029F6D105985B46A0EB08071C +:1052A00021463846179A00F09EFA284400EB08057C +:1052B00007E04DE02BE10DE01AF8010B5A46179973 +:1052C0009047B8F10108F7D25B4621463846179A55 +:1052D00014E142E00A220092C4F302524FF0000AA5 +:1052E000022A08D059F804CB032A4FEAEC710AD0FD +:1052F0000DE029E02AE009F1070121F00702F2E8B8 +:1053000002C1914609E00FFA8CFC4FEAEC71042AC5 +:1053100003D14FFA8CFC4FEAEC71002907DA0A46F8 +:105320000021DCF1000C61EB02012D2202E02205DC +:1053300004D52B228DF80420012203E0E20701D0DE +:105340002022F7E7904653E00A2102E010220DE008 +:1053500010214FF0000A00910BE010224FF0000ADC +:1053600044F004040827009203E008224FF0000AEA +:105370000092C4F30252022A05D059F804CB00214E +:10538000032A08D009E009F1070121F00702F2E839 +:1053900002C1914605E01FFA8CFC042A01D10CF0F1 +:1053A000FF0C4FF00008220722D5702827D0009B61 +:1053B00083F0100353EA0A0309D15CEA010206D024 +:1053C00030228DF804208DF8050002229046009BC3 +:1053D00083F0080353EA0A030AD15CEA010201D10F +:1053E000620705D530228DF804204FF001087F1E9A +:1053F000582809D037A003900EA8029013E040224D +:105400008DF804200122E1E737A0F4E75346604617 +:10541000009AFEF7D5FF84460398825C0298A0F1BB +:105420000100029002705CEA0100EFD1029806A927 +:10543000A1EB000000F1200A600702D524F48034BB +:1054400000E00127574502DDA7EB0A0000E000203D +:1054500000EB0A01009005984144A0EB0100059083 +:10546000E00306D45B462146179A059800F0BBF985 +:105470000544002706E001A85A46C05D17999047E9 +:105480006D1C7F1C4745F6DBE0030CD55B462146CF +:10549000179A059800F0A7F9054404E030205A4611 +:1054A000179990476D1C0099481E00900029F5DC63 +:1054B00008E0029802995A460078491C029117990F +:1054C00090476D1CBAF10001AAF1010AF1DC6BE111 +:1054D00009280100303132333435363738396162CA +:1054E000636465660000000030313233343536378E +:1054F00038394142434445460000000000F060F95D +:10550000054406F10106307800287FF4E9AD19B0B2 +:105510002846BDE8F08F620700D4062709F107028C +:1055200022F0070CFCE80223E14603F000485FEAA2 +:10553000080C02D00FF27C2C0DE05FEA045C02D56F +:105540000FF2742C07E05FEAC47C02D00FF26C2CDF +:1055500001E0AFF2700C4FF0FF3823F00043CDF8BC +:1055600050C065280CD006DC452809D046281DD03F +:1055700047283ED13EE0662818D0672839D139E067 +:105580000021112F01DB112000E0781CCDE9000182 +:1055900006A90EA8FFF7EEFCDDE90F010E9A0391B4 +:1055A0000021009207F1010A04914EE04FF0004003 +:1055B0000097CDE9011006A90EA8FFF7DBFCDDE995 +:1055C0000F0203920E9B11990022DDF80CA00093AC +:1055D000049219B907F1010100EB010AB7EB0A00C7 +:1055E00004D4C0F1FF3007F1010A0490AAEB0700D0 +:1055F000019046E0012F00DA01270021112F01DD83 +:10560000112000E03846CDE9000106A90EA8FFF7F9 +:10561000B1FCDDE90F010E9A039100210491009283 +:10562000BA4621070CD40399514500DA8A46BAF1EB +:10563000010F05DD009AAAF10101515C302908D063 +:10564000B84202DA10F1040F06DA0121CDE90110A7 +:1056500017E0AAF10101E9E7002805DC04990144FB +:105660000491AAEB000102E0411C514500DD8A468D +:105670000499A0EB010000F1010001904FF00040FF +:105680000290200704D40198504501DBCDF8048036 +:1056900000208DF84F0002980DF14F07B0F1004F38 +:1056A00025D02B200E9002984FF0020800280CDA2B +:1056B000404202902D200E9007E00A210298FEF74A +:1056C00009FF3031029007F8011DB8F10001A8F17F +:1056D0000108F2DC02980028EFD1791E0E980870BC +:1056E000307800F0200040F0450007F8020D12A8C5 +:1056F000A0EB070000F107081498007800B1012022 +:1057000000EB0A01019801EBE07105984144A0EB20 +:105710000100A0F101000590E00306D45B4621469C +:10572000179A059800F05FF805441498007820B1A6 +:105730005A461799904705F10105E00323D55B46CA +:105740002146179A059800F04EF805441BE004988E +:10575000002807DBDDE90301884203DD0098405C97 +:10576000179901E0179930205A46904704986D1C0C +:10577000401C04900198401E019004D12E205A46EE +:10578000179990476D1CBAF10001AAF1010ADEDCFD +:1057900005E017F8010B5A46179990476D1CB8F1B0 +:1057A0000001A8F10108F4DC5B462146179A059830 +:1057B000A4E600002D0000002B00000020000000E7 +:1057C0002DE9F041044600251E461746880405D4FD +:1057D00006E039462020B04705F10105641EF8D5E2 +:1057E0002846BDE8F0812DE9F041044600251E461B +:1057F0009046C80301D5302700E02027880405D54E +:1058000006E041463846B04705F10105641EF8D56B +:105810002846BDE8F0810A68531C0B601070704781 +:105820002DE9F05F064600880B46C0F30B00834667 +:1058300005F09CF80400707875884FEA10170AD0BC +:1058400005F10408984509D02A1DBDE8F05F194606 +:105850003548FFF77CBB594634A01EE001F048F9FB +:1058600007F00301002740F2031A6063012903D007 +:1058700002292CD03CA010E0A08F60B14119B1F5F5 +:10588000827F0ED328485B4652465C30FFF75FFBB1 +:10589000A787BDE8F09F594643A0BDE8F05FFFF73A +:1058A00056BBA16B2A4608440E30311DFEF7CCFDD5 +:1058B000A08F284481B2A187E08F083081422FD386 +:1058C000A06B0E3005F0DAF8E787A78728E0A08FF5 +:1058D00028B115485946B030FFF739FBA787B7887C +:1058E000381D8146854205D31FFA88F1304605F000 +:1058F000C5F815E0FF2D07D95B465246291DBDE8C6 +:10590000F05F3848FFF723BBA06B2A1D0E303146ED +:10591000FEF79AFDA4F83C80E787A16BA1F81090F0 +:10592000BDE8F05F05F0DABB303802006863692E2D +:10593000633A2061636C5F68616E646C65722063BA +:10594000616C6C65642077697468206E6F6E2D726F +:105950006567697374657265642068616E646C65FF +:1059600020257521000000006863692E633A2061DC +:10597000636C5F68616E646C65722063616C6C65FA +:1059800064207769746820696E76616C6964207040 +:1059900061636B657420626F756E646172792066F5 +:1059A0006C6167732025750041434C20436F6E7412 +:1059B00020467261676D656E7420627574206E6F2B +:1059C00020666972737420667261676D656E7420FB +:1059D000666F722068616E646C65203078253032A5 +:1059E000780000003439020010B50B46002803D1BE +:1059F0001146184607F0EEFB10BD70471CB506496E +:105A00008C68002C07D0002100910191B0F80601AC +:105A10000B460322A0471CBDA400002070B50D4614 +:105A2000002824D1082D22D2114C4FF4947654F83A +:105A3000250020B9304600F05DFF44F82500040041 +:105A400015D031462046FEF726FDA4F80651172052 +:105A5000A4F8000106F0EAFDA4F80201FB2802D92F +:105A6000FB20A4F802014FF0FF30A4F8080170BD3C +:105A700084640020F8B51646028A069FA2EB010254 +:105A800094B2C288D2050AD50A4A55683DB100933E +:105A900000890A46014633463846A847F8BD9C426D +:105AA00000D91C464069224601443046FEF7CCFC32 +:105AB0002046F8BDA4000020042105F055BF0421B4 +:105AC00006F094BE024908600421024806F006BEB2 +:105AD000B0000020396000000249486004210248FB +:105AE00006F0FCBDB000002039600000042105F084 +:105AF0003BBF042106F07ABE00B58BB0D0F824017C +:105B0000009028E0684600F033FABDF8081000293C +:105B100023D0BDF8062012A0FFF714FABDF8060046 +:105B20008005039808D506A919F034F806A81CF0DA +:105B300055F8014614A001E0018814A0FFF702FA0D +:105B4000BDF8101013A0FFF7FDF9BDF8101005986F +:105B500017F0A4F800980028D4D10BB000BD0000C5 +:105B600048616E646C653A203078253034782C209A +:105B7000666C6167733A203078253034782C207554 +:105B80007569643A200000002573000025303478E0 +:105B9000000000002C2076616C75655F6C656E3AC4 +:105BA0002025752C2076616C75653A200000000078 +:105BB000064A30B41468002C06D00B46A4460246B0 +:105BC000002130BC0420604730BC7047B800002082 +:105BD0007CB51446042819D120783E283FD016DC25 +:105BE000052846D0082801D030280FD1B2F803503C +:105BF000284600F0BDF8040008D0284619F0D6FC6D +:105C000004F8FD0F284619F02AFA60707CBDD728E9 +:105C10004CD0D8283BD0DA28F8D1608800F0A8F81A +:105C20000500F3D0B5F8060104F0A0FE0600EDD0A3 +:105C30002079317A8842E9D16946601D18F0B9FFB0 +:105C4000062231466846FEF738FC0028DED1E07AAD +:105C500085F8FF00B5F80601FFF74BFF7CBDA07883 +:105C6000012801D00A28F9D19188D078FFF7D6FE13 +:105C70007CBDB2F80340204600F07AF80028F7D047 +:105C800000F03AFE0F49002041F824007CBD6088F6 +:105C900000F06EF80500F9D0B4F80B0001B2A5F8D9 +:105CA000081109A0FFF74FF9284608E0508800F0D6 +:105CB0005FF80028EAD04FF0FF31A0F8081100F09B +:105CC0009BFA7CBD84640020534D5F4556454E547D +:105CD0005F4944454E544954595F5245534F4C56C1 +:105CE000494E475F53554343454544454420696405 +:105CF000202575003EB50C468DF8080000208DF873 +:105D0000092000900190022302AA0421204606F0F7 +:105D1000C3FF3EBD7FB50DF1200C1446BCE8640006 +:105D20008DF80800ADF80930ADF80B20ADF80D1076 +:105D3000CDE90056072302AA0421204606F0ACFF55 +:105D40007FBD70B515000C4603D0D0F8240120604B +:105D500008E0002070BD204600F00AF92089A84222 +:105D600003D020680028F6D170BD012070BD00006E +:105D7000082803D2024951F82000704700207047DC +:105D8000846400202DE9FF410C4616460978002561 +:105D9000B0F800211F4604F1050C0E2976D00CDC6A +:105DA000A1F1020EBEF10B0F15D2DFE80EF02114A7 +:105DB0003814401450146014660018296FD006DCA3 +:105DC000102970D012297ED0162904D181E05229E1 +:105DD00068D0D22966D048A0FFF7B4F8A6F109012F +:105DE00004F1090016F05AFF04B02846BDE8F0811E +:105DF000B4F80110B0F802218A4202D9A0F80011CB +:105E000001E0A0F80021032500F580703D700188B5 +:105E1000A7F801100188C088FEF728FEE4E7641C9B +:105E2000394663880093238803F024FB0DE0E31DCB +:105E3000641CF61F3946B5B2A7886688CDE90253BF +:105E4000CDE90067238803F07DFA0546CCE7072EED +:105E500001D8022100E01021641C6388CDE90031E3 +:105E6000CDF808C02388394603F0E0FCEDE7394659 +:105E7000B4F8013003F0ECFDE7E7641C39466388B1 +:105E80000093238803F0CCFBDFE7FFE71946761E7B +:105E9000641CC6F34F03009403F070FDD5E71EE0C9 +:105EA00001E010E021E0072E01D8022100E01021DE +:105EB000641C6388CDE90031CDF808C023883946D9 +:105EC00003F016FCC1E700923246214603F046FE7D +:105ED000BBE700923246214603F044FBB5E700924F +:105EE0003246214603F0FCF9AFE7009232462146E4 +:105EF00003F004FE78E70000556E68616E646C651F +:105F0000642041545420436F6D6D616E643A2025C6 +:105F10003032582C20444154413A20001CB50B4BE0 +:105F20001C68002C10D0B6238DF8003005238DF8A6 +:105F300001308DF80200ADF80310ADF805200723FD +:105F400000216A460420A0471CBD0000B8000020C4 +:105F500010B580B2FFF70CFF002808D0B0F80A2176 +:105F6000B0F80611BDE810409120FFF7D7BF10BD73 +:105F700010B501680A88828072B14B88C3808C8812 +:105F8000048101F10604C4609B050CD5A2F116033F +:105F9000038201F116030BE00021C1800181C16081 +:105FA0000182416106E0A2F10803038201F10803C6 +:105FB00011444361016010BD70B5044600890D466F +:105FC00000281BD0022A08D0E08880050BD51022BB +:105FD000E068FEF772FA80B111E009882046BDE85A +:105FE000704000F00EB8084605F03EFB002805D0D2 +:105FF000E168A8890988884201D1012070BD00208C +:1060000070BD70B5044600890D46002810D0E088A8 +:106010008005E06808D505F027FB002808D0E06877 +:106020008089A84203D004E00088884201D1012081 +:1060300070BD002070BD00002DE9F041194C0646EE +:106040001F4615468846042809D0082E28D12878EE +:10605000C00720D0D4F800C01FE03046E0472878C1 +:1060600078281DD1D4F804C0BCF1000F08D03B46FD +:106070002A4641463046E04704F070FB00280FD026 +:106080002468002C0CD03B462A4641463046A446A4 +:10609000BDE8F0416047D4F804C0BCF1000FDCD18A +:1060A000BDE8F081B00000202DE9F0410F46154613 +:1060B000044601461E46127828A0FEF744FF042C31 +:1060C0000CD0082C48D13846FFF752FE040043D0CC +:1060D00029781E2909D0522918D01EE0287878285E +:1060E0003AD1BDE8F04100F009B9B4F80A01A0B115 +:1060F00004F5867000F0FEFC04F583740020A2888D +:10610000A0802188BDE8F041FFF708BF324629464C +:10611000BDE8F0410023FFF735BEFB2E06D932461D +:10612000BDE8F041FB231A48FEF70DBF22782AB1E3 +:10613000BDE8F04116485030FEF705BF0120207041 +:10614000A4F8046132462946A01CFEF77DF92046DA +:10615000BDE8F04100F050B8BDE8F0816174745FB3 +:106160007061636B65745F68616E646C65723A2020 +:1061700074797065203078253032782C2070616316 +:106180006B65745B305D203078253032780000001C +:106190007C36020010B5B0F80001029CC01E80B22F +:1061A0001970A3F80120844200D8204610BD1FB505 +:1061B00014468DF80800069AADF80930ADF80B20AA +:1061C000ADF80D10002000900190072302AA0421D1 +:1061D000204606F061FD1FBD3EB50C468DF8080057 +:1061E000ADF80920002000900190032302AA0421A9 +:1061F000204606F051FD3EBD2DE9FF4104460178E1 +:1062000028A0FEF7A0FE207801282DD1A078D22862 +:1062100008D003202070B4F8060104B0BDE8F041B6 +:10622000FFF767BC19F0E4F80027E0B1B4F8040107 +:106230000F2818D3B4F8060119F086FD002813D1F1 +:10624000B4F9080106F0D2FE05000CD0B4F8041130 +:10625000A4F10A000E58696C324615A0FEF773FED1 +:10626000686CB04202D92770BDE8FF81022020701F +:10627000B4F80411A01F0844082116F00FFDB4F86B +:1062800003201849601DCDE90006CDE90214B4F8D9 +:106290000401A1780F3883B205F1340019F0B2F887 +:1062A000E2E700006174745F72756E3A2025640045 +:1062B000415454205369676E656420577269746550 +:1062C0002C20444220636F756E7465722025752CF6 +:1062D000207061636B657420636F756E74657220E6 +:1062E000257500005D650000FFF700BC00B5FFF7F5 +:1062F0003FFD002801D0B0F8000100BD2DE9F843B2 +:106300000025144F144EA84657F82540E4B12078D4 +:1063100003280BD1204600F0A7F838B1607898B177 +:10632000B4F80601BDE8F843FFF7E3BB607858B165 +:106330000AA084F8018000680090346824B1022328 +:1063400000216A460420A0476D1C082DDCD3BDE85F +:10635000F883000084640020B8000020B70000002B +:106360002DE9FE431F4616460D468046FFF700FD09 +:10637000040005D0B4F80A0120B19020BDE8FE83E6 +:106380005920FBE74046FFF7B1FB88B102AB2A4634 +:106390001D2120460097FFF7FDFECDE90060032395 +:1063A00002AA0421404606F077FC060002D014E061 +:1063B0005720E3E7A4F80A5104F5867042460849DD +:1063C000044600F0CDFB47F2305240F282412046B5 +:1063D00000F0AEFB204600F07DFB3046CEE700002B +:1063E000515F000070B505460B480A4C0E464460EC +:1063F00004F098F908480830446018F02DFD07486B +:10640000FFF76AFB284600F09DF83046BDE8704073 +:1064100000F09EB8D15B0000BC000020A960000025 +:106420002DE9FE431E4615460F468046FFF7A0FCA9 +:10643000040014D04046FFF759FB90B102AB3A4636 +:106440001B2120460096FFF7A5FECDE9005003234F +:1064500002AA0421404606F01FFCBDE8FE83592035 +:10646000FBE75720F9E700002DE9FC41244D002708 +:1064700007700446B0F804212B46811CFFF782FC0C +:10648000064604280FD3287801280CD1287908283B +:1064900009D194F8FE0030B1B4F8060118F006FEF8 +:1064A00078B1012811D086B100970197B4F80601A0 +:1064B00033462A46042106F0EFFB2878032807D04C +:1064C0001CE0B4F8060119F0D3FF0020BDE8FC8100 +:1064D0000C4AB4F80601B4F80011146874B1B5227E +:1064E0008DF8002004228DF80120ADF80410ADF8DD +:1064F0000200062300216A460420A0470120E5E7A8 +:10650000606F0020B800002001490860704700005B +:10651000B800002010B50246FFF72AFC002806D07C +:1065200001214170BDE810401046FFF7E2BA10BDEE +:1065300010B50C46FFF71CFC002801D0C0F8244120 +:1065400010BD00000149486070470000A400002011 +:106550000149886070470000A40000207CB5044613 +:1065600000780A4602280ED16946104618F01EFB34 +:10657000B4F80411A01F014408226846FDF79DFFEE +:1065800010B1002020707CBDB4F80411A4F10A0001 +:106590000E58B4F9080106F029FD050001D00120CC +:1065A00000E00020E62207A1FFF71EFA45B1761CA5 +:1065B0006E6403202070B4F80601FFF79AFA7CBDE0 +:1065C00072B6FEE76174745F7365727665722E63EE +:1065D000000000000A6882654968C16535210170C4 +:1065E00002F03CBBF8B50446C0880E46C0050BD58A +:1065F00006484568002D07D000200090034602465B +:1066000021893046A8472082F8BD0000A400002060 +:106610007CB50E46C98804460D0B00D06D1C14F8DD +:10662000FD2F6078CDE90002A378FD3C2A46104892 +:10663000FEF788FCF088410502D594F8FE1079B188 +:10664000000502D594F8FF0060B1002D02DD94F83A +:10665000FD0048B194F8FD00A84207DA0C207CBD8B +:1066600005207CBD08207CBD0F207CBD00207CBDAA +:10667000783502003EB50C468DF808000699ADF855 +:106680000920CDE90013032302AA0421204606F0C5 +:1066900003FB3EBD0622FDF710BF0A680260898831 +:1066A0008180704710B50C49002203463A24985C5B +:1066B000000900F025FB0870985C00F00F0000F066 +:1066C0001FFB48708C70C91C521C062AEFDB00208F +:1066D00001F8010C004810BD4969002008440088F9 +:1066E00040BA70474218405C5378528852BA63F3FC +:1066F0001F4242EA00607047130A4354491C89B2A2 +:1067000042547047130E4354491C89B2C2F30743E5 +:106710004354491C89B2C2F307234354491C89B22C +:106720004254704710B50446FEF78CF903480188BF +:10673000A1430180BDE81040FEF78EB90C04002093 +:1067400010B503F094FBBDE81040012000F010B834 +:1067500010B506490A68C2F30312022AFAD10121D0 +:1067600000F0D6FBBDE8104004F0F4BE0400044085 +:1067700010B50446FEF766F90348018821430180FD +:10678000BDE81040FEF768B90C040020034800780B +:10679000C00701D116F09EBD704700000C04002018 +:1067A00008B50020009008480068C1050748006847 +:1067B00003D069461CF048F808BD00231A46194664 +:1067C0001BF02CFF08BD000004ED00E004000020D9 +:1067D00010B518B103F04DFB0FF0ECFA10F08CFA85 +:1067E0000120FFF79FFFBDE81040032016F086BE92 +:1067F00070B50D480088A0B910F0AEF940F2E2453E +:106800000446A8420DD30948406D50B916F04AFF1E +:1068100038B116F04FFFA84203D3A04200D3204660 +:1068200070BD002070BD00000C0400200000094075 +:106830000268134602E08A4204D01268002AFAD1A4 +:106840000B600160704702E08A4205D01046026882 +:10685000002AF9D10A6001607047006808B1002081 +:1068600070470120704704E0884201D10120704741 +:1068700000680028F8D170470268816832B140682A +:106880000068884200D1086808B9704709B1012042 +:106890007047002070470022C0E90021096881602C +:1068A0007047016851B141680A6881688A4203D122 +:1068B00041600968816003E0826001E001210160BC +:1068C00080687047816809688160426811600021B2 +:1068D000016070474FF0FF3351B107E002688A4210 +:1068E00003D1096801600020704710460028F5D1E7 +:1068F0001846704717F0C8BF1BF088BA1BF086BA5D +:10690000782017F0C1BF000010B50446806B06F078 +:10691000A2FB2146BDE81040014800F071B800001C +:10692000D800002070B50C4800F09AF804000CD094 +:1069300040F2111006F0B2FB050008D0902120466D +:10694000FDF7A9FD2046A56370BD002070BD21465E +:10695000014800F055F8F8E7D800002010B5902362 +:1069600008220F490F4800F037F80E4914230C395C +:10697000002201F1100000F02FF80A494C230839D9 +:10698000002201F1100000F027F806490C23002234 +:10699000091FBDE8104001F1100000F01DB8000013 +:1069A000A4640020D80000200146014800F028B867 +:1069B000E0000020014800F053B80000E000002093 +:1069C0000146014800F01CB8DC000020014800F03E +:1069D00047B80000DC0000202DE9F0410646002009 +:1069E000984617460C460546306005E0214630467D +:1069F00000F006F844446D1CBD42F7DBBDE8F081B1 +:106A000030B40268134607E08B4204D1024630BC22 +:106A100004A0FEF799BA1B68002BF5D10A6001604B +:106A200030BC70476274737461636B5F6D656D6FCA +:106A300072795F706F6F6C5F667265653A20626C29 +:106A40006F636B20257020667265656420747769BA +:106A5000636520666F7220706F6F6C202570000078 +:106A6000016819B10A680260084670470020704743 +:106A700001460148FFF7C4BFE40000200148FFF7CA +:106A8000EFBF0000E400002000B589B00A230193A5 +:106A90000E4B1B6802930591CDE903020C48006878 +:106AA000C00518464FF0000304D0002269461BF0D1 +:106AB0006BFE04E04FF0FF3269461BF0AFFD01288A +:106AC00002D0012009B000BD0020FBE70800002033 +:106AD00004ED00E038B504461CF0A6FA02464FF07B +:106AE000FF3000900023012160691CF0B5FC38BD27 +:106AF0000020704738B50446406948B14FF0FF3177 +:106B0000002300911A4605211CF0A6FC00206061BC +:106B1000002038BD38B504461CF086FA02464FF016 +:106B2000FF3000900023022160691CF095FC38BD05 +:106B300038B5044681604FF47A704243B2FBF0F1FD +:106B4000044800902346002203A01CF019FC606159 +:106B500038BD0000814E00006800000001617047F0 +:106B6000C0E90312704708B54FF0FF3100910023D0 +:106B700040691A4603211CF06FFC08BD70B50C007B +:106B8000054601D0012000E000206A2206A1FEF7A0 +:106B90002BFF284600F034F810B100206C60206014 +:106BA000286820602C6070BD6C6973745F626173CB +:106BB00069632E630000000070B50C00054601D02B +:106BC000012000E00020532207A1FEF70DFF284618 +:106BD00000F016F808B12C6001E06868046000203D +:106BE0006C60206070BD00006C6973745F626173DB +:106BF00069632E630000000000210160416070475E +:106C0000006808B10020704701207047006808B193 +:106C10000020704701207047016819B10A680260BE +:106C200012B103E00022FAE70022426008467047F2 +:106C300070B5054600680C4600B10120C32209A1C9 +:106C4000FEF7D2FE206800B10120C42205A1FEF7A4 +:106C5000CBFE69682068086060686860002020607A +:106C6000606070BD6C6973745F62617369632E6389 +:106C70000000000070B5034600200246012513F80D +:106C80000240002105FA01F6344201D0401C80B2D6 +:106C9000491CC9B20829F5D3521CD2B2052AEED339 +:106CA00070BD70B50446008942F6554290472521D3 +:106CB000B0FBF1F201FB1201CA0801F00705A25C6A +:106CC0000123AB401A4201D0084670BDE188414320 +:106CD0002046BDE87040C1F3074102F0D5BA30B597 +:106CE00004461068206010790D4600F01F002071E6 +:106CF0002046FFF7BFFFE08085EA1540208130BDC8 +:106D00000A2801DA303003E00A38062802DA413076 +:106D1000C0B270473F20704770B50446C08E88B03F +:106D2000002822D0258F94F83430A2268DF80060F8 +:106D30001A268DF80160A6890A46ADF80400ADF860 +:106D4000082004F11C01ADF80260ADF80650ADF862 +:106D50000A30102203A8FDF777FBA1891C236A469D +:106D6000A06800F02DF90020E08608B070BD00009A +:106D700004481144814203D9012018600320704760 +:106D8000002070475B6E00200249CA6D82430243B7 +:106D9000CA6570470000094043688B4204D180688F +:106DA000904201D101207047002070471CB500229D +:106DB000202140201BF092FB104C03220021A060F8 +:106DC00001201BF08BFB606004F10C010E20CDE96B +:106DD00000014FF480640023224609A109481CF0F9 +:106DE000A9F8064902201031CDE90001002322460E +:106DF00005A106481CF09EF81CBD00000000002004 +:106E0000630000000D4A00007000000031DE010048 +:106E100010B504F002FC0022BDE81040114602202B +:106E200004F0C2BB70B50646401E1D460C46042841 +:106E300009D220782968884205D10622211D686878 +:106E4000FDF73BFB08B1002070BDC5E902640320DB +:106E500070BD00000248017A491C017270470000B1 +:106E60007401002010B5044603F0DAF800200EF09B +:106E70008DFF0FF0A7FD0EF0E1FD07F0F5FF0BF021 +:106E8000FFFC11F027FA15F015F9002C03D0BDE82E +:106E9000104010F0ECBA10BD70B50446B0F1A53F3B +:106EA00019D0B4F1C33F16D00123DA0205211B200B +:106EB00016F072F90546B4F1F23F09D08D2206A111 +:106EC0000020FEF791FD2846BDE8704016F0C4BAD8 +:106ED00007202870F7E770BD6474626C652E63004C +:106EE00070B50A4C4FF42020074DE0641AF0B0F959 +:106EF000800602D54FF4803001E04FF40040284472 +:106F0000C0F31300A06470BD00000A4000000940F7 +:106F1000F8B505461B480E46002101800FF016F813 +:106F20001AF0A4F916F0E0F868460FF049F80446A4 +:106F3000009842F203114FF46367884201D30120A5 +:106F400000E00020852210A1FEF74EFD3A462146C2 +:106F5000002016F035F9009804F56361A0F5636030 +:106F600082B2012016F02CF91AF016F93046FFF71C +:106F700079FF002D04D02846BDE8F840FFF78CBF0C +:106F8000F8BD00000C040020647469702E630000DA +:106F900009490120096809B1002070470749CA69F9 +:106FA000002AF9D1044A283212688968491E8A42A7 +:106FB000F3D10220704700005C0B00202400002069 +:106FC00030B4040003D0A44630BC0420604730BC79 +:106FD0007047FEB51E4617460C46054602F070F98E +:106FE000002816D0011D6846FFF755FC0CE06846E6 +:106FF000FFF757FC0189A14206D1D0F804C03346FF +:107000003A4629460420E0476846FFF735FC002849 +:10701000EDD1FEBD1CB5A0228DF8002003228DF815 +:1070200001208289ADF802208DF8041081898068E2 +:1070300005236A46FFF7C4FF1CBD30B587B0044680 +:10704000A3250A988DF8005018258DF80150A589C0 +:10705000ADF80410ADF806200146ADF80250ADF8C9 +:10706000083010220DF10A00FDF7EEF9A1891A236C +:107070006A46A068FFF7A4FF07B030BD10B586B020 +:107080000446A1208DF8000016208DF80100A0898B +:10709000ADF80410ADF80200ADF806201022194634 +:1070A00002A8FDF7D1F9A18918236A46A068FFF765 +:1070B00087FF06B010BD00002DE9F05F0024924666 +:1070C000894605462746264624E000BF05EB840096 +:1070D000B0F9021035F9240017F092FD834605EB54 +:1070E0008800B0F9021035F9280017F089FDABEBE4 +:1070F000000043F6FF71884203DBA0F5FE40FF3835 +:1071000004E00849884201DC490C0844074404EBC8 +:107110004904761C04EB0908D045D7DB97FBF6F051 +:10712000BDE8F09F01C0FFFF2DE9F047427804461B +:10713000901C86B00E46814206D006B0921CBDE877 +:10714000F047F548FDF703BF2178F4A0FDF7FFFEF7 +:1071500020780122DFF8D4834FF000094FF0070AAE +:1071600010287DD00BDCA0F105000B2835D2DFE81C +:1071700000F0BA97348334345A3434112B003E284B +:107180006FD004DC12286DD0132826D12CE05728AC +:1071900023D19CE1D8F80000A278454690F852101F +:1071A000E3A0FDF7D4FE6179EAA0FDF7D0FE2968DF +:1071B000A07881F85200EC49B4F8030009888842AD +:1071C00007D0EA49098804E0D8F80000E17880F89F +:1071D0005210D8F80010A1F88690D8F8000090F866 +:1071E0006800012877D07CE10325002717E0635B66 +:1071F000AD1C625BAD1C184603F0B8FB38B190F8CB +:107200004010914208D3891A80F8401006E01946D0 +:10721000D7A0FDF79CFE01E080F840907F1CA0788D +:10722000B842E4DCD9E7B4F8030003F09FFB0500A3 +:10723000D3D0A07860B9E17A04F10500090703D53D +:10724000698A41F004016982C078000600D5EA75B8 +:10725000688A40F00201B0486982EA7D603002E04D +:107260004FE05FE052E0FDF772FE688A0106B4D598 +:1072700040F020006882B0E7B4F80350284603F0DD +:1072800075FB0028A9D0A17831BB617900298169FB +:1072900002D041F4004101E021F4004181611BE092 +:1072A000B4F80350284603F061FB002895D0418ACA +:1072B0000A0607D521F0800141F010014182A17832 +:1072C00001758AE7A2783AB9427D022A04D841F0D2 +:1072D0004001418281E700E100F094FC014628462C +:1072E00003F044FC79E76279A178AFA0FDF7FEFDD9 +:1072F000B4F8030003F03AFB002893D080F811A003 +:107300006BE703F067FE03F079FE66E7A0780028DC +:1073100088D1B4F8030003F029FB0028ABD0617AD0 +:1073200001745AE7A07806287DD010DC01281CD013 +:107330000428A0D1E078002876D1A08803F016FBBD +:10734000002871D08030A1794170027045E70A2889 +:107350000BD012288FD1207908288CD2E17800290F +:1073600070D097A0FDF7F3FD37E7E0780028A8D1AB +:10737000A788082F27D2D8F8000000EB8705686996 +:1073800010B9FFF7CFFA686105001CD0EF8002202A +:10739000C5F8189068752A46924905F11C00FFF758 +:1073A000DFFBFFF7A5FB6863E0792872294604F14B +:1073B000080017F0FEFB05206874A0792874A078F7 +:1073C0000A2804D012E0A08800F0D0F905E7D4F82C +:1073D0000E10C5F88210618AA5F886106169C5F89B +:1073E0008810218B05F18000A5F88C10E089A5F8A4 +:1073F0005200287C60B9D8F8001091F85010E97359 +:10740000D8F8000005F1090190F8500000F086FA64 +:107410002846FFF747F90246E98873A0FDF797FD74 +:1074200003F07AFB01E00EE023E0D8F8000090F8CA +:107430005E00C0068AD5E98840F6B832724803F08B +:10744000E7FBCAE618E034F8035F284603F08EFA3B +:107450006288A388E188248900280AD054304688AD +:107460000088CDE90014CDE902062946674803F0FB +:10747000CFFB06B0BDE8F087B4F80520104603F056 +:1074800075FA0546217962A0FDF761FD2079D8F8EB +:107490000020C0EBC001114491F89310E97369B169 +:1074A0002179D8F80000C1EBC101014401F180004D +:1074B000D1F8941045F8091F008B06E0D8F80000B9 +:1074C000416C45F8091FB0F84800A88085E660883F +:1074D00003F04CFA0028B4D1CBE7B1B2204603F058 +:1074E00033FCB1B2204603F0EFFA2078052811D121 +:1074F000B4F8030003F03AFA60B1D0E90012047D59 +:10750000458ACDE9031203F057FFE80502D503AD24 +:10751000214695E0A7E00000A03902004843493A1F +:107520004556454E543A253032780000BC370200AB +:10753000434D445F434F4D504C45544520636D646B +:1075400073206F6C64202575202D206E65772025B3 +:1075500075000000636D645F636F6D70207374610C +:107560007475732025750000583B0200603B0200D3 +:107570006863695F6E756D6265725F636F6D706C75 +:10758000657465645F7061636B6574206C697374A6 +:107590007320756E7573656420636F6E2068616E0D +:1075A000646C652025750000646973203A2073209F +:1075B00030782578202C7220307825780A00000059 +:1075C00061647620736574207465726D696E617490 +:1075D0002064756520746F20636175736520307851 +:1075E00025780A0085A900004E657720636F6E6ECE +:1075F000656374696F6E3A2068616E646C652025FE +:10760000752C202573000000803A0200083B020020 +:107610006164762068616E646C65722030782578CC +:1076200020636F6E6E656374656420746F20636F92 +:107630006E2068616E646C6520307825780A0000E1 +:107640000BA0FDF784FCE1208DF800008DF801A06F +:107650008DF802400DF10301284617F0AAFA09211E +:10766000684603F031FA06B0BDE8F04703F036BDD6 +:107670006863695F656D69745F646564696361749B +:1076800065645F626F6E64696E675F726573756C67 +:10769000742025752000000010B5044603F0B6FFE5 +:1076A000204610BD13460A4610B50146024803F0B5 +:1076B000AFFAC0B210BD0000B03B020010B50246E8 +:1076C000024803F0A5FAC0B210BD0000B03A0200B3 +:1076D00010B588B00C46694617F05CFA04A920463C +:1076E00017F058FA04AA6946024803F091FA08B064 +:1076F000C0B210BDE03A020010B5024803F088FAAB +:10770000C0B210BDA83A020010B5024803F080FADA +:10771000C0B210BD603B020010B5024803F078FA19 +:10772000C0B210BDC03B020000B1012004490A688C +:1077300092F88920824202D0096881F88900704756 +:10774000BC37020010B5024803F062FAC0B210BDA7 +:10775000A03A020008B5009313460A4601460248C3 +:1077600003F056FAC0B208BD2038020010B5034637 +:1077700003F0FCF840B10621417413221946054874 +:1077800003F046FA002010BD0021184603F088F9E6 +:10779000F8E70000503A020038B54FF0FF30ADF87E +:1077A0000200ADF8000006250DE0684603F02EF952 +:1077B0000446407C062806D0E1881322054803F0E1 +:1077C00027FA00B96574684603F000F90028ECD187 +:1077D00038BD0000503A020038B500B101200D4913 +:1077E0000A6892F88840844210D121460AA0FDF729 +:1077F000AEFB66208DF8000001208DF801008DF8A9 +:1078000002400321684603F05FF938BD82F8880022 +:1078100038BD0000BC3702004254535441434B5F13 +:107820004556454E545F444953434F564552414295 +:107830004C455F454E41424C4544202575000000B3 +:107840002DE9FF4FDFF8A8A085B00024DAF800206A +:10785000DDE912691268DFF894808B460A2000EB9C +:10786000061153692746B8F8000003AA9847050097 +:1078700001D001210FE0562009B0BDE8F08F00BF14 +:1078800004EBC40219F81220521E01FA02F0384328 +:10789000641CC7B2E4B2B442F2D3DDE907018DE85B +:1078A00083005B46D8F804102846059A03F054F884 +:1078B000C7B200240DE000BF04EBC40109EB410195 +:1078C000891CE8191022FCF7BFFD1037641CFFB2B9 +:1078D000E4B2B442F0D3DAF80010404681F850B078 +:1078E0002946039A03F030FD0020C5E7903B0200D3 +:1078F000BC3702000248006890F88A007047000018 +:10790000BC3702000449096851F8CC2F02604A686C +:107910004260896881607047BC370200074A0028CE +:10792000106804D050F84A2F0A60808803E0426C47 +:107930000A60B0F84800888070470000BC37020039 +:1079400010B50146024803F063F9C0B210BD000053 +:10795000D03A0200034909684A6C0260B1F8481045 +:1079600081807047BC37020010B50446014604A070 +:10797000FDF7EDFA022C01D9012010BD002010BD49 +:107980006761705F6D69746D5F70726F7465637449 +:10799000696F6E5F72657175697265645F666F723B +:1079A0005F73656375726974795F6C6576656C2069 +:1079B000257500007FB50DF1200CBCE870008DE846 +:1079C000780013460A460146024803F021F904B044 +:1079D000C0B270BD983B020010B5024803F018F920 +:1079E000C0B210BDA03B020013460A4610B50146C6 +:1079F000024803F00DF9C0B210BD000010380200BB +:107A000013460A4610B50146024803F001F9C0B218 +:107A100010BD0000083802001CB5049CCDE90034FC +:107A200013460A460146024803F0F2F8C0B21CBDF4 +:107A30001838020010B50146024803F0E9F8C0B258 +:107A400010BD0000A83B02000448417A012903D17F +:107A50000221417218F054BD7047000074010020EB +:107A6000074810B5426D40F282210648FFF760F8E2 +:107A70000448FFF72FF8BDE81040FFF7E5BF00000E +:107A800074010020CC73002010B50022074908487B +:107A9000FFF766F8074840F28221426D0448FFF77D +:107AA00047F8BDE810400248FFF714B8617A0000BB +:107AB000CC7300207401002010B5024803F0A8F830 +:107AC000C0B210BD983A020010B5024803F0A0F809 +:107AD000C0B210BDF837020010B5024803F098F8A4 +:107AE000C0B210BDC83B020010B50146024803F009 +:107AF0008FF8C0B210BD0000183B020010B501465F +:107B0000024803F085F8C0B210BD0000703A0200D0 +:107B100010B50146024803F07BF8C0B210BD00006A +:107B2000D83A020010B50146024803F071F8C0B21D +:107B300010BD0000883A020010B50246024803F06A +:107B400067F8C0B210BD0000B83A02002DE9F0415C +:107B50000E46074602F00AFF040010D0384600F037 +:107B600047F80546024631460AA0FDF7F0F9B5424E +:107B700007D329463846BDE8F04102F0F7BF01219E +:107B8000F8E76675608A40F020006082BDE8F04149 +:107B900003F0A4BA6761705F726571756573745F95 +:107BA00073656375726974795F6C6576656C2025A1 +:107BB000752C2063757272656E74206C6576656CC9 +:107BC0002025750010B50146024803F021F8C0B227 +:107BD00010BD0000583B020013460A4610B501468E +:107BE000024803F015F8C0B210BD0000B83B020017 +:107BF00010B502F0BBFE18B1BDE8104000F002B8AD +:107C0000012010BD10B1008B000401D40120704789 +:107C10000220704702207047084B10B51B68C0EB6C +:107C2000C0021A440B6842F8943F8B8893800A463E +:107C30000146034802F0ECFFC0B210BDBC370200A1 +:107C4000303B020000B101200249096881F88A0036 +:107C500070470000BC37020001490968086470479A +:107C6000BC3702001CB5049CCDE9003413460A461B +:107C70000146024802F0CCFFC0B21CBDE83702004A +:107C80000A4610B50146024802F0C2FFC0B210BD5C +:107C9000F03702002DE9FE4F144E8846A6F11C0174 +:107CA0001D4609681746814609683088DDF830A00E +:107CB0004B6902AA691D9847040014D0CDE90075EC +:107CC00043464A46716802F047FEC0B220442A4645 +:107CD0005146FCF7B9FB21463046029A03F034FBCB +:107CE0000020BDE8FE8F5620FBE70000D8370200D9 +:107CF0002DE9FC47124D0F46A5F12401994609686C +:107D0000164680460968288801AA4B69311D9847A4 +:107D1000040013D000963B464246696802F01CFE00 +:107D2000C0B2204432464946FCF78EFB2146284625 +:107D3000019A03F009FB0020BDE8FC875620FBE711 +:107D4000E037020004490268096841F8CC2F426814 +:107D50004A60806888607047BC3702000A4610B5E8 +:107D60000146024802F054FFC0B210BDC8370200FD +:107D70002DE9FF5F154D8946291FDDE90E6B096866 +:107D80001F4690460968824628884B6903AA711DE0 +:107D90009847040018D0CDF80080CDE901764B4615 +:107DA00052462046696802F0D7FDC0B220443246F0 +:107DB0005946FCF749FB21462846039A03F0C4FACA +:107DC000002004B0BDE8F09F5620FAE7C03702005B +:107DD0002DE9FF5F164D8946A5F11401DDE90E6B13 +:107DE00009681F4690460968824628884B6903AA9D +:107DF000B11D9847040018D0CDF80080CDE9017678 +:107E00004B4652462046696802F0A6FDC0B22044A7 +:107E100032465946FCF718FB21462846039A03F0E0 +:107E200093FA002004B0BDE8F09F5620FAE7000066 +:107E3000D037020013460A4610B50146024802F048 +:107E4000E7FEC0B210BD0000203B020008B50B46A3 +:107E5000009202460021024800F074F808BD0000BC +:107E6000403B02002DE9FC4791461B4A194F8846CA +:107E7000126804460221126801EB880138885369B0 +:107E800001AA9847060007D043462246796802F0C7 +:107E900063FDC5B2002414E05620BDE8FC8700BF96 +:107EA00004EB440009EB40010A7900924B8819F871 +:107EB0001020701909A102F04FFD2D1D641CEDB2B8 +:107EC000E4B24445ECD331463846019A03F03CFA1B +:107ED0000020E2E7503B0200BC37020031323100A3 +:107EE0002DE9F04F8DB0DFF854C0DDE91F89DDE9E1 +:107EF0001BBADCF800C0DDE91D56C0EBC0076744C3 +:107F0000DDF868E0179C87F8934008AFA7E86003A6 +:107F1000DDF864C0CDE906BACDE904CE169E189D01 +:107F2000CDE9003613460A4601460548CDE902452B +:107F300002F06EFE0DB0C0B2BDE8F08FBC3702009B +:107F4000383B02002DE9FC471C460A9D174688462F +:107F50008146F72B28D9F720CDE900050B460122F1 +:107F60003946484602F054FE10F0FF0025D1F73C98 +:107F7000A4B2F73516E0F72C01D3F72600E0264629 +:107F8000A01BCDE900650404240C01D0002200E010 +:107F9000022243463946484602F03AFE10F0FF00FE +:107FA0000BD13544002CE6D14346032239464846DE +:107FB000CDE9004502F02CFEC0B2BDE8FC87000010 +:107FC00008B5009313460A460146024802F020FE17 +:107FD000C0B208BD883B02002DE9FC4716460F469B +:107FE00002EB8601244ADFF88C80994612688246AB +:107FF00000241268C91CB8F80000536901AA984708 +:10800000050002D0002001220DE05620BDE8FC87CB +:1080100000EB400319F813305B1E02FA03F1214311 +:10802000401CCCB2C0B2B042F2D300943B465246A0 +:108030002846D8F8041002F08FFCC7B200240FE0E5 +:1080400004EB440109EB41008188009143884278A8 +:10805000E8190AA102F080FC7F1D641CFFB2E4B2A3 +:10806000B442EDD329464046019A03F06DF9002051 +:10807000CCE70000803B0200BC3702003132320006 +:1080800008B50B460092024600210248FFF75AFF4E +:1080900008BD0000483B02000A4610B501460248F0 +:1080A00002F0B6FDC0B210BDC83A02002DE9F84397 +:1080B0001A4F15460C468046F82925D90146F82363 +:1080C00001223846009502F0A3FD10F0FF0023D1F5 +:1080D000F83CA4B2F83515E0F82C01D3F82600E0FE +:1080E0002646A01B0404240C009501D0002200E0C9 +:1080F000022233464146384602F08AFD10F0FF0066 +:108100000AD13544002CE7D12346032241463846A4 +:10811000009502F07DFDC0B2BDE8F883703B02001F +:108120000A4610B50146024802F072FDC0B210BD09 +:10813000783B020008B5009313460A460146024800 +:1081400002F066FDC0B208BD683B02000A4610B5E9 +:108150000146024802F05CFDC0B210BD00380200CA +:108160001CB5049CCDE9003413460A46014602487A +:1081700002F04EFDC0B21CBD283B0200054902685A +:10818000096841F84A2F82888A800146024802F035 +:108190003FBD0000BC370200903A02000249096866 +:1081A00081F8510070470000BC3702000B4900B550 +:1081B0000A6892F85C20C2F3C00262B1096891F8C3 +:1081C000511041B102F0D2FB28B1807CC0F3800095 +:1081D00008B1012000BD002000BD0000BC37020036 +:1081E000F0B587B0DDE90C45DDE90E67DDE910CEBD +:1081F0008DE81840CDE9057C13460A46CDE90356C3 +:108200000146034802F004FD07B0C0B2F0BD000013 +:10821000283802007FB50DF1200CBCE870008DE815 +:10822000780013460A460146024802F0F1FC04B009 +:1082300070BD0000C03A02002DE9F0478AB01E462A +:108240001546884604280AD0082875D128781B28A6 +:108250000FD01D2808461FD001F032F81EE0297803 +:10826000782969D1FA494C68002C50D04146A04782 +:108270004DE0B5F801700C46EA1CDE1E3946A72019 +:1082800016F0D2FD0246F61C0AB0B3B239462046BB +:10829000BDE8F047FEF79DBE15F0EEFD04004BD0A3 +:1082A0002978771E4FF001090D297CD009DC0C29B3 +:1082B00015D2DFE801F014FA143114F914F814643B +:1082C00014CE172970D006DC0F296ED0112934D0B6 +:1082D000132904D147E1192968D01D293CD0DDA01C +:1082E000FCF734FE28788DF808908DF809000020FE +:1082F00006218DF80A008DF80C108DF80B00009007 +:108300000190A089052302AA042104F0C5FC0AB04B +:10831000BDE8F04700F0A2BCB5F8015004F086F9C2 +:10832000854200D22846E08284F81890A28901464E +:108330001046FCF79BFBEAE7DDE120780228E6D156 +:1083400032462946204616F0E7FB69782046711A26 +:10835000294401224988A3E04746B5F80180EA1C78 +:10836000F61E4146A82016F05FFD0246F61CB3B289 +:1083700041463846FEF72DFE84F85190C7E7207835 +:108380000C2820D016DC062801D00828BFD13246A0 +:108390002946204616F073FB3146284600F09AFF26 +:1083A0000146204603E0E6E013E16DE145E119F006 +:1083B0009BFAACE7142832D02428A8D16888A4F806 +:1083C0004C00252037E195F80180B8F1070F07D25E +:1083D0006888A085A8882086E88860860D202AE124 +:1083E000022715E0E91935F807904A8822868A881D +:1083F0006286C98801A819F01DFC01A80090638E4F +:10840000228E49462046FEF718FE07EB080087B289 +:10841000B742E7D369782046711A695A3FE095F868 +:10842000018000210227A8F1020A0DE035F807902B +:10843000EA191FFA8AF3921C4946204616F010FBEF +:1084400007EB0800494687B2B742EFD32046132214 +:1084500026E020780E2814D0102827D028288DD187 +:10846000204600F07DFA218F6A1CA92016F0DCFC62 +:1084700002460837BBB2A189A068FEF7A1FD002122 +:1084800035E101A9681C16F085FBA18D01AA0092B7 +:108490002046638E228EFEF7D0FDA18D20460B2252 +:1084A00019F042FA33E70BE022E0F7E0204600F053 +:1084B00057FABBB2218F6A1C204616F0D1FADEE7CC +:1084C0004FF004094FF6FF78012704F11C0A09E078 +:1084D000E819E95B40885346804602462046FEF78D +:1084E000CDFD4F44B742F3DB204641460322D7E798 +:1084F00068780427022800D11227F01B35F800A065 +:10850000AD1CB61E1FFA86F8002621E035F806904D +:10851000042F05EB060021D0801C06A916F03AFBBB +:10852000A4228DF8002014228DF80120A289ADF834 +:10853000022006A9ADF8049010220DF10600FBF709 +:1085400083FFA18916236A46A068FEF739FD3E44E1 +:108550004645DBDB204651460922A1E7418806A8B3 +:1085600019F068FBDCE72078182803D0262801D012 +:108570002C2897D1AAE0761E2078B6B2761DBFB21D +:10858000122815D02A288DD1218F628F6B1CAA202A +:10859000009716F057FC020004D0B3B2A189A0687E +:1085A000FEF70EFD3A462921204619F085F9AEE680 +:1085B000218F628F6B1CA620009716F043FC0200EF +:1085C00004D0B3B2A189A068FEF7FAFC3A461121A3 +:1085D000EAE720781A2812D01C281CD02E2814D0A4 +:1085E0003228E4D1204600F0BBF932462946204625 +:1085F00003F05AF800287FF462AF7E2177E0B5F8E7 +:1086000003001D226087192110E0B5F803002F2216 +:1086100060872D210AE032462946204603F044F8BF +:1086200040B1B5F803001D2260871B21204619F0D8 +:108630006AF96CE62120207069E620781E2845D072 +:10864000202843D022281BD03028B0D13EE00000A3 +:10865000E80000204154542048616E646C65722C1F +:1086600020756E68616E646C656420726573706FEE +:108670006E7365207479706520307825303278000B +:10868000204600F06DF9B8E7207816288FD1BBB2EC +:108690006A1C0021204616F0E3F917E029790A291F +:1086A00010D12078082815D006DC02280ED0042826 +:1086B0000CD0062806D10DE00A2807D00C2805D0DA +:1086C00014280CD0204600F0B8FA20E6204600F02E +:1086D00047F9D4E6E18D2046FEF71EFBF6E720467B +:1086E00000F03EF9A08D218E8842F2D10A21204669 +:1086F000FEF790FC0BE60AB0BDE8F08710B5044623 +:10870000084615F0EDFB18B1017819B1952010BDA0 +:10871000562010BD1F218460017000F09FFA0020D8 +:1087200010BD70B505461446084615F0D9FB18B1C2 +:10873000017819B1952070BD562070BD6188A2885E +:10874000914203D10021FEF765FC09E08560618854 +:10875000491C8185A188C1850921017000F07EFA3C +:10876000002070BD2DE9F04107461D46164608461B +:10877000DDF8188015F0B4FB040004D0207820B197 +:108780009520BDE8F0815620FBE7A760A685E5852A +:10879000012084F85000002565831022414604F131 +:1087A0001C00FBF751FEE5860720207000F056FA0A +:1087B0000020E6E72DE9F04107461D46164608462B +:1087C000DDF8188015F08CFB040004D0207820B16F +:1087D0009520BDE8F0815620FBE7A760A685E585DA +:1087E000012084F85000A4F81A80414604F11C00CE +:1087F00019F020FA0020E0860720207000F02EFA01 +:108800000020E6E770B506461C461546084615F0FA +:1088100067FB18B1017819B1952070BD562070BD65 +:1088200086608585C485002180F85010C1860521A9 +:10883000017000F013FA002070BD10B50446084620 +:1088400015F04EFB18B1017819B1952010BD5620D6 +:1088500010BD0121846081854FF6FF72C2850170D1 +:108860000021418300F0FAF9002010BD70B50546E3 +:108870001646084615F034FB040003D0207818B1E2 +:10888000952070BD562070BD0120A560A0854FF6D3 +:10889000FF70E085002060831022314604F11C0047 +:1088A000FBF7D2FD0320207000F0D8F9002070BD46 +:1088B00070B505461446084615F012FB18B101784C +:1088C00019B1952070BD562070BD0121856081854C +:1088D0004FF6FF71C18503210170448321461C308E +:1088E00019F0A8F900F0BAF9002070BD10B50446DF +:1088F000084615F0F5FA18B1017819B1952010BDA8 +:10890000562010BD1D218460017000F0A7F90020E1 +:1089100010BD70B506461C461546084615F0E0FA2F +:1089200018B1017819B1952070BD562070BD8660D0 +:108930008585C4850B21017000F090F9002070BD81 +:1089400010B50C4615F098FA10B1017E012903D03C +:1089500017202080952010BDC08A2080002010BDE7 +:1089600010B500210170044681890448FCF7EEFA35 +:1089700004F16000BDE81040FEF7BCB89437020077 +:1089800070B5042817D11078052810D1B2F803501B +:10899000284600F095FC040009D01F2100F04DF995 +:1089A0000549002041F825002046FDF7A7FFBDE856 +:1089B000704000F053B970BD5C690020074910B5E4 +:1089C00000200870083106484860084601F0AAFEF9 +:1089D000BDE810400348FDF775B80000E80000202E +:1089E000818900003982000010B515F045FA002891 +:1089F00002D0007808B1002010BD012010BD70B574 +:108A000004461D460E46104600F05AFC002807D0CA +:108A1000666025812146BDE87040001DFDF708BF56 +:108A200070BD2DE9F0410646DDE906781C46154685 +:108A3000084615F055FA20B1017821B19520BDE81E +:108A4000F0815620FBE786600587878744873121C0 +:108A5000C0F84080017000F001F90020EFE700004D +:108A60000149012008707047E800002070B50546F4 +:108A70001446084615F034FA18B1017819B195205A +:108A800070BD562070BD856004872721017000F0FD +:108A9000E5F8002070BD0023AFF3008070B50646F6 +:108AA0001C461546084615F01BFA18B1017819B195 +:108AB000952070BD562070BD8660058744872921AA +:108AC000017000F0CBF8002070BD0023AFF30080F0 +:108AD00070B506461C461546084615F001FA18B151 +:108AE000017819B1952070BD562070BD866005874C +:108AF00044871121017000F0B1F8002070BD70B5FD +:108B000006461D461446084615F0EAF918B10178E4 +:108B100019B1952070BD562070BD8660A0F8444004 +:108B200015218564017000F099F8002070BD70B5C2 +:108B300005461446084615F0D3F918B1017819B165 +:108B4000952070BD562070BD856004870021418747 +:108B50000F21017000F082F8002070BD2DE9F04176 +:108B600007461D4616460846DDF8188015F0B8F988 +:108B7000040004D0207820B19520BDE8F081562073 +:108B8000FBE7A760A685E5852686658600206083CD +:108B90001022414604F11C00FBF756FC1320207004 +:108BA00000F05CF80020E8E72DE9F04107461D469B +:108BB00016460846DDF8188015F092F9040004D036 +:108BC000207820B19520BDE8F0815620FBE7A76012 +:108BD000A685E58526866586A4F81A80414604F1B7 +:108BE0001C0019F027F81320207000F037F800203F +:108BF000E9E700000149486070470000E8000020F4 +:108C00002DE9F04106461C4615460846069F15F01C +:108C100067F920B1017821B19520BDE8F081562097 +:108C2000FBE7866005878487002141871B21076455 +:108C3000017000F013F80020EFE770B504460078EB +:108C40000D46002808D02046FFF78AFE2946204618 +:108C5000BDE87040FEF7DEB970BD00002DE9F04FB1 +:108C6000002689B04FF01E094FF0040A4FF0020BA6 +:108C700037464FF00808CC4850F82640002C79D0F1 +:108C8000A089FCF719FF90B12278217EC7A0FCF7DC +:108C90005DF994F8510080B184F85170A0890123E6 +:108CA0008DF80890009702AA0421019792E0A0890C +:108CB00009B0BDE8F04FFCF702BF2078172801D0BB +:108CC0002B2818D1204614F039FFA18FC01E8842EE +:108CD00011DA204614F032FF0246A18FC1A0FCF742 +:108CE00035F92046FFF73CFE09B02046BDE8F04FBD +:108CF0000D21FEF78FB9606D04F078F905462178F3 +:108D0000C3A0FCF723F92078362833D2DFE800F03F +:108D10009E1B9E259E469E499E519E659E719E75F8 +:108D20009E779E799EA39EB69EB89EBC9EBE9EC117 +:108D30009EC39ECB9EED9ED39EDD9EE59EFE9EFC39 +:108D40009EBA9EFB9EFA84F800B0E08D0090A38D41 +:108D5000A2894FF42051102048E084F800A0608BD5 +:108D60004FF4205538B1ADF81C00E18D07AA8DE80D +:108D700006080AE06AE003A904F11C0015F00AFFE6 +:108D8000E08D102203A98DE80700A38DA289294652 +:108D90000620FCF7BFFF09B0BDE8F08F0620207069 +:108DA00001E084F8008009B02046BDE8F04F15F0DE +:108DB000BEBF84F80080A589A18DE08D8DF808A044 +:108DC000ADF80910ADF80B000097052302AA0421A5 +:108DD0002846019703F060FFDDE70C202070E08D4E +:108DE0000090A38DA28942F602010820FDF7DFF969 +:108DF000D1E70E202070228E60E010205CE012206F +:108E000064E014202070618B204639B1C28D00923D +:108E1000838DA2890820FDF7CAF917E000F11C0232 +:108E20008489818DC08D8DF80880ADF80910ADF86A +:108E30000B000DF10D01104615F0ACFE0097152347 +:108E400002AA04212046019703F026FF761C082E73 +:108E5000FFF411AF9FE716202070A089B4F84420DA +:108E60000E23A16C8DF808304FF6FF7303EA42021F +:108E7000CDE90012012302AA0421E5E718202DE024 +:108E80001A2044E0322042E01C2040E084F80090A8 +:108E900046E0202000E02220207009B02046BDE8F6 +:108EA000F04F15F03FBF2420207009B02046BDE8E8 +:108EB000F04F15F07CBF28202070228FA18909B0C7 +:108EC0000A20BDE8F04FFDF787B92A20207009B0CD +:108ED0002046BDE8F04F15F055BF2C20207009B09A +:108EE0002046BDE8F04F15F06DBF2620207004F13C +:108EF0004E000090B4F84C20A18902231220FDF707 +:108F0000B9FB48E726E011E008E0FFE72E202070DB +:108F100009B02046BDE8F04F15F019BF3020207091 +:108F200009B02046BDE8F04F15F00CBF16F060FA0E +:108F300000288FD034202070A86D216C01AB0091E7 +:108F4000394A15C3A38F228FD22105F1480016F0AC +:108F500059FA20E736202070A96DB4F80C90228FC2 +:108F6000B4F83C80D223266C8DF81030ADF8112077 +:108F7000059104F158000DF1140A06A915F016FE2A +:108F80000C20CDE902A0CDE90068032304AA042146 +:108F9000484603F0C9FE27702046FFF7E1FCA86DA4 +:108FA000401CA865F7E600005C6900202D20686180 +:108FB0006E646C655F7065726970686572616C5F24 +:108FC0006C6973742C206D747520737461746520E2 +:108FD00025752C20636C69656E74207374617465EB +:108FE00020257500676174745F636C69656E745FDA +:108FF00072756E3A2076616C7565206C656E202501 +:1090000075203E204D5455202575202D20330A0013 +:10901000676174745F636C69656E745F73746174A7 +:109020006520257500000000D56500002DE9F0479A +:1090300007461D46164689460846DDF8208014F08E +:109040001BFF0446007850B9484616F0BFFF0146A2 +:1090500060650AA0FBF77AFF606D002802DA9520B0 +:10906000BDE8F087A7602687A5873320C4F8408035 +:109070002070FFF7F3FD0020F2E700006C655F64ED +:1090800065766963655F6B6579206973203A30782E +:1090900025780A0070B50A4E0546002456F82400CB +:1090A000A84207D1A98907A0FBF750FF7F212846D6 +:1090B000FFF7C3FD641CA4B2082CEFD370BD000001 +:1090C0005C6900204741545420636C69656E7420CC +:1090D00074696D656F75742068616E646C652C20B1 +:1090E00068616E646C65203078253032780000004D +:1090F0002DE9F04106461C4615460846069F14F029 +:10910000EFFE20B1017821B19520BDE8F081562015 +:10911000FBE7866005878487002141872B21076450 +:109120000170FFF79BFD0020EFE770B506461D4676 +:109130001446084614F0D4FE18B1017819B19520F0 +:1091400070BD562070BDE90704D0A179C90601D4CD +:10915000982070BDA90704D5A179890601D499206A +:1091600070BD866061888185A188C185A0F84E5058 +:1091700023210170FFF772FD002070BD1CB5049C17 +:10918000CDE90034002300F001F81CBD2DE9F041C9 +:109190000646DDE906781C461546084614F0A0FE92 +:1091A00020B1017821B19520BDE8F0815620FBE780 +:1091B00086600587878744872D21C0F8408001702D +:1091C000FFF74CFD0020EFE71CB5049CCDE900340F +:1091D000002300F001F81CBD2DE9F0410646DDE951 +:1091E00006781C461546084614F07AFE20B1017830 +:1091F00021B19520BDE8F0815620FBE78660058708 +:10920000878744871921C0F840800170FFF726FD49 +:109210000020EFE72DE9F04106461C4615460846BA +:10922000069F14F05DFE20B1017821B19520BDE8C4 +:10923000F0815620FBE78660058784871721076445 +:109240000170FFF70BFD0020F1E7F8B51E4615464B +:109250000F4614F011FE040003D0207818B19520B9 +:10926000F8BD5620F8BD204614F068FCC01EA84288 +:1092700001DA9720F8BD0096A1892B463A46522084 +:10928000FDF7F8F9C0B2F8BDF0B50024234601257A +:10929000C65C002205FA02F73E4207D08C4203D199 +:1092A00002EBC300C0B2F0BD641CA4B2521CD2B227 +:1092B000082AEFD35B1CDBB2052BE9D3FF20F0BDFE +:1092C000082803D2024951F8200070470020704757 +:1092D0005C6900204278891A0844B0F8030070479E +:1092E0002DE9FC41164C18271E46D4F808C0BCF1E5 +:1092F000000F11D04978D9B12178002579B1FCF758 +:109300007DFB237862882570658002B0394630463F +:10931000BDE8F04115F08EBD03230022F5E70023E0 +:1093200000950195B0F8060102221946E04701E0D8 +:10933000FCF764FB192030700120BDE8FC810000BF +:10934000A40000202DE9FF4F87B01D46DDE914730E +:109350008946824600264FF0060B0124B0463A4665 +:1093600029463448FBF7EEFDDDE9161013F096FCB4 +:10937000BD4204D81DB1DAF82401009046E0012373 +:1093800051E06846FCF7F4FDBDF8080008B1A842BA +:109390003CD3B8423DD8CEB158B14FF420516846C5 +:1093A000FCF72FFE28B942F601016846FCF729FEBA +:1093B00060B1414620A0FBF7C5FD29F80480A41C3C +:1093C000A4B209990026201D884222D8BDF80800C1 +:1093D0005FEA00081AD068461599FCF712FEA8B19A +:1093E000BDF810201698824210D105991798FBF706 +:1093F00064F858B9BDF8081016A0FBF7A3FDBDF836 +:10940000081029F80410A41CA4B201260098002812 +:10941000B7D1012C06D0072189F8001020460BB0E7 +:10942000BDE8F08F0A232A465946484615F002FD4A +:10943000F5E70000E8350200456E64206F6620679E +:10944000726F75702C2068616E646C6520307825B1 +:1094500030347800426567696E206F662067726FEE +:1094600075702C2068616E646C652030782530340E +:10947000780000002DE9F04F87B09346109F884692 +:1094800081461E464FF0040A012400253A4619463B +:1094900028A0FBF757FDBE4204D81EB1D9F824011D +:1094A000009033E001233EE06846FCF761FDBDF823 +:1094B000080070B3B8422CD8B04227D3BDF80610CC +:1094C000880501D5102000E00220012C02D9A84215 +:1094D00021D109E008D10546880501D5022100E027 +:1094E000012188F8011002246019801C584510D809 +:1094F000BDF8081028F80410A41CA4B208EB04005E +:109500002A460399FAF7A0FF601984B20098002850 +:10951000CAD1012C06D0052088F80000204607B0EB +:10952000BDE8F08F0A2332465146404615F082FCD2 +:10953000F5E700004154545F46494E445F494E46AA +:109540004F524D4154494F4E5F524551554553542A +:109550003A2066726F6D202530345820746F2025B4 +:10956000303458002DE9F04F2C4C8346B1F80150AF +:10957000B1F803A0A06889B0984691460E46162718 +:1095800058B12A4602A95846FCF7DBFB38B1BDF8B2 +:109590000E00010701D5C00503D403231DE00123FC +:1095A0001BE002A95846FDF733F808B1034614E062 +:1095B000A9F10500711D80B2CDE90010D4F808C0F2 +:1095C000BBF80601534601222946E04710F0FF038D +:1095D00019D0072B09D00D2B07D02A463946404613 +:1095E00015F028FC09B0BDE8F08F0D2B02D0072B39 +:1095F00006D008E020780D2805D02370658002E0B1 +:1096000020780028F9D04A4631464046FAF71CFF38 +:10961000172188F800104846E4E70000A400002065 +:109620002DE9F04387B016460E9D0C460746994635 +:109630004FF00C082A46194621A0FBF783FC4A4646 +:1096400001A93846FCF77DFB28B1BDF80A00800768 +:1096500003D4022307E0012305E001A93846FCF703 +:10966000D7FF030007D04A464146204615F0E2FBEB +:1096700007B0BDE8F083B7F8061101A8FCF7B2FF08 +:10968000BDF81400A84201D20723ECE7401C401BA0 +:10969000B04203DD7019401EADF81400B7F80601A2 +:1096A0000090BDF81400621C401B83B2294601A83B +:1096B000FCF7E0F9401C0D2180B22170D8E70000D2 +:1096C0004154545F524541445F424C4F425F5245C2 +:1096D00051554553543A2068616E646C65202530BD +:1096E00034782C206F666673657420257500000041 +:1096F0002DE9FF4F89B00024DDF858901020CDE906 +:1097000006041E468A460125A0460894A3464A46FA +:10971000314645480B9BFBF715FCDDE9171013F0AC +:10972000BDFA4E4513D896B1DDE91707022810D0CF +:10973000384601F099FF40B1B7F80C004FF42057BC +:10974000B84208D0791C884205D0102366E0012376 +:1097500064E03888F2E70998D0F82401009050E0DE +:109760006846FCF705FCBDF8080008B1B04248D3D4 +:10977000484549D8B8F1000F23D050B13946684662 +:10978000FCF73FFC28B942F601016846FCF739FCBA +:10979000B8B108992AF80510AD1CA8B22AF800B093 +:1097A000801C85B20AEB0500221F0799FAF74CFED0 +:1097B0002819001F85B20B9829194FF00008814223 +:1097C00022D8BDF808005FEA000B1AD0DDE91721A6 +:1097D0006846FCF7F1FBA0B1BDF81000001D80B297 +:1097E000012D02D9A04211D104E003D104468AF828 +:1097F00001000225BDF80800089005984FF0010807 +:10980000079000980028ABD1012D06D011208AF8CE +:10981000000028460DB0BDE8F08F0A2332465046BE +:10982000069915F007FBF5E7303602002DE9FF4FEA +:1098300087B08846149F81464FF0000A1D464FF0BE +:10984000080B012456463A4619463FA0FBF77AFB1F +:10985000DDE9151013F022FABD4204D81DB1D9F884 +:109860002401019058E0012362E001A8FCF780FB8D +:10987000BDF80C00E8B3A8424ED3B8424FD8DDE99A +:10988000152101A8FCF798FBA0B3BDF80A008007DA +:1098900003D47EBBBDF80C603EE001A94846FCF74E +:1098A000B7FE030002D0012C3BD841E0B9F8061105 +:1098B00001A8FCF797FEBDF81400801C80B2012CB3 +:1098C00002D982452DD104E003D1824688F80100F7 +:1098D0000224099804EB0A01814207D9022C20D8FE +:1098E000001FADF81400801C88F80100BDF80C10B2 +:1098F00001E014E010E028F80410B9F80601A41CF7 +:109900000090A4B2BDF8143008EB0402002101A8B5 +:10991000FCF7B0F8204484B201980028A5D1012CAE +:1099200008D9092188F8001020460BB0BDE8F08F57 +:109930002A4602E036B1022332465946404615F027 +:1099400079FAF2E70A23F3E74154545F5245414460 +:109950005F42595F545950455F52455155455354E4 +:109960003A2066726F6D202530345820746F2025A0 +:109970003034582C20747970653A20002DE9FF4F5F +:1099800087B0884683461F464FF00E0901241946CA +:1099900024A0DDF850A0FBF7D5FA00253BE000BF7E +:1099A0003AF815605EB1324601A95846FCF7C9F98C +:1099B00028B1BDF80A00800703D4022307E0012381 +:1099C00005E001A95846FCF723FE030007D0324604 +:1099D0004946404615F02EFA0BB0BDE8F08FBBF8B3 +:1099E000061101A8FCF7FEFDBDF814000119099845 +:1099F000814202D9401EADF81400BBF80601009068 +:109A0000BDF8143008EB0402002101A8FCF732F87D +:109A1000204484B26D1CBD42C2DB0F2188F80010C7 +:109A20002046D9E74154545F524541445F4D554C5F +:109A30005449504C455F524551554553543A206E58 +:109A4000756D2068616E646C65732025750000007B +:109A50002DE9F04387B015460C46064699464FF06F +:109A60000A081A4601A9FCF76CF9074649461BA0EB +:109A7000FBF768FA2FB1BDF80A00800703D4022370 +:109A800007E0012305E001A93046FCF7C1FD030012 +:109A900007D04A464146204615F0CCF907B0BDE84C +:109AA000F083B6F8061101A8FCF79CFDBDF8140080 +:109AB000401CA84202D96D1EADF81450B6F806013C +:109AC0000090BDF81430621C002101A8FBF7D2FF02 +:109AD000401C0B2180B22170E0E700004154545F2C +:109AE000524541445F524551554553543A206861AF +:109AF0006E646C6520253034780000002DE9F0415B +:109B0000154F8046B1F80150B86888B016460C462B +:109B100000281ED02A4602A94046FCF712F9002868 +:109B200017D0BDF80E00C10513D5400711D502A905 +:109B30004046FCF76DFD00280BD1F61EE41CB0B2C8 +:109B4000CDE900400023BC68B8F806011A46294652 +:109B5000A04708B0BDE8F081A40000202DE9F0473F +:109B6000B1F8015088B090460C461E4681464FF031 +:109B7000120A2A4602A9FCF7E4F850B1164FB86859 +:109B800028B1BDF80E00010701D5C00503D4032399 +:109B900016E0012314E002A94846FCF739FD030052 +:109BA0000ED1A8F1030080B2E41CCDE90040BC68EE +:109BB000B9F806011A462946A04710F0FF0307D05E +:109BC0002A465146304615F035F908B0BDE8F08711 +:109BD000132030700120F8E7A4000020AFF30080CC +:109BE0002DE9F0411E4F002600F1130497F82410D0 +:109BF0003546491C87F82410017CB9B1012923D0CE +:109C0000032917D0042925D040F2931215A1002072 +:109C1000FBF7EAFE0E202070E81C607097F8240025 +:109C2000A070A4F80360681DBDE8F0818068114948 +:109C30001A3804E080681049A0F540302B3801EB59 +:109C4000C00046884578E5E780680C49A0F580307B +:109C50001A38F4E780680A49A0F10410EFE7000021 +:109C6000D4780020626C655F686369635F6D7367B9 +:109C70002E63000098430200384402003845020079 +:109C8000304602002DE9F0411F4F054600F1120455 +:109C900097F824000026401C87F82400287CC0B1D7 +:109CA000012820D0032817D0042824D040F24732BE +:109CB00016A10020FBF798FE0F2020700420607092 +:109CC000287EA07097F82400E070A6800620BDE8EA +:109CD000F0811249A86801E01149A86801EBC000B1 +:109CE00030F8CE6CE8E70F49A86801EBC000A0F59A +:109CF0000020CE3806E00C49A86801EBC000A0F5B2 +:109D000000101E380688D7E7D4780020626C655FA3 +:109D1000686369635F6D73672E6300009843020098 +:109D20003844020038450200304602001A2101750D +:109D3000012141750320704710B5837E4FF6FF74F3 +:109D400004EA0333048B016AC4F30B04828B2343BC +:109D50008B82808BC882101D10BD05228275042263 +:109D6000C275428BA0F81920017FC176062070478A +:109D700008230178002200F045B8000010B50488DF +:109D8000A0F11801082C04D2012202EB0422CA60BF +:109D900013E0084613F014F90623012205210948AF +:109DA00013F0FAF90849B1F8382191F83A1142EA6A +:109DB00081210180022181708480BDE8104013F070 +:109DC0004BBB00002F000100D4780020FF21C170A0 +:109DD0000021817113F040BBFF21017100218171CD +:109DE00013F03ABBFF21417000218170FFF7EEBFF5 +:109DF00008230188042200F005B8FF21C170FFF795 +:109E0000EBBF000070B5044618381546994207D2DA +:109E100042EA0121C1602046BDE8704013F01CBB3E +:109E200013F0CEF806484222B0F8381190F83A0103 +:109E300041EA802081B22846BDE8704000F014BBA2 +:109E4000D4780020082282750422C275428BA0F8C3 +:109E50001920017FC17606207047302181750321CA +:109E6000C17500F11901408B08800520704700F092 +:109E7000D6BB00F0D3BBF0B58FB0044610F8011B81 +:109E80008DF8001001788DF8011041788DF80210DE +:109E900050F8021FCDF803108188ADF8071000229A +:109EA0008579C01D114601276B4607FA01F62E423F +:109EB00005D002EB02161E44521C7172D2B2491C2C +:109EC000C9B20229F1D9002515E005EB05111944A5 +:109ED00006884E8146888E818688CE81C6880E820D +:109EE00006894E8246898E828689CE82C689103046 +:109EF0006D1C0E83EDB29542E7D3032005E002EB23 +:109F000002111944521C4872D2B2032AF7D33C22E0 +:109F100069462046FAF798FA204613F09DFA0FB0EA +:109F2000F0BD0000084A00F1130113785B1C1370A8 +:109F30000E23C3740423037512784275028BC28208 +:109F4000807E487106207047F87800200A4A00F1A8 +:109F5000130113785B1C13700E23C374062303755F +:109F600012784275028BC282827E0276B0F81B00A4 +:109F7000C880082070470000F8780020084A00F1E7 +:109F8000130113785B1C13700F23C3740423037530 +:109F9000837E437512788275008B88800620704717 +:109FA000F878002070B500230B4D04466322981802 +:109FB00000EBD070411001EB410005EB80000688FA +:109FC000A64208D002D9A1F1010201E001F101038A +:109FD0009342ECDD002070BDE83E0200B0F80310B3 +:109FE0008180B0F80510C18013F036BA30B4017822 +:109FF0000BE000BF00EB810232F8034D20F8114066 +:10A00000538800EB4102491E13820029F2DC30BC68 +:10A0100013F022BA102181750121C1750320704708 +:10A0200010B500220F49052012F0DAFE0E4C206810 +:10A0300008B9A06800B1012040F20E520BA1FBF755 +:10A04000D3FC0020E0620A2084F8240000F016F817 +:10A0500005481830FCF7D0FDBDE810400649042043 +:10A0600013F02ABAD83E0200D4780020626C655FF3 +:10A07000686369632E63000025A600000348002181 +:10A08000418001704171C16070470000F478002088 +:10A090002DE9F0418CB000F118063E2100F8161FA2 +:10A0A000451C041D022096F80180287000272FE02F +:10A0B00007EBC70000EB47108119891C292268466D +:10A0C000FAF7C2F99DF8000020709DF80100607059 +:10A0D000DDF8020044F8020FBDF80600A0809DF8EC +:10A0E0000810A171E41D00206A4605E01318401C09 +:10A0F0005B7A04F8013BC0B28142F7D89DF8280092 +:10A1000004F8010B287808440A307F1C2870FFB23D +:10A110004745CDD328780CB0801CBDE8F08157218D +:10A12000C17400F11802022100F8141F411C1088AC +:10A130000880042070473E2181751321C1751520C8 +:10A1400070473E2181750A21C1750C2070473E225F +:10A15000C2740B220275027E4275428BC282028C4F +:10A160000283418C41830D2070473E2181750D2172 +:10A17000C175418B00F11802A0F819101B300021A5 +:10A180005318491C1B79C9B200F8013B0829F7D3C1 +:10A19000918901800F2070473E228275C175881C0D +:10A1A00070470621FFF7F8BF0421FFF7F5BF242110 +:10A1B0000D22095C02EB4101C9B2FFF7EDBF252179 +:10A1C0000E22095C02EB4101C9B2FFF7E5BF042191 +:10A1D000FFF7E2BF1F21FFF7DFBF312200F11601B9 +:10A1E000105C3E221A30C0B20A704870801C704762 +:10A1F0000621FFF7D1BF1421FFF7CEBF1021FFF7D3 +:10A20000CBBF0321FFF7C8BF00F11601C07F3E227C +:10A210000830C0B20A704870801C70470B21FFF7ED +:10A22000BBBF0921FFF7B8BF0121FFF7B5BF00F1A0 +:10A2300018014A1CB0F819101180FFF7D1BC30B4D6 +:10A2400000F11801438BA0F819300A46CB1C0021FD +:10A250005418491C2479C9B203F8014B0529F7D3D6 +:10A2600030BCFFF7BDBC3E2181750C21C1750E20AD +:10A27000704700F118014A1C418B1180FFF7B0BCF8 +:10A280007CB515460D4A41F65154012809D00228E3 +:10A290000DD0042804D1CDE9003200238A1CA04748 +:10A2A0007CBDCDE900320123CA1C1846F7E7CDE991 +:10A2B00000320A1D2B460220F1E70000354F000056 +:10A2C00070B5044603790D4D90F90500E18804F15D +:10A2D0001802022B04D02B68BDE8704010441847C8 +:10A2E00093681688184418300A466D68014630464F +:10A2F000A8472046BDE8704012F062BED478002026 +:10A3000030B500F11601027E13200870012000EB29 +:10A3100082008B1C4870C91C002008E003EB40043D +:10A3200065880D80648A4C80091D401CC0B2904233 +:10A33000F4D39000C01C30BD10B50820FCF7F2F932 +:10A34000002010BD10B504460B48006840B1FAF774 +:10A3500079FB2046FFF7B4FFBDE81040FAF77CBB5D +:10A360000548002221461830FCF726FCBDE81040C5 +:10A37000042013F0C3B80000D4780020B0F81930DE +:10A38000A0F81930838B8383C28BC283FFF728BC6C +:10A3900000F118010A46491DD3880B8012894A80B2 +:10A3A000FFF71EBC0C2282750822C275428BA0F8F2 +:10A3B0001920027FC276C28B8283018CC1830A205E +:10A3C0007047438BA0F81930027FC276FFF708BCB4 +:10A3D000438BA0F81930027FC276FFF701BC000062 +:10A3E00070B50C460546FF2201231146002012F0ED +:10A3F000D3FE0D4BA0F118011A78521C1A700F22CF +:10A4000000F8062D0422427085701B78C370047119 +:10A41000230A43710A71FA2048710620C880BDE8FA +:10A4200070400846FFF78EBFF87800202DE9F04114 +:10A4300007460C4601201D46164600EB04210C235E +:10A4400005220848DDF8188012F0A6FE048005B148 +:10A4500001268670A0F804808760BDE8F04112F004 +:10A46000FBBF00000F00010070B514460D46024608 +:10A4700003230521044812F08FFE05808470BDE897 +:10A48000704012F0E9BF00000200050070B51D46E3 +:10A4900014460E46052302461946054812F07CFE76 +:10A4A00006808470A0F80350BDE8704012F0D4BF5D +:10A4B0000400050070B514460D460246032305212D +:10A4C000044812F069FE05808470BDE8704012F007 +:10A4D000C3BF00000300050070B5A1F11804A0F58A +:10A4E0008031373907D12046FFF726FCE080022073 +:10A4F0002071FC2017E0010C0425062923D2DFE897 +:10A5000001F003142206191D1A38144903E0A0F5BE +:10A51000403013492B3801EBC0062046716888474C +:10A52000E08025713078607112E0A0F580301A3833 +:10A530000C49F0E7A0F104100B49ECE7A0F5A020CE +:10A54000801E0A49E7E78C2209A10020FBF74CFA9C +:10A550002046FFF7F7FE012070BD0000984302007F +:10A560003844020038450200304602001846020016 +:10A57000626C655F686369635F7461736B2E63000F +:10A580002DE9FF41044610F8011B8DF800100178F9 +:10A590008DF8011000224578801C114601276B467A +:10A5A00007FA01F62E4206D002EB420603EB4606FE +:10A5B000521CB170D2B2891CC9B20229F0D9002153 +:10A5C0000EE000BF01EB410503EB450510F8016B00 +:10A5D000EE700688AE804688001D491CEE80C9B228 +:10A5E0009142EFD3032006E002EB420103EB41016D +:10A5F000521C8870D2B2022AF6D30E221946204687 +:10A60000F9F722FF204612F027FFBDE8FF81000086 +:10A61000014AC2E900017047D47800207047012048 +:10A62000704700002DE9F047042012F08DFBDFF8A1 +:10A63000B8804FF0000908F1180634686CB1E08862 +:10A64000401C87B2B8F82200B8421CD33046FCF751 +:10A65000E3FA2079022807D00FE0A8F82290BDE89D +:10A66000F0470220FCF75EB8206A417921F0200112 +:10A670004171C17921F08001C171204612F0A0FC26 +:10A68000A8F82290D9E72179022907D094F905305A +:10A6900004F118029D186D1E30B10EE094F90530DA +:10A6A000226AD5181835F6E72970207900B1012003 +:10A6B00040F2EF420DA1FBF797F90220FCF758F8A2 +:10A6C00044460BE0A1682069884700280AD1608CC5 +:10A6D000295C401C6084D4E903209047608CB84218 +:10A6E000ABD2EFE7BDE8F087D4780020626C655FFD +:10A6F000686369632E630000094A00F1130113784F +:10A700005B1C13700E23C374062303751278427505 +:10A71000028BC282827E0276808BC88008207047BE +:10A72000F87800200146024800683830FCF78BB802 +:10A73000BC3702000149096888637047BC370200D2 +:10A7400000B500F013F9002805D08069810401D418 +:10A75000400401D5012000BD002000BD084910B50E +:10A76000096802200968096911B18847002804D0E6 +:10A7700000F09AFB002801DD012010BD002010BD73 +:10A78000BC370200FFF7EABF10B50B4C2068006829 +:10A79000016919B10120884700280BD0206890F882 +:10A7A000521006A0FAF7D3FB206890F85200002858 +:10A7B00000D0012010BD0000BC370200636D642092 +:10A7C0007061636B657420307825780A00000000A2 +:10A7D00070B5094C2568143507E020681621408BB8 +:10A7E00000F05EF9284600F0E7FD20681430F4D14F +:10A7F000BDE8704000F06EBBBC3702002DE9F047A9 +:10A800004FF0000415460F000646A0467DD10020FB +:10A81000BDE8F08744284FD00EDC342828D006DC71 +:10A82000312816D0322814D0332832D120E04128E4 +:10A8300078D042282DD12DE04E284CD004DC45287C +:10A8400042D0482825D104E0502864D056287CD135 +:10A8500071E035F8040B1FFA80F806F804803878A8 +:10A86000641C322801D048286FD14FEA18200EE02E +:10A8700001CD3055641CC0F307213155641CC0F371 +:10A88000074131553978641C34295ED1000E3055AA +:10A89000641C5AE001CD41793155641C0179315570 +:10A8A000641CC1783155641C81783155641C417831 +:10A8B0003155641C0078EAE701CD3119083402688B +:10A8C0000A604068486040E002CD3019F022F9F794 +:10A8D000BBFDF03439E055F804AB5046F9F7E6FD1E +:10A8E0001FFA80F9B9F1F80F01D94FF0F8093019C2 +:10A8F0004A465146F9F7A8FDB9F1F80F09D204EB21 +:10A900000900C9F1F801304401E01FE00AE0F9F75D +:10A91000C2FDF83419E002CD30191022F9F794FD88 +:10A92000103412E002CD08F0FF023019F9F78CFD67 +:10A9300008F0FF0008E0301902CD814610F8012C24 +:10A94000F9F782FD19F8010C04447F1C38780028BF +:10A950007FF460AFA0B25BE70FB410B504AA03990F +:10A96000FFF74CFF10BC5DF814FB0000082805D26F +:10A970000349096801EB8000406970470020704777 +:10A98000BC37020038B50446FCF7B2F8616B42F2FE +:10A9900010721144884210D90848007800280CD160 +:10A9A00073208DF8000002208DF80100E088ADF8DA +:10A9B00002000421684600F087F838BDF800002046 +:10A9C0004FF0FF314180018070470000B0F9021064 +:10A9D000B0F90020914205D0082901DA0120704722 +:10A9E00000207047491C4180074A07E0136803EBC9 +:10A9F00081035B69002BF1D1491C4180B0F9021041 +:10AA00000829F3DBECE70000BC37020010B5044670 +:10AA1000B0F90200B4F90010884204D12046FFF7D3 +:10AA2000D5FF002804D0B4F90200082801DB00207B +:10AA300010BD03492080096801EB8000406910BD0A +:10AA4000BC3702000149012008707047F80000205F +:10AA500000B5FFF78BFF002803D0418A41F00801C1 +:10AA6000418200BD30B4044C2468002C02DB30BCB1 +:10AA700013F0A6B930BC7047FC000020074A30B480 +:10AA80001268546B002C06D00B46A44602460021E7 +:10AA900030BC0220604730BC70470000BC37020069 +:10AAA0001CB505228DF8002004228DF8012000221B +:10AAB0008DF80220ADF803008DF8051006216846D8 +:10AAC00000F002F81CBD0000FEB506460B480D461E +:10AAD000016868463831FBF7DEFE08E06846FBF7A0 +:10AAE000E0FE002144682B4632460420A047684619 +:10AAF000FBF7C2FE0028F1D1FEBD0000BC3702000A +:10AB000008B562208DF8000000208DF801000221B8 +:10AB10006846FFF7D9FF08BD08B512F0D7FF014618 +:10AB200008A0FAF714FA61208DF8000001208DF8D2 +:10AB3000010012F0CBFF8DF8020003216846FFF7F9 +:10AB4000C3FF08BD4254535441434B5F4556454EE5 +:10AB5000545F4E525F434F4E4E454354494F4E5300 +:10AB60005F4348414E474544202575007CB5044667 +:10AB700002460D4608A0FAF7EAF9E0208DF8000039 +:10AB800003208DF80100ADF802408DF80450052136 +:10AB90006846FFF799FF7CBD6863695F656D6974FE +:10ABA0005F73656375726974795F6C6576656C2037 +:10ABB000257520666F722068616E646C652025784B +:10ABC0000000000038B50B4C206890F868100AA00F +:10ABD000FAF7BDF960208DF8000001208DF8010022 +:10ABE0002068032190F868008DF802006846FFF79E +:10ABF0006BFF38BDBC3702004254535441434B5F96 +:10AC00004556454E545F5354415445202575000028 +:10AC10000FB438B50498416801B101210E4A00888B +:10AC20001268126853696A469847044600980028DB +:10AC30000DD00498416821B164B105AA2046FFF700 +:10AC4000DDFD2146009A049800F07EFB002038BC10 +:10AC50005DF814FB5620FAE7BC37020010B5FB2163 +:10AC600001805F218170002100F8031F6022417084 +:10AC70008170C1700271417140228271C1711649A7 +:10AC80000A6882604968C16014490C46B1F85221D3 +:10AC90000282B1F85421428204F18002436944F8EF +:10ACA000DC3F83696360C3F3407381F8EC30C169B2 +:10ACB0005166016A9166416A1167816A5167102184 +:10ACC00000F82C1F40F27261A0F801100821C17039 +:10ACD0000521017110BD0000743E02003075002096 +:10ACE00070B5104C0E460546E0212068F9F7D3FBFD +:10ACF0002068056020684660E9680B48884721683D +:10AD0000002081F868002268084911642268012146 +:10AD100082F88A10226882F85110216881F88C002C +:10AD200070BD0000BC37020009DB01000C027A0094 +:10AD300040F2112202A10020FAF756FE72B6FEE799 +:10AD40006863692E6300000010B501780E2927D1D1 +:10AD5000144CB0F80300216891F96910491C1FD107 +:10AD600018B11149098881421AD12168002081F85F +:10AD70006900216881F8DE0020686C30FBF7BAFEBC +:10AD800000F0A0FA2168012081F869002168022002 +:10AD900081F86800FFF716FFBDE8104000F09EB98B +:10ADA00010BD0000BC370200783A020010B5FFF772 +:10ADB000EBFC104C0246206890F969100EA0FAF7DF +:10ADC000C6F8206890F96900B0F1FF3F10D1206803 +:10ADD000154A6C3081210446FBF7AAFE0022134974 +:10ADE0002046FBF7BDFE2046BDE81040FBF772BED3 +:10ADF00010BD0000BC3702006863695F696E69744A +:10AE000069616C697A696E675F72756E3A207375F5 +:10AE10006273746174652025752C2063616E2073E4 +:10AE2000656E642025750000400D030031AD000003 +:10AE300002F0D2B902F011B900487047083E020092 +:10AE40000248006890F8DE0070470000BC3702003E +:10AE5000044909685E3102D008B101207047002022 +:10AE600070470000BC37020000B50A46FFF77EFDC0 +:10AE7000002804D090F8810010B10AB1012000BD73 +:10AE8000002000BD02480068B0F854007047000080 +:10AE9000BC3702000348006890F85C00C0F38010E3 +:10AEA00070470000BC37020010B5094C002108466D +:10AEB000D4F8003003EB8002526912B192F84020BE +:10AEC0001144401C0828F5DB93F85300401A10BDCC +:10AED000BC37020070B52C4C05462946206890F816 +:10AEE00068202AA0FAF733F820680522022190F89A +:10AEF00068600320062E40D2DFE806F003101C2015 +:10AF0000302C35B3012D38D100F078F804002ED064 +:10AF1000014628A0FAF71BF8204670BD25B1012D87 +:10AF20002BD0022D29D102E000F054F825E000F0EA +:10AF30008BF822E0F5B1012D03D11EE04DB1012DBA +:10AF400015D0022D19D1206880F86820206880F87B +:10AF5000691012E075B1012D0FD108E055B1012D36 +:10AF60000BD12068C06810B1006900B1804700F0C3 +:10AF70007BF802E0216881F86800FFF723FE00F00B +:10AF8000ADF8002070BD0000BC3702006863695F47 +:10AF9000706F7765725F636F6E74726F6C3A2025A5 +:10AFA000752C2063757272656E74206D6F646520F8 +:10AFB000257500006863695F706F7765725F636F06 +:10AFC0006E74726F6C5F6F6E2829206572726F727B +:10AFD0002025750010B5084C2068006880688047FF +:10AFE0002068C06810B1806800B1804721680020E7 +:10AFF00081F8680010BD0000BC37020070B5114C2C +:10B000002068C06820B1406810B18047050012D1A7 +:10B0100020680068016811B120684068884720688E +:10B02000006840688047050009D02068C06810B1FA +:10B03000806800B18047FFF763FD284670BD00209F +:10B0400070BD0000BC37020010B5064C2068C06817 +:10B0500010B1C06800B180472168042081F8680001 +:10B0600010BD0000BC37020006480121026882F8CA +:10B070005210026882F868100068FF2180F8691099 +:10B0800070470000BC3702000149096848637047F7 +:10B09000BC37020000B5FFF769FC002800D0C07D76 +:10B0A00000BD00002DE9F0410B4D07462868C46B38 +:10B0B0000AE0266827B12968E06809688969884735 +:10B0C0002046FBF719FC3446002CF2D129680020F9 +:10B0D000C863BDE8F0810000BC37020070B54B4D7D +:10B0E000286890F88C0020B12968002081F88C0035 +:10B0F00070BD0021286800EB81004069B8B3428A26 +:10B10000D30706D091B221F001014182C1884048A5 +:10B110001CE0130706D591B221F008014182C188D5 +:10B12000052209E0D30609D591B221F0100141F4BE +:10B1300080714182C1881322364814E0930609D5F4 +:10B1400091B221F020014182C1883348BDE87040AE +:10B15000FFF75EBD52060AD5418A012221F0400167 +:10B160004182C1882D48BDE87040FFF751BD491CA0 +:10B170000829BFDB00F050F9286890F86800012822 +:10B180000ED022490C68143403280DD00528AFD105 +:10B19000286890F9690002281ED00428A8D12FE061 +:10B1A000BDE87040FFF702BE9CB1E588FFF7ECFAFE +:10B1B00000289DD02A46214619A0F9F7C8FE16217D +:10B1C0002846FFF76DFC204600F0F6F813222946CA +:10B1D000B2E7FFF7FFFE15E094B1FFF7D5FA0028BC +:10B1E00086D0E288214619A0F9F7B1FEE188132242 +:10B1F0000848FFF70DFD2046BDE8704000F0DCB8C0 +:10B20000FFF722FFBDE87040FFF7DCBCBC3702004F +:10B21000683A0200503A0200583A0200603A0200CE +:10B220004843495F53544154455F48414C54494E4B +:10B23000472C20636F6E6E656374696F6E20257096 +:10B240002C2068616E646C65202575004843495F59 +:10B2500053544154455F46414C4C494E475F41531E +:10B260004C4545502C20636F6E6E656374696F6E3C +:10B270002025702C2068616E646C652025750000A7 +:10B280000FB42DE9F0410D460646FFF76FFB0400B1 +:10B290000BD00B4809ABBDF8202000682946006898 +:10B2A000076A3046B84720B15720BDE8F0015DF885 +:10B2B00014FB14F8400F401C20700020F5E700003C +:10B2C000BC37020000B58DB034216846F9F7E3F8C9 +:10B2D0004FF0FF30CDF817008008CDF81B004FF479 +:10B2E0000000CDF81F001648CDF827006846FFF78C +:10B2F000B5FC1448BDF800100268A2F854100268AA +:10B300009DF8021082F853100168DDF8032041F81F +:10B31000562FDDF807204A600168DDF80B2041F860 +:10B320005E2FDDF80F204A600268BDF81310A2F806 +:10B33000DA100068BDF81510A0F8DC100DB000BDE3 +:10B340007FFEFF00BC3702002DE9F041144C0F4690 +:10B350000546206821681646B0F88600C96B084388 +:10B36000206812D090F8520000B1401E216881F888 +:10B3700052001020FBF7BEFA021D0146E0C2206811 +:10B38000BDE8F0413C30FBF75EBA00683146C26967 +:10B390003846904721682888A1F88600BDE8F081EA +:10B3A000BC37020003490A68D0600968026849682E +:10B3B00008461047BC37020010B50446FBF772F987 +:10B3C0000246E1880AA0F9F7C2FD04F11C00FBF770 +:10B3D00091FB2046FBF798FA0E4AE188002012689C +:10B3E00002EB81014861BDE81040FFF795BB00000A +:10B3F000436F6E6E656374696F6E20636C6F736507 +:10B40000643A2068616E646C6520307825782C2061 +:10B4100025730000BC3702000F4810B50168B1F871 +:10B420008610002917D10168CC6B002C13D002685C +:10B430002168D163616802680988A2F886100068F3 +:10B44000D4E902120068C369104698472046BDE857 +:10B450001040FBF751BA10BDBC370200024800682B +:10B46000B0F8660070470000BC37020030B589B004 +:10B470000525144601950C9A06250DF10C0C029534 +:10B480000692ACE81900ADF81C1010490978C907FC +:10B4900005D0C0B2012300222146FEF7F1FE0C4880 +:10B4A00000235A1E6946006817F0B8F844B2012C10 +:10B4B00008D00020382207A1FAF796FA012C03D011 +:10B4C00072B6FEE70120F5E709B030BD00000020AC +:10B4D00008000020636F6E74726F6C6C657274612B +:10B4E000736B2E630000000008B5009313460A46F4 +:10B4F00001460220FFF7BAFF08BD0000F8B5044678 +:10B50000094815460E460078400704D56278207831 +:10B51000A11C16F065F9334622460021042000954F +:10B52000FFF7A4FFF8BD00001C00002070B5084A1A +:10B5300005460C461278D00703D00122284601F0B8 +:10B5400013FE21462846BDE8704001F077BE00009A +:10B550000000002010B50020F9F748FC0120F9F7A1 +:10B5600045FC0020F9F75AFC0120F9F757FC0720A9 +:10B57000F9F754FCBDE810401320F9F74FBC000068 +:10B580000149086070470000F0010020002070476A +:10B590000020704750F831201AB100EBC10040681C +:10B5A000104700207047000010B5114B0C461049A1 +:10B5B00053F8303001EBC00112B172B60BB907E09D +:10B5C00023B149682046BDE810401847002010BD4F +:10B5D000052806D007280AD1214606A0F9F786FCDF +:10B5E00005E00648D0E9001205A0F9F77FFCFEE768 +:10B5F000A00400206F6F6D2564000000140000207F +:10B600005B4552525D4025733A25640001B5002226 +:10B6100069461046FFF7C8FF08BD70B5022100203B +:10B62000F9F714FC02210120F9F710FC022460B2A2 +:10B6300003210546F9F70AFC2846F9F7E3FB641CE9 +:10B64000E4B21C2CF3D970BD182804D018B101281D +:10B6500001D00020704701207047C068884201D1A6 +:10B66000012070470020704710B504460C2208499D +:10B67000F8F723FF38B9064902220E3104F10E0013 +:10B68000F8F71BFF08B1002010BD012010BD00001D +:10B69000683502000348026812B141680020104773 +:10B6A00000207047B804002070B5B1F80140058F44 +:10B6B000B1F80330A54209D1448F9C4206D1006CF9 +:10B6C000521F2044491DF8F7F8FE08B1002070BD54 +:10B6D000012070BD074910B5496919B10548FBF74C +:10B6E00042FA01E0002804D0BDE81040002000F03C +:10B6F0000FB810BD5C6E002008B5002000906946B0 +:10B70000024800F0D1F8009808BD0000716D0000FB +:10B7100004480268002A03D04FF4806102481047B1 +:10B72000704700000C0100205C6A002010B50C4638 +:10B7300000F09EF8002804D014B10178891E218001 +:10B74000801C10BD2DE9F0410F46804600221349B0 +:10B750001348FBF705FA41F2883240F681011048A0 +:10B76000FBF7E6F90F4C0025A61C258047B14FF4E6 +:10B7700080612046B847208840F2FD31884204D8D5 +:10B7800020888555FFF7B8FF00B12580208806493D +:10B790008555C1F80080BDE8F081000011B70000B8 +:10B7A0005C6E00205C6A00200C0100202DE9F0474F +:10B7B00016468A468146FD2A15DC00F059F8B41C6D +:10B7C00050B10178A14205D132465146801CF8F7AC +:10B7D0003BFE20E000F032F8114940F2FD330888CA +:10B7E00002199A4202D90120BDE8F0870C4F884621 +:10B7F000BF1CC51932462C7085F801905146A81C13 +:10B80000F8F722FEB8F800002978084480B2A8F8BA +:10B8100000000021C15500F03BF80020E4E70000E3 +:10B820005C6A002010B500F023F8002805D000F075 +:10B8300005F8BDE8104000F02BB810BD10B5074C5E +:10B840000278238811189A1A92B22280F8F7FCFD28 +:10B8500000212288A01C115410BD00005C6A002049 +:10B86000024800210180817000F012B85C6A00205B +:10B8700010B50649034608460A7822B144789C422E +:10B8800002D01118F7E7002010BD00005E6A00200A +:10B8900003484069002802D00148FBF73BB97047D4 +:10B8A0005C6E0020FFF7F4BF2DE9F041094D0F4613 +:10B8B00006462A782C46002A09D0921E60783B461C +:10B8C000A11CB047002802D120780544F1E7BDE86B +:10B8D000F08100005E6A00202DE9F0411188D088D7 +:10B8E000C1F30B081C491F461446A3F1080602F1D8 +:10B8F0000805042810D005281FD0062814D000F011 +:10B90000E9FA010004D0B3B22A460220F9F716FA88 +:10B91000BDE8F04100F0D8BF0C68002CF8D0B3B2FD +:10B920002A464146082006E08C68002CF0D0B3B2CD +:10B930002A4641460920A047EAE7082508E066199B +:10B940003146404600F048FD70882D1D284485B2E0 +:10B95000BD42F4D3DCE70000506F002001460148EF +:10B96000FAF771BF24010020FEF70CBF10B500F0FC +:10B97000B1FA002804D0408DBDE81040FEF702BFA8 +:10B9800010BD00002DE9F04115460E46074600F0B7 +:10B99000A1FA040010D0E08FA8B1642D16D8ADB183 +:10B9A00094F844100120884394F84310884210D141 +:10B9B0006FF00400BDE8F081394616A0F9F7C8FA27 +:10B9C0004FF0FF30F6E76FF00500F3E76FF003008C +:10B9D000F0E784F8440004EB40002A46A0F8465003 +:10B9E00094F8440000F0010000EBC00101EB0010EE +:10B9F000124901EB80003146F8F726FD94F8430028 +:10BA0000FF2802D1002084F843002046BDE8F04121 +:10BA1000F9F79EB86C326361705F73656E64206E77 +:10BA20006F206368616E6E656C20666F722063695B +:10BA3000642030782530327800000000746E0020D9 +:10BA40002DE9F047824698469146104600F060FA8C +:10BA500006464046FEF78AFF050005D014F082F93D +:10BA60006FF0010740B112E0414625A0F9F770FAE6 +:10BA70004FF0FF30BDE8F087307C012802D995F8FF +:10BA80006810D1B3032802D195F86900A8B3FAF77A +:10BA900091FF040032D04C21F8F7FDFC294604F157 +:10BAA0002400FAF7FAFDA4F83890A4F82A80F06888 +:10BAB000606000F0BFFDE0854FF6FF702086F088E3 +:10BAC000642800D9642060861720A086307C84F822 +:10BAD0003A00A4F840A0FF2084F8440084F8430012 +:10BAE0000E2084F820000020608421460C48FAF7DC +:10BAF0009FFE00F0E9FE0020BCE7FFE73846B9E70B +:10BB00006E6F206863695F636F6E6E656374696FE3 +:10BB10006E20666F722068616E646C65202575000A +:10BB2000140100202DE9F0471D461646894680463F +:10BB3000089FFAF73FFF04464846FAF7B3FD01466F +:10BB40002B46324618A0F9F703FA54B34C2120468D +:10BB5000F8F7A1FCF72D00D9F725494604F1240098 +:10BB6000FAF79BFD1C343020A6830026E68144F8BA +:10BB7000188C2083E58200F05DFD60820220207138 +:10BB8000E68026746674A0771C3C21461248FAF7BA +:10BB90004FFE0FB1E08D388000F096FE0020BDE82A +:10BBA000F0875620FBE700004C324341505F435280 +:10BBB000454154455F4348414E4E454C20616464C5 +:10BBC000722025732070736D2030782578206D7475 +:10BBD0007520257500000000140100202DE9F041BA +:10BBE0000824069D4180027106464371122A01D342 +:10BBF000921FD2B2184800EB820050F8047C21E07A +:10BC0000312804D0322802D044281AD10DE035F86A +:10BC1000040B80B23055641C3978A4B2322910D19B +:10BC2000000A3055641CA4B20BE0288869681FFA2A +:10BC300080F8083530194246F8F706FC04EB080096 +:10BC400084B27F1C38780028DAD1201F3080001F92 +:10BC5000F0802046BDE8F0813401002070B50D462B +:10BC6000064600F037F904462A46314605A0F9F7A2 +:10BC70006FF914B10C2084F82000BDE8704000F08A +:10BC800023BE00004C324341505F444953434F4E62 +:10BC90004E454354206C6F63616C5F636964203070 +:10BCA00078257820726561736F6E20307825780072 +:10BCB00030B40D464468C18D2846A44630BC604768 +:10BCC00038B505460C460BA0F9F742F978208DF8F7 +:10BCD000000002208DF801000423ADF802406A46FE +:10BCE00000211846FEF7BEFE04236A462146184688 +:10BCF000A84738BD4C324341505F4556454E545FCE +:10BD00004348414E4E454C5F43414E5F53454E4480 +:10BD10005F4E4F57206C6F63616C5F6369642030C6 +:10BD20007825780038B50446C18D0CA0F9F710F9D4 +:10BD300071208DF8000002208DF80100E08DADF833 +:10BD4000020004236A4600211846FEF78BFE0423F6 +:10BD50006A4619462046FFF7ABFF38BD4C324341D7 +:10BD6000505F4556454E545F4348414E4E454C5FEB +:10BD7000434C4F534544206C6F63616C5F6369644F +:10BD80002030782578000000F0B5044624308DB0CE +:10BD90000D460646FAF786FC0246208E0DF1080C89 +:10BDA000E78EA38E618EACE88B00E18D208FCDE90C +:10BDB0000001638D29461948F9F7CAF870208DF8FB +:10BDC000180015208DF819008DF81A500DF11B017F +:10BDD000304612F0EEFE608DADF82100208FADF8F8 +:10BDE0002300E08DADF82500208EADF82700608E91 +:10BDF000ADF82900A08EADF82B00E08EADF82D0037 +:10BE0000172306AA00210420FEF72CFE172306AAFA +:10BE100004212046FFF74CFF0DB0F0BDE03B0200CF +:10BE200030B50446243087B00546FAF73BFC01469E +:10BE3000228EE08DCDE90002238F628D1348F9F741 +:10BE400087F872208DF808000E208DF809000DF19A +:10BE50000A01284612F0ADFE608DADF81000208F6B +:10BE6000ADF81200E08DADF81400208EADF816008C +:10BE7000102302AA00210420FEF7F4FD102302AAD9 +:10BE800004212046FFF714FF07B030BD983C0200A4 +:10BE900010B50446012084F820002046FFF742FF39 +:10BEA000204600F0DDFF21460348FAF713FD204647 +:10BEB000BDE81040FAF778BD14010020042804D032 +:10BEC000062804D04FF0FF30704700207047012053 +:10BED000704700003EB5044608496846FAF7DBFCA7 +:10BEE00005E06846FAF7DDFCC18DA14204D0684642 +:10BEF000FAF7C2FC0028F4D13EBD00001401002076 +:10BF000010B5FFF7E7FF002800D0808E10BD0000BD +:10BF10003EB504460C496846FAF7BDFC0DE068469C +:10BF2000FAF7BFFC05468188224608A0F8F7DEFF35 +:10BF3000A888A04201D128463EBD6846FAF79CFC7D +:10BF40000028ECD13EBD0000180100206C655F7038 +:10BF5000736D3A20307825782C307825780A0000E7 +:10BF60002DE9FE4F0746984692468B461046FFF74E +:10BF7000CFFF05000CD03846FEF7F8FC060009D0CC +:10BF800044463F496846FAF786FC4FF0000914E042 +:10BF9000022335E003B03946BDE8F04F39A0F8F789 +:10BFA000D7BF6846FAF77DFC018EA14205D1428DCC +:10BFB000BA4202D130B10A2322E06846FAF75CFCAB +:10BFC0000028EED1FAF7F6FC040005D0287C022800 +:10BFD00010D003280BD01BE0042311E008230FE04E +:10BFE00096F86A00697C884212D2072308E096F826 +:10BFF000690020B196F868000028F1D1EEE705232A +:10C0000003B05A463846BDE8F04F142100F0D4BBC7 +:10C010004C212046F8F73FFA314604F12400FAF7A4 +:10C020003CFBA4F838A06785E868606000F002FB7C +:10C03000E085A4F83080E888642800D9642024F8DA +:10C04000320F0D98608004F806BC287C20720C9892 +:10C05000A08184F81390FF21A1746174162104F863 +:10C06000121C24F8109C323C21460EA0F8F73EFF2B +:10C0700021460348FAF7DCFBBDE8FE4F00F024BC84 +:10C08000140100206E6F206863695F636F6E6E65D8 +:10C090006374696F6E20666F722068616E646C6590 +:10C0A00020257500746865206368616E656C2031B9 +:10C0B0003A2030782578200A000000007FB5044639 +:10C0C00088890D46ADF80000012650B1801E002180 +:10C0D000092844D2DFE800F0354335181818182F26 +:10C0E0002F00204600F0BCFEE888A0866889E08723 +:10C0F000A888208684F842600A2084F82000632102 +:10C100002046FFF741FE2AE0164901A8FAF7C3FBD3 +:10C1100008E001A8FAF7C5FB02234568618D6A466D +:10C120000A20A84701A8FAF7A7FB0028F1D114209C +:10C1300084F8200013E0618400F0C6FB012004B005 +:10C1400070BD84F820606184204600F089FE0548B7 +:10C1500021461038FAF7BEFB2046FAF725FC0020EE +:10C16000EDE700002401002091F82020032A01D0EF +:10C17000022A03D14885042081F82000704700007E +:10C1800010B5044690F8200004281AD1208F00F042 +:10C190003BFD0246218F0B48F8F7DAFE608DFCF775 +:10C1A00005F800280DD0208F00F02EFD002808D1C2 +:10C1B000062084F82000608DBDE810400221FBF7C6 +:10C1C000C5BC10BDF43C0200FEB510780326144631 +:10C1D0003E2842D00CDC0E2817D004DC052817D0EE +:10C1E0000B2814D16DE00F280FD01328F9D12FE0C0 +:10C1F0006E282DD0732846D0E02879D0FB28F0D1C6 +:10C200005088FEF7B3FB01213AE000F05DFBA6E0A9 +:10C21000B2F8035053496846FAF73DFB12E068460E +:10C22000FAF73FFB0446408DA8420BD12046FFF7AA +:10C2300079FD204600F014FE6846FAF743FB2046DD +:10C24000FAF7B2FB6846FAF717FB0028E7D186E059 +:10C2500000F03AFB00F002FA81E0A07803287ED1DA +:10C260009088FEF783FB002879D090F841100029D0 +:10C2700075D0017C012902D080F841606FE0002177 +:10C2800080F841106BE054882046FEF759FA38BB1D +:10C2900034496846FAF7FFFA05E06846FAF701FB09 +:10C2A000408DA0425BD06846FAF7E6FA0028F4D148 +:10C2B000FEF76AFAA0B1132221462B48FEF7A8FC2C +:10C2C0004DE0B2F8034027496846FAF7E4FA09E07E +:10C2D0006846FAF7E6FA418DA14203D1FFF750FF15 +:10C2E0003DE005E06846FAF7C7FA0028F0D136E0ED +:10C2F00067881C496846FAF7CEFA2BE06846FAF7D9 +:10C30000D0FA0546408DB84224D115F8201F17A059 +:10C31000F8F71EFEA87E15F820292179052A02D0FB +:10C32000062A17D10DE0814206D3072085F82000A8 +:10C330002846FFF775FD0DE020351720EE762870B2 +:10C3400008E0814203D30E2085F8200002E0384641 +:10C35000FEF77EFB6846FAF78FFA0028CED100F090 +:10C36000B3FAFEBD14010020503A02006C32636142 +:10C3700070202D2073746174652025750000000005 +:10C380000D4910B50020C86048600C4A88600861FB +:10C39000D06510665066906688701831084848600D +:10C3A0000846FEF7BFF90748FEF76EFEBDE81040ED +:10C3B0000020FBF7B9B9000010010020F46E002046 +:10C3C000C9C10000D9B8000008B5009313460A4659 +:10C3D000162100F0FDFC08BD2DE9F0470C460E7853 +:10C3E0004978DFF840A28EB081460F46132E14D054 +:10C3F00008DC012E7ED0062E7DD0072E0DD0122E09 +:10C4000006D110E0142E7CD0152E06D0162E74D036 +:10C410000A4600231F2100F0CFF9824904A8091D14 +:10C42000FAF739FAF8E076208DF81C0008208DF82C +:10C430001D00E068CDF81E002069CDF82200022022 +:10C44000FEF706FD012805D102214846FEF70CFD46 +:10C4500001287DD04846FEF789FA05003AD0287CAD +:10C46000002875D10AA8FBF74DFAA288E388218934 +:10C470006089A2F1060840F67A4CE04525D8A3F180 +:10C480000608E04521D89A421FD8B1F5FA7F1CD89A +:10C490000A281AD3B0F5486F17D80C354FF0020CA4 +:10C4A00085F835C02A876B87A987E8874FF6FF7C18 +:10C4B0004FF00008CDE90010CDE9028C35F8061CDC +:10C4C0000C3D5948FEF7A4FB02E0052085F8410029 +:10C4D00085F842700A2307AA00210420FEF7C2FA59 +:10C4E000DAF81050002D98D00A23002107AA042062 +:10C4F000A84703E033E01BE003E00CE00EB0BDE82A +:10C50000F08725892279A089E388CDE9000548468E +:10C51000FFF726FDEDE7A088E588FFF7DBFC804606 +:10C5200001222946F8F7E5FB4046F8F7B1FB74E72E +:10C53000A0883D46FFF7CEFC90F82010092905D0D1 +:10C540000A2903D00C2901D00B29F0D1203000E0BA +:10C5500031E005730D21017000F0B6F95DE7314956 +:10C560006846091DFAF797F9002507E06846FAF7CB +:10C5700098F9054690F82D00B84204D06846FAF7BD +:10C580007BF90028F2D1002DD1D02846FFF780FC9E +:10C5900043E704A8FAF785F9428D4A453CD190F863 +:10C5A0002D10B942A5D1012EA3D0072E12D0132EE3 +:10C5B00017D0152E06D000233A461F21484600F01A +:10C5C000FBF896E790F820100F2992D12146FFF74B +:10C5D00075FD8EE790F820100B298AD1FFF758FCE3 +:10C5E00087E7A08977228DF8002004228DF80120AA +:10C5F000ADF80400ADF8029006236A46002104203D +:10C60000FEF730FADAF81040002CDAD006230021C9 +:10C610006A460420A0476CE704A8FAF72DF9002821 +:10C62000B7D166E710010020C03A0200F72070473A +:10C63000F720704702494888421C4A807047000032 +:10C640003001002004490878FF2803D0401C0870FE +:10C65000C0B270470120FAE730010020FEB51D4945 +:10C660006846FAF718F9002610E06846FAF719F953 +:10C67000044690F83C0048B1608DFEF783F828B17D +:10C6800084F83C60E18D6068FFF71AFB6846FAF7B2 +:10C69000F3F80028E9D1104D002400BF55F834000C +:10C6A00080B105EBC407387960B1FEF757F848B19F +:10C6B0003E715CB1012C0BD05FF0000155F83400E5 +:10C6C000FFF7FEFA641C022CE8DBFEBD0421F5E74F +:10C6D0000621F3E714010020506F002010B5044636 +:10C6E0000846FFF7EBFB002802DB024941F8304027 +:10C6F00010BD0000506F0020014908617047000024 +:10C70000100100202DE9F0410646984615460C46DA +:10C710000846FFF7FDFB07462A4621460EA0F8F71C +:10C7200017FC37B1214616A0F8F712FC6920BDE8C6 +:10C73000F081FAF74BF901000CD08C80CD80CE60EF +:10C7400081F810801B48FAF773F80120FAF7ECFF24 +:10C750000020ECE75620EAE74C324341505F524557 +:10C760004749535445525F534552564943452070FB +:10C77000736D2030782578206D7475202575000044 +:10C780006C326361705F72656769737465725F7341 +:10C790006572766963653A2050534D202575206196 +:10C7A0006C7265616479207265676973746572651E +:10C7B0006400000018010020F0B40A4DEC68032C5E +:10C7C0000EDA094E04EB4407641C26F8170006EB4A +:10C7D0004700C17082708380EC60F0BC00F074B8D8 +:10C7E000F0BC7047100100203C6F002010B50846D7 +:10C7F000FFF764FB002808DB044A012102EBC000BC +:10C800000171BDE81040FFF729BF10BD506F002037 +:10C8100010B5FFF75FFB002806D0012180F83C101F +:10C82000BDE81040FFF71ABF10BD2DE9F0411C46CE +:10C8300015460E46069FFEF799F860B120F8446F42 +:10C84000012145808480C78000F8031C00F03CF87B +:10C850000020BDE8F0810220FBE700000149012033 +:10C86000887070471001002010B5044601460B483F +:10C87000F9F7F9FF002810D0E18D09A0F8F768FB5F +:10C8800068212046FFF780FA21460448FAF722F88B +:10C890002046BDE81040FAF787B810BD140100200B +:10C8A0006C326361705F7274785F74696D656F7507 +:10C8B0007420666F72206C6F63616C206369642002 +:10C8C00030782530327800002DE9F04387B0AE4D46 +:10C8D000AE4E002438E02F883846FDF753FFB0B342 +:10C8E000F06895F80290401EAB8895F8038000210F +:10C8F000F0600CE001EB410205EB4202491CD2F86A +:10C9000006C0C2F800C0B2F80AC0A2F804C0814252 +:10C91000F0DBB8F1140F0DD0B8F1160F14D0B8F148 +:10C920001F0F11D100944A4601213846019400F0AE +:10C930004FFA09E0CDE902430094019400234A46EE +:10C940001521384600F044FAF0680028C3D18F4919 +:10C9500004A8091DF9F79FFF18260127CAE004A8BB +:10C96000F9F79FFF054690F820000D2844D008DC19 +:10C9700005280DD007280BD00A28EFD00C28EDD1C0 +:10C980004EE00E2860D016287ED01728E6D116E09B +:10C99000688DFDF7F7FE0028E0D0688C4105DDD5F5 +:10C9A00020F480606884288ECDE900070294EB8D26 +:10C9B00095F82C20688D152100F00AFA9AE0688D10 +:10C9C000FDF7E0FE0028C9D005F8206FE87E298A2F +:10C9D000CDE900100294EB892A7B6889203D15215E +:10C9E00000F0F6F9284600F03BFA04A8F9F76AFFD0 +:10C9F0002846F9F7D9FF7DE0688DFDF7C3FE0028D2 +:10CA000078D085F82060288E0090EB8D95F82C204A +:10CA1000688D072100F0DCF92846FFF739FA69E054 +:10CA2000688DFDF7AFFE002864D0FFF70BFE2035C0 +:10CA3000024668730B202870E88900902B8A688969 +:10CA4000062100F0C5F955E0688DFDF79BFE002832 +:10CA500050D0FFF7F7FD2035024668730F2028708D +:10CA6000688A298CEB89CDE90030CDE902012B8B56 +:10CA70006889203D142100F0ABF92846AD6100F033 +:10CA8000EFF9E98D42A000E013E0F8F761FA2A46D9 +:10CA900005F1080048490546FAF762F842F21072BB +:10CAA00040F281112846FAF743F82846FAF712F8BF +:10CAB00020E0688DFDF766FEE0B10A2085F82000D1 +:10CAC00085F842705220A5F84000298E2A463BA0E6 +:10CAD000F8F70CFA63212846FFF756F92A3501AA20 +:10CAE000E98A2889009013C2AB88AA782888152182 +:10CAF00000F06EF904A8F9F7BFFE00287FF42FAF0D +:10CB000003A8FDF75DFF36E003A8FDF77FFF0546AC +:10CB1000007A08B101282ED1E888FDF733FE50B322 +:10CB200095F84100012804D0032814D0052822D10B +:10CB300018E024352AA06C77F8F7D8F9688CEA8CCD +:10CB4000A98C8DE807002B8CAA7F35F81E0C1221CA +:10CB500000F03EF90FE085F8414095F84220E88862 +:10CB6000002305E085F8414095F84220E88801233C +:10CB7000132100F02DF903A8FDF728FF0028C3D1E9 +:10CB800007B0BDE8F08300003C6F002010010020DA +:10CB90006C326361705F73746172745F7274782059 +:10CBA000666F72206C6F63616C20636964203078FB +:10CBB000253032780000000069C8000074686520E4 +:10CBC00072656D6F7465206964203D30782578202A +:10CBD0002C2061646472203D307825780A000000C2 +:10CBE00073656E6420636F6E6E656374696F6E202B +:10CBF0007570646174652066726F6D206C3263615C +:10CC0000702E630A20000000012802D103488078BA +:10CC100008B100207047012070470000100100207B +:10CC20002DE9FF4115460E460746FFF753F904006C +:10CC300004D0FEF72FF950B1002109E039460CA0CD +:10CC4000F8F786F94FF0FF3004B0BDE8F08102211B +:10CC5000ADF80C50208EADF80E0004200090CDE908 +:10CC600001652D1DAAB2608D03ABFEF709FBEBE752 +:10CC70006C326361705F73656E64206E6F206368F1 +:10CC8000616E6E656C20666F722063696420307817 +:10CC900025303278000000002DE9F04786B01C46B0 +:10CCA000DDE90E9690460D468246FEF7F3F808B190 +:10CCB000002700E002272A4651460CA0F8F748F961 +:10CCC000A019ADF81400ADF816500421CDE90018F4 +:10CCD000001DCDE9024982B20496394605AB5046A3 +:10CCE000FEF7CEFA06B0BDE8F08700006C32636153 +:10CCF000705F73656E645F70726570617265645FAA +:10CD0000636F6E6E656374696F6E6C6573732068B4 +:10CD1000616E646C652025752C2063696420307811 +:10CD200025303278000000002DE9FF4F89B01C4605 +:10CD3000DDE918A5DDE916B691468846FEF7AAF8A2 +:10CD400008B1002700E0022742460EA00999F8F733 +:10CD5000FFF8A0192844ADF81C000422ADF81E808D +:10CD6000CDE90029CDE9024B0496CDE905A5001DCA +:10CD700082B2394607AB0998FEF782FA0DB0BDE8DA +:10CD8000F08F00006C326361705F73656E645F707A +:10CD9000726570617265645F636F6E6E65637469FE +:10CDA0006F6E6C6573732068616E646C65202575A9 +:10CDB0002C20636964203078253032780000000030 +:10CDC00008B5134600917722082100F001F808BD4C +:10CDD0000FB470B50C460546FDF7D4FC68B121468A +:10CDE00007A0F8F7B5F807AB9DF8182021462846AC +:10CDF00000F018F870BC5DF814FB5720FAE700004B +:10CE00006C326361705F73656E645F7369676E61D6 +:10CE10006C696E675F7061636B65742074797065AF +:10CE2000202575002DE9F8431D4616460F4680461D +:10CE3000FEF730F808B1002400E0022433463A46F9 +:10CE4000052106480095FEF7C9FE02460090034BF7 +:10CE500021464046FEF714FABDE8F883606F0020D3 +:10CE600010B50446C18D0448F8F772F804F10800C3 +:10CE7000BDE81040F9F73EBE743C020070B50546AF +:10CE8000FFF746F8044629460BA0F8F761F8002C96 +:10CE900010D021461148F9F71DFD2046F9F790FD05 +:10CEA0000E48F9F7DAFC002804D0BDE870400020F5 +:10CEB000FAF73ABC70BD00004C324341505F554E0A +:10CEC00052454749535445525F534552564943458D +:10CED0002070736D20307825780000001801002044 +:10CEE0002DE9FC4705464FF0FF300027CDE900074C +:10CEF00091461E4688466A46284600F061F80400BE +:10CF00002BD101A92248FEF7CFFC00200199012373 +:10CF100003FA00F20A4200F1010007D00428F7DB0F +:10CF20000098002804DA0020BDE8FC870090F8E7AC +:10CF3000C0B25C220021FEF739FC00980021C0B28B +:10CF4000FEF7F4FB04465C21F7F7A5FA2570D8F844 +:10CF500000106160B8F8040020814046F9F7A2FB98 +:10CF6000024629460BA0F7F7F4FF494613A00FF03D +:10CF700097FE1022494604F10A00F7F765FA676444 +:10CF8000FEF790FC0EB1009830602046CCE7000020 +:10CF90000D23020043656E7472616C2044657669EE +:10CFA000636520444220616464696E67207479700F +:10CFB00065202575202D20257300000069726B0007 +:10CFC0001FB5084B1446D3E902238DE80F006946CC +:10CFD0000548FEF769FC0CB102982060039804B084 +:10CFE00010BD0000443D0200256E0000C0B20021CB +:10CFF000FEF79CBB406870470078704700210170C5 +:10D000004160704710B504460020606005E00021D3 +:10D01000FEF78CFB08B1606010BD2078401C2070CA +:10D02000C0B20528F3D3002010BD002802DBC0B237 +:10D03000FEF7F8BB704738B10C2807D0272804D07A +:10D040000C2805D2401E04E025207047262070479A +:10D05000801EC0B270470FF0F7BE18380FF0B0BF97 +:10D0600070B51400054615D0F7F7ECFC0A4850F8E7 +:10D07000250058B18179012908D1A0F8864040F2F5 +:10D0800071214C43816FA14200D9C467BDE8704053 +:10D09000F7F7E2BC70BD0000287A0020022110F0F2 +:10D0A0002DBB00002DE9F04116460D460746FCF762 +:10D0B00079FF0400306005D045B1A078A84208D3BC +:10D0C000012007E039460120FDF78AF90020BDE87C +:10D0D000F08100204FF44F7209A1F8F785FC6568D4 +:10D0E000A378E078290C834200D8034609B94FF4AD +:10D0F00000612846BDE8F041052210F081BB000028 +:10D10000626C655F686369635F6569662E630000D2 +:10D110002DE9F0410C4602F0CFFF074600252678A6 +:10D1200012E0B74201DA384600E0304680B280466D +:10D1300008F0F4FA88B10C3004EB85016D1C4860EE +:10D14000A6EB0800EDB206B2002EEADCA77065700F +:10D150000020E0702846BDE8F0816570204600F0B0 +:10D160005BF80020F7E7000070B5164605460C0096 +:10D1700001D0012000E0002040F269320EA1F8F752 +:10D1800033FC0122002321461046FDF779F8002EDA +:10D1900010D0002606E000BF15F8011B0AA0F7F723 +:10D1A000A5FE761CA078B042F6DCBDE8704008A071 +:10D1B000F7F79CBE70BD0000626C655F68636963D1 +:10D1C0005F6569662E63000025303278200000001C +:10D1D0000A00000010F03CBD70B50C460546F7F79C +:10D1E00031FC0C4850F8250078B1C1690846A042CE +:10D1F00008D1607920F020006071E07920F0800093 +:10D20000E07102E000688842F1D1BDE87040F7F7B4 +:10D2100023BC0000287A002070B50546002407E0F2 +:10D2200005EB840040680C3808F0F6FB641CE4B29F +:10D230006878A042F4D80020687070BD70B50546CB +:10D240000C0001D0012000E0002040F24F321AA172 +:10D25000F8F7CAFB1C490878A0F1010008701B48C8 +:10D260000078800704D5A2782088294614F09AFA1D +:10D27000E07868B10DB1012000E000204FF4567253 +:10D280000DA1F8F7B1FB2846A168BDE8704008473A +:10D290004DB1002040F25D3207A1F8F7A5FB6068B0 +:10D2A000010C02D003E00120F4E74FF40061BDE877 +:10D2B0007040052210F0E4B8626C655F68636963D2 +:10D2C0005F6569662E630000F87800201C0000206E +:10D2D0002DE9F843002415460F468046D6782346AC +:10D2E0001CE000BF05EB8400A97840680C38B1420F +:10D2F00000D93146721A16B2827A002E02DC42F050 +:10D30000010201E022F001028272C9B200913A46A4 +:10D310004146FDF78BF80123641CE4B2002EE1DCEA +:10D3200008E000BF05EB840040680C3808F074FB8F +:10D33000641CE4B26878A042F4D8002068702870B9 +:10D34000BDE8F88330B5082811D201F0010383400D +:10D3500001218140CD43064902F0010282400C7850 +:10D360002C401C430C70487828401043487030BD56 +:10D3700033780020044981F8FC0204490A6822F04D +:10D38000FF0202430A607047307500200002094026 +:10D39000014981F8630170473075002001494870E8 +:10D3A00070470000F40100200F49152801DA07201A +:10D3B00002E01F2802DA062008707047332801DADD +:10D3C0000520F9E74C2801DA0420F5E7652801DAA1 +:10D3D0000320F1E7972801DA0220EDE7FB2801DAC4 +:10D3E0000120E9E70020E7E7F40100202DE9F047FC +:10D3F0000E461D460178002406EB050990460746B7 +:10D40000494501D3012000E0002040F2FE221DA189 +:10D41000F8F7EAFA87F80390B87803E0311A641C49 +:10D420008EB2E4B2B042F9D93EB3801BA84200DD0F +:10D4300028461FFA80F907EB84004A4640684146B7 +:10D440003044F7F701F8A5EB090085B2641CE4B29B +:10D4500008EB090010E0BE78AE4200D92E4607EB7B +:10D460008400324640684146F6F7EEFFA81B85B2BD +:10D47000641CE4B208EB06008046002DEBD1BDE849 +:10D48000F0870000626C655F686369635F65696669 +:10D490002E6300002DE9FC4707462A4889462A4E9C +:10D4A000D0F83B11009190F83F018DF8040000BFC7 +:10D4B00056F82710052201F22D116846F6F7FDFFF8 +:10D4C00000283CD0F6F7AEFFC0B22521B0FBF1F248 +:10D4D00001FB1204E508684204EBC001012088400A +:10D4E00000F0FF08252C01D2012000E0002040F2CE +:10D4F000212216A1F8F778FA1DF8050010EA080FA6 +:10D500001AD056F8271005F22D15485D024610EA8C +:10D51000080F11D142EA08024A5556F8272004F1B3 +:10D52000DC010020505456F8271004F2011408556D +:10D53000A9F1010000F0FF09B9F1000FB8D1BDE871 +:10D54000FC87000030750020287A0020626C655F3F +:10D550006C6C632E630000000A7D52060DD4837A42 +:10D560004A7D63F305024A75817AC27A1144252205 +:10D57000B1FBF2F302FB1311817270472DE9F04108 +:10D580002F4C0D46074654F8250058B3002056226C +:10D590002CA1F8F729FA4FF4DC76002130460FF081 +:10D5A000F1FD44F82500E8B33146F6F774FF54F86E +:10D5B0002540FF202580A070E0702548B0F8470185 +:10D5C000A4F8D100012084F898010620A4F8940062 +:10D5D00004F11C0008F0D8F900262663052D03D8B5 +:10D5E000082006E00120D2E70A2D01D8042000E03F +:10D5F000022084F83C00C0B2FF2108F071F8E0611D +:10D60000A06928B90021384607F0E6FFA06148B1BB +:10D61000E06938B1A063A169CA6860F31E02CA60FC +:10D62000A06900E00AE04660A069001D00F0CEFCA1 +:10D6300008F060FA60630020BDE8F0810720FBE796 +:10D64000287A0020626C6535305F6C6C632E630055 +:10D6500030750020002909D00B78827F63F3060221 +:10D66000827711F8012B6830F6F7EEBE70472DE98E +:10D67000F0410C4601468569B4F83B002D1D4FF67C +:10D68000FF7202EA40006885B4F83B0040F2E242D3 +:10D690004243A262B4F83920D4E9066340F2E2477B +:10D6A0007A43D717B2187B41C4E90623E28E40F2D1 +:10D6B00071235A43E262897909B32C34002184F83A +:10D6C0002610217F08F00CFB2081B4F80D00217B8F +:10D6D0000844401C80B2217F08F002FB606015F80E +:10D6E000200F40F001002870207B8100288861F322 +:10D6F0004E00288054F82C0908B9A06AE062D4E9E9 +:10D700000A01814200D9E062BDE8F08170B5C2F340 +:10D710000B261846012101EB0624024602230521AF +:10D7200009480FF039FD05460680074821461430A8 +:10D730000FF01AFB0448214616300FF015FB28465F +:10D740000FF08AFE002070BD2400010070B50B4967 +:10D75000C2F30B24104651F824500FF07FFC002830 +:10D7600005D0012807D0E878FF2801D0022070BD3D +:10D77000204602F073F8002070BD0000287A0020D7 +:10D780002DE9F04100251C4F1C4E80462C4600BF61 +:10D7900057F8240048B390F83A1105F1010509073C +:10D7A00023D4C178FF2920D1817939B1327890F81A +:10D7B0009800A8EB0201084400F0FF08022007F0DF +:10D7C000ADFF020011D09188012021F4FF514031BA +:10D7D00091801D21117382F80D8086F80280A1B21C +:10D7E00000EB0420002303F0B9FA641C082CCFDB03 +:10D7F0002846BDE8F0810000287A0020F4010020CE +:10D80000F0B505469888174620F4FF50A030988060 +:10D8100018201873B5F892000E460A30A3F80F00CE +:10D82000A86903F10C043978007900F003027078DC +:10D8300002F0D0FD6070A86979780079C0F38102A8 +:10D84000307802F0C7FDA07062780021824212D0C9 +:10D850007278307882420ED10020930700D50120E3 +:10D86000D30701D000F10100520700D5401C012868 +:10D8700001D16170A170A8696378007900F003029A +:10D88000012000FA02F2934200D16170AB69A278E4 +:10D890001B79C3F381039840824200D1A170607864 +:10D8A00008B9A07848B103205435641CA87060887A +:10D8B00028802088A5F81100F0BDA4F80310F0BD61 +:10D8C00028B1012901D1012A01D00020704701208F +:10D8D0007047000030B40BB10F2300E01023137029 +:10D8E0008B88A2F803304B88A2F80130CB88A2F8CD +:10D8F00005300B89A2F8073001235372B0F892303B +:10D900004FF6FF741433538100239381012300BF2A +:10D9100002EB43055B1CDBB2AC81062BF8D3898894 +:10D9200030BC03F0FBBD00002DE9F047264D9A46C0 +:10D9300016468846244C1035089F03F08FFA49207C +:10D94000E073A11C5FF00000C0F10C0318F8032085 +:10D950000A54401C0D28F7DB0020DFF8709060703F +:10D9600027704FF00108C9F8048006F0B5FD0020CB +:10D97000315C2A5C5140C0F10F02401CA1541028B8 +:10D98000F6DB4646C846C9F8046006F0A5FD00204F +:10D9900008E000BF1AF800102A5C5140C0F10F02E5 +:10D9A000401CA154B842F5DB04E0295CC0F10F0231 +:10D9B000401CA1541028F8DBC8F8046006F08CFD68 +:10D9C0002868BDE8F0870000000208400000084019 +:10D9D0002DE9F0410C4607468AB000210D200FF0DA +:10D9E000D1FB0546002110200FF0CCFB8046202201 +:10D9F000414901A8F6F728FDA08804F10C06C0F300 +:10DA00004710001F81B2ADF80610CDF80E60B8695E +:10DA10003830CDF81200CDF81650CDF81A60CDF898 +:10DA20001E80102901D8012000E000204FF4D1729F +:10DA300032A1F7F7D9FFD7F8B001286097F8B40101 +:10DA40002871B979F1B300F07F002871B869816C51 +:10DA5000C5F80510C06CC5F8090010214046F6F75E +:10DA60001AFD012188F80110207900F0030040F030 +:10DA7000200188F80210F6F7E5FF03F0A1FFBDF8DA +:10DA80000600C0B20090DDF81A30DDF81E20DDF887 +:10DA90001610DDF81200FFF747FF074601A806F051 +:10DAA00045FC06F019FDA0881749C0F3471230461F +:10DAB000F6F7CAFC607940F040006071BDF80600DE +:10DAC000841900E014E0DDF81200294600F0A4FEFD +:10DAD00080EA07012160F6F7BFFF04F087FF2846C0 +:10DAE0000FF0B2F940460FF0AFF90AB0BDE8F0818F +:10DAF00040F08000A9E700000C480200626C653528 +:10DB0000305F6C6C632E6300000208402DE9F04327 +:10DB1000B0EB0208DDE90854DDF81CC02779B4F841 +:10DB200003604FF49679994118D2101A00EB050161 +:10DB3000A1F10101B1FBF5F189B2ACEB010201FBEE +:10DB400005F1A4F81520A1EB000011E0B0FBF1F005 +:10DB500060F30C06A4F80360BDE8F083801AB0FB04 +:10DB6000F5F189B20CEB010201FB1500A4F81520B8 +:10DB7000B90601D54946E9E71E21E7E72DE9F04F4F +:10DB800006461546B0F8CA0040F2712200FB02FBBF +:10DB900091B0002018705880B6F892001C460A30E8 +:10DBA000588159B108892081C888E0804888A080C0 +:10DBB000488809904889114648430BE06D1CE88865 +:10DBC0002081A888E0802888A08035F80109099084 +:10DBD00040F6C4100E906B89D6E91A01B6F892206F +:10DBE0009342A3EB020301D203F58033B26F534398 +:10DBF00013EB000841F1000A5FF0000705EB470056 +:10DC0000CDF83CB08189A1F57F40FF3868D040F263 +:10DC1000E2404143C81711EB080940EB0A000590A8 +:10DC200000203E49CDE90010029003906FF0FD0204 +:10DC3000059819EB020C40F1FF310FAA60460E9BCC +:10DC400008F01CFDF0B3002108F00AFE0F9841F621 +:10DC50004C51884240D300200CA90190CDE902012B +:10DC600004900090B5F8010040F2E2414843C1172A +:10DC7000059A10EB09005141284B5A4608F027FD40 +:10DC800000B3002108F0ECFD0C99B1EB090040F263 +:10DC9000E241B0FBF1F081B2B5F8030088421BD33A +:10DCA000687AB1FBF0F24243A280B26FB9EB080090 +:10DCB000B0FBF2F26B891A446281B0FBF1F201FB16 +:10DCC000120000E008E04FF00401617040F2E24110 +:10DCD000B0FBF1F0608003E07F1CFFB2062F8DD314 +:10DCE000608850B996F888006070B6F88910A088EE +:10DCF000B1FBF0F200FB12106080A188687AB1FBE2 +:10DD0000F0F1414388B2A0800999884202D2697A31 +:10DD10000844A08011B0BDE8F08F00004169010007 +:10DD200070B51C4E0546082056F82540503407F0C3 +:10DD3000F5FC02002CD00220A071B4F842000A3099 +:10DD4000A08056F8251001F58070D1F82D112161C1 +:10DD500090F831002075918821F4FF5101F5807110 +:10DD6000918001211173A388538256F8254001EB5D +:10DD7000052004F58073D4F82D41C2F80D4093F8C6 +:10DD8000313053742946BDE87040002302F0E6BFED +:10DD900070BD0000287A002010B58279002A08D0D2 +:10DDA00000F1500480F89810B0F88B0007F098FF4D +:10DDB000A08610BD10B5428881888A4217D8438951 +:10DDC0008489A34213D84FF4486399420FD8062A96 +:10DDD0000DD302899A420AD80A2A08D3C088B0F51E +:10DDE000FA7F04D2401C4843B0EB820F01DD1220C1 +:10DDF00010BD002010BD806820F00040014642792F +:10DE0000920601D50020704700688842F7D10120B2 +:10DE1000704730B5826B00230A6006E094680464A2 +:10DE200012680C685B1C944202D05479A406F5D4A5 +:10DE3000B0F8964054B9012B08DB0D68AD68456415 +:10DE40000D68ED7B05F0030580F848501C44A0F8F0 +:10DE500096408B80B0F892408C81826390F8992034 +:10DE60004AB1B0F8962032B10968097A490702D45C +:10DE7000002180F89910184630BD2DE9FF5F054656 +:10DE80000027D5E908469846B946F6F7DBFDBA46BD +:10DE9000C6F800A0A8F806A0A8F808A0A8F80AA04C +:10DEA00005F1200B26E02079C043800704D02046EE +:10DEB00000F0EAFF68B11BE0DDE90112237A284691 +:10DEC00001F078FEB8F8080000F10100A8F8080099 +:10DED0000EE0B8F8060000F10100A8F80600A07AEC +:10DEE000C00705D0B8F80A0000F10100A8F80A0040 +:10DEF000274624687CB360790006D4D404E0274622 +:10DF000024684FF0010924B1204600F0BDFF00282D +:10DF1000F5D1B9F1000F04D0A869417941F00801A9 +:10DF20004171C4B11FB1C7F800A06F6202E058464A +:10DF3000F8F762FE307940F010003071707920F00F +:10DF400020007071A86A3060AC62E86A00B9EE62C5 +:10DF5000286B00B92E63584607F03EFDBDE8FF5F11 +:10DF6000F6F77ABD2DE9F041074617480E46052120 +:10DF700050F8274030460DF05DFE8046A56901202F +:10DF80002D1D00EB072002210FF0E6FAB8F1000F7B +:10DF900014D03168C4F82811317984F82C11316813 +:10DFA00040F23110C4F82D113179015504F5947106 +:10DFB00005F11800BDE8F04108F029BF3846BDE87A +:10DFC000F0410C2103F0CEBB287A0020806820F0BD +:10DFD00000400146427922F02002427100688842E6 +:10DFE000F8D1704770B51C460423049D0FF0D4F897 +:10DFF00004704580BDE870400FF02EBA02465161B2 +:10E00000D37931B123F04003D37112688242F6D143 +:10E01000704743F04003F7E770B5044608781D46A3 +:10E02000C0F381032078049E63F383002070097895 +:10E0300061F301002070607820F00E006070207D98 +:10E0400062F3861040F001002075697D61F34500A0 +:10E050002075607D05F1100120F03F006075002003 +:10E06000E0822868E060A8882082A879A07404F182 +:10E07000180008F0CCFE96F89A00E07796F83C007D +:10E08000400884F82200687D00F01F00F07270BD27 +:10E090002DE9FF4F074680688DB000F104099046D6 +:10E0A0000E4602F10C0A4FF0000B0BA803F07EFBAA +:10E0B00018B10D2011B0BDE8F08F00248DF8064096 +:10E0C0000BA803F073FB002875D1BDF82C100120BC +:10E0D00000EB01208346FFF751FA00286BD116228E +:10E0E00051460DF11300F6F7AFF9307900F00F004B +:10E0F000072804D0B069CDF80D00B08B07E006F119 +:10E1000018000AF01FF80168CDF80D108088ADF8EE +:10E1100011000DF1070007F013FE7079C0098DF8AA +:10E12000040097F832008DF805004948BDF82C101E +:10E1300050F82150002005F15004A87104202864F3 +:10E1400058212046F6F7A7F90620A4F84400DAF88B +:10E150000710A163DAF80B10E1639AF80F0084F856 +:10E1600040003C4890F8450184F84A00D7E91C017A +:10E17000C4E9060198F8070000F0030299F80000CE +:10E18000C0F38101162013F043FCD4E906230146B5 +:10E19000891843F10000C4E90610109A12B140F248 +:10E1A0005A520BE099F80020C2F38102022A03D0F0 +:10E1B00040F63C2202E043E041F2EE12891840F1C1 +:10E1C0000000C4E9061097F86D0040F2712100EBE1 +:10E1D00000103844B0F84900E0864843E062214628 +:10E1E0002846FFF744FA98F80500C0F3001270794A +:10E1F000C0F300111098FFF763FB0246A8690323E0 +:10E20000001DC17821F07C010831C170417821F0F6 +:10E210000101417090F8201041F0010180F82010B8 +:10E22000018C63F34E010184534649460095FFF784 +:10E23000F3FEBDF82C002A46C1B2584602F00CF994 +:10E2400001ABBDF82C20594600F022FD32E700005A +:10E25000287A00203075002070B50D460646144619 +:10E26000012000EB05220A23052109480EF094FF46 +:10E27000032101704670458034F8031F8180618856 +:10E28000C180A1880181BDE870400FF0E5B80000B1 +:10E290002A00010070B511480D4650F8254094F849 +:10E2A0006E0110B994F86F0170B1002084F86E010E +:10E2B00084F86F0102200DF0E3FC28B104F188021C +:10E2C00029460020FFF7C8FF012084F86D0100EB0C +:10E2D0000520BDE8704002210FF03EB9287A0020E9 +:10E2E0001346002904D00A4601461846F6F7ACB892 +:10E2F000704700002DE9F05F344C54F820C09CF8C2 +:10E300006B21002A5FD18A884FF00108C2F34715BC +:10E310000A7E08EB002B1F2A24D29CF83A319E0774 +:10E3200002D5A5F10405EDB2A246DB0611D5D41E37 +:10E330000F2C09D2DFE804F00D0D0D0D0D08080DAE +:10E340000D080D0808080D00BDE8F05F3D2103F041 +:10E3500009BADFF87C9002EB420709EB8706337AB3 +:10E36000AB4204D0BDE8F05F114603F0ADB801F157 +:10E3700018041B2A13D0022A1ED05A46737A11465B +:10E3800070680EF009FF064659F8273032462946D4 +:10E39000204698473046BDE8F05F0FF05DB84A79F7 +:10E3A000520604D55A46604602F0B6FBE5E7002265 +:10E3B000594602F0BDFCE0E78CF86A815AF820006B +:10E3C000627880F86921BDE8F09F0000287A00207B +:10E3D000AC4802002DE9F047DFF88080C2F30B243F +:10E3E00091460E46002558F8247048460EF036FE39 +:10E3F000D0B1012818D058F8240090F83A01C0068E +:10E4000022D5F878FF2801D0387988B1B06807F0B4 +:10E41000CCF958F8240090F83A0140070AD53D217C +:10E42000204600F02FFA0AE0B06807F0BEF912E0CB +:10E43000022510E03D220021204600F00DFA3D218A +:10E44000204603F08FF906E000234A4605213046B6 +:10E450000EF0F0FC01252846BDE8F087287A002060 +:10E4600070B50646092007F059F9050000F10C04C3 +:10E4700001D0012000E0002040F2F3221BA1F7F7B9 +:10E48000B3FAA88820F4FF5000F59070A8801420FB +:10E4900020701A4850F8262002F58071D2F87421B5 +:10E4A000C4F80120896FC4F8051050F826000B212C +:10E4B00000F599700DF0DEFC68B9B4F8031040F671 +:10E4C0004800814201D9A4F80300B4F80710814242 +:10E4D00001D9A4F80700012000EB06202A463146A6 +:10E4E000BDE87040012302F039BC0000626C655F3A +:10E4F0006C6C635F6374726C2E630000287A00207A +:10E500002DE9F0410546012000EB052618480F468D +:10E51000314650F8254017480EF026FCFF20E070E9 +:10E5200057F8010FC4F87C017868C4F88001002214 +:10E530001146204603F036F818B994F88C010028EB +:10E5400013D00C480C23324605210C380EF024FE63 +:10E550000721017004F5C27445802168416061683B +:10E5600081600EF079FF00202072BDE8F08100008C +:10E57000287A00203A000100F8B50C00054601D0C9 +:10E58000012000E0002040F2DB1243A1F7F72CFA53 +:10E59000A08895F83A11C0F34710C90702D0A0F13E +:10E5A000040080B2217904F10C036FEA01018A07AB +:10E5B0003C4925D040B10978090705D500902A8843 +:10E5C0000021032013F054F9E889401CE8812079E8 +:10E5D00040F010002071607920F0E000607195F843 +:10E5E0009811E07961F30100E071F6F72BFAA96A5E +:10E5F00005F128064FF000004FF0010741B109E096 +:10E600000978C906E0D5009000212A880420D9E7BE +:10E6100085F8AA01204600F037FC98B995F83A0130 +:10E62000C0070FD0A079C00705D021462846FFF7C4 +:10E63000CFF985F8AA71D5E96C01401C41F10001C0 +:10E64000C5E96C0195F8AA01E0B92079C0438007BB +:10E6500018D1207B1B2800D16F72207B2072FCF721 +:10E66000F3FF78B1306868B101460279D24392076E +:10E6700000D1014600680028F7D1086810B1206079 +:10E680000C6004E0002221463046F8F795FABDE818 +:10E69000F840F6F7E1B90000626C6535305F6C6CEC +:10E6A000632E63001C0000202DE9F04110460C464B +:10E6B0000EF0D4FC60B101280AD020881D4E56F817 +:10E6C000200090F83A11090706D50220BDE8F08134 +:10E6D000A06807F0A1F92AE0A178890707D00127EF +:10E6E0002579B0F88801A84203D3012002E002276F +:10E6F000F6E7002040F21D720FA1F7F775F92088A8 +:10E7000056F8200090F83A01C00701D02D1DEDB257 +:10E71000A068017967F301010171818865F34C11EB +:10E7200081802088A16856F82000FFF725FF00208F +:10E73000CCE70000287A0020626C655F6C6C635F38 +:10E740007461736B2E63000070B505460C460120A2 +:10E7500000EB05210C230A460C480EF01DFD058038 +:10E76000A1880B4AC1F34711818052F8252092F805 +:10E770003A21920701D5091F8180217901F0030117 +:10E7800081708460BDE870400EF066BE3700010005 +:10E79000287A002070B515461C460E460246062310 +:10E7A000052105480EF0F8FC067004714580BDE8AF +:10E7B00070400EF051BE00001E0001002DE9F8432C +:10E7C000984616460C460C25C2F30B2710460EF051 +:10E7D00045FC90B1012810D0A07802F0ADFF58B1EF +:10E7E0000B490120002551F8271081F86A01A17812 +:10E7F000208802F023FE00E01225208800902B469E +:10E80000324641460348FFF7EDFB0020BDE8F883A0 +:10E81000287A00201A00010070B50D4D0E460C4CF0 +:10E82000103502F01BFB0121A21CE1735FF0000018 +:10E83000C0F10C03F35C1354401C0D28F8DB0020DE +:10E84000607020700348416005F046FE286870BD86 +:10E85000000208400000084070B50446154601203B +:10E860000E4600EB04220623052105480EF094FC19 +:10E87000448006710570BDE870400EF0EDBD0000EB +:10E880002200010070B5044601200D4600EB042271 +:10E890000423052104480EF07FFC44800570BDE888 +:10E8A00070400EF0D9BD00002300010070B5044691 +:10E8B0000D480D4650F8241055F80B3F01F58072B5 +:10E8C000C1F846316968C2F84A1050F82400A968B6 +:10E8D0000B3D80698164204600F0ACF82946204653 +:10E8E000BDE8704001F0CCBB287A00202DE9F0474C +:10E8F0000646172006F012FFDFF88890050000F1A9 +:10E900000C0459F8267001D0012000E0002040F2EC +:10E9100027121DA1F7F768F803202070A88807F5D3 +:10E92000807820F4FF5000F53870A880B7F84401D3 +:10E93000A4F80900D7F83C01C4F80100D7F8400159 +:10E94000C4F80500042104F1130002F051FF08216E +:10E9500004F10B0002F04CFF59F826000B342A4654 +:10E960008069A16881642068C8F846006068C8F8BA +:10E970004A00012000EB06203146BDE8F0470123A4 +:10E9800002F0ECB9287A0020626C655F6C6C635F02 +:10E990006374726C2E6300002DE9F041044601207F +:10E9A00000EB04260F462023324603211E480EF0BA +:10E9B000F3FB80464FF47A6231461C480EF016FE97 +:10E9C0001B4D55F8240090F83A1141F0100180F8E1 +:10E9D0003A1155F8241057F8012F01F58070C1F84D +:10E9E0004E217968C0F8521055F82410B8681022EA +:10E9F0008969C86455F82410404601F5AB71F5F7F4 +:10EA000023FD55F82410102201F5A37108F1100020 +:10EA1000F5F71AFD40460EF01FFD3046BDE8F04107 +:10EA200003210EF099BD0000110003003A0001001F +:10EA3000287A002070B505460D2006F06FFE06000E +:10EA400000F10C0401D0012000E0002040F2471248 +:10EA500015A1F6F7C9FF04202070B088042120F426 +:10EA6000FF5000F5D070B08004F1090002F0C0FE44 +:10EA70000821601C02F0BCFE0F48641C50F82520E1 +:10EA8000A1689269D16450F82510226801F5807060 +:10EA9000C1F84E216168C0F8521029463046BDE8E1 +:10EAA000704001F079BC0000626C655F6C6C635F64 +:10EAB0006374726C2E630000287A002070B5154ACA +:10EAC00051F8014F054652F820200920C2F8324182 +:10EAD0004968C2F8361106F021FE040000F10C0668 +:10EAE00001D0012000E000204FF4E8720AA1F6F7FF +:10EAF0007BFFA08820F4FF5000F59070A0800920D3 +:10EB00003070701C0DF090F929462046BDE8704029 +:10EB100001F042BC287A0020626C655F6C6C635F18 +:10EB20006374726C2E63000070B50646092006F00F +:10EB3000F5FD040000F10C0501D0012000E00020EB +:10EB40004FF4D1720BA1F6F74FFFA08820F4FF50CD +:10EB500000F59070A08008202870681C0DF064F902 +:10EB6000012000EB062022463146BDE8704001231B +:10EB700002F0F4B8626C655F6C6C635F6374726C16 +:10EB80002E6300001288A1F801208B78012233B98E +:10EB900083691B79C3F3810302FA03F38B704B780B +:10EBA000002B05D18069007900F0030082404A7093 +:10EBB0007047000070B505461848002250F8214003 +:10EBC00040F82120D4F89C010EF03EF9D4F8A001C1 +:10EBD0000EF03AF9606906F0AFFE0021E069FFF738 +:10EBE0000DFA04F1280006F0F7FE04F1200006F00B +:10EBF000F3FE606B08B106F00FFFE06906F0BEFEA1 +:10EC0000A06908B106F05EFE20460EF01DF9284608 +:10EC1000BDE8704000210EF09FBC0000287A002063 +:10EC20002DE9F0410E46088812491C46174651F856 +:10EC300020500523214610480EF0AEFA04460C2061 +:10EC400020703088A4F8010038460EF007FA50B161 +:10EC5000012808D03DB1D5F89001C0F30F10A4F8F9 +:10EC600003000020207020460EF0F6FB0020BDE8D7 +:10EC7000F0810000287A002025000100C10701D0A2 +:10EC800000207047800701D501207047022070479F +:10EC900070B514460E4605000FD00346E2B2194681 +:10ECA0003046FFF777FD074850F8240018B1214699 +:10ECB0003046FFF77FFF284670BD1146184602F028 +:10ECC000D1F9F8E7287A00202DE9FF5F07468CB0DC +:10ECD0007A8E8B464FF0000AA2F10A0140F6774384 +:10ECE000DDF86C90504607F1180699427DD2F18A02 +:10ECF00006297AD3B1F5486F77D8338BB3F5FA7F0D +:10ED000073D25B1C4B43B3EB820F6EDC484602F0C0 +:10ED10004DFD002869D1B9F800004FF0010808EB5B +:10ED2000002A222231460DF10700F5F78DFB787994 +:10ED3000C0098DF804007879C0F380108DF80500C3 +:10ED40008DF80680B9F800105046FEF717FC002831 +:10ED50007DD1B9F80000424951F82050582105F101 +:10ED6000500485F806802046F5F795FB0620A4F8A8 +:10ED700044003C4890F8450184F84A00DDE90E0162 +:10ED8000C4E90601F87B00F003029BF80000C0F321 +:10ED90008101222012F03CFED4E9062301468918A5 +:10EDA00043F10000C4E906101A9A12B140F2E2429F +:10EDB0000AE09BF80020C2F38102022A02D040F64A +:10EDC000C41201E040F6A662891840F10000C4E9CF +:10EDD000061056F8130FA0637068E063307A84F869 +:10EDE0004000B07B133E400900E030E084F848006A +:10EDF00021462846FEF73BFCD4E90601C01E41F13E +:10EE0000FF31C4E906010E200DF024F830B1787905 +:10EE10000122C0F300111A98FEF752FDAC690246B8 +:10EE2000241D06F10C03E178204621F07C010C3111 +:10EE3000E17059460095FFF7EFF860782A4620F018 +:10EE40000300607099F80010504601F077FBB9F8A4 +:10EE5000002001AB5146FFF71BFF10B0BDE8F09F4B +:10EE6000287A00203075002010B5002204490120C6 +:10EE70000DF0B6FFBDE8104020210248F5F70BBBAE +:10EE800048460200287A0020017901F00301012997 +:10EE900003D1808810F4FF5F01D00020704701206B +:10EEA000704770B5064614460D4609200CF0E8FE82 +:10EEB00030B1224629463046BDE8704000F0D2B855 +:10EEC00000200CF0DDFE002806D022462946304600 +:10EED000BDE8704000F052B870BD00002DE9F84365 +:10EEE0000D46088823499846914651F820401A2635 +:10EEF00010460EF0B3F828B301282CD0022802D017 +:10EF00000220BDE8F8832846FEF754FF060022D110 +:10EF10000E22294604F1C000F5F796FA012104F506 +:10EF200099700CF0A7FF70B104F1A80201231746F5 +:10EF300029462046FEF7CEFC2888012318223946B0 +:10EF400001F02CFF07E0A07978B1298804F188024C +:10EF50001A20FFF781F92888009033464A46414637 +:10EF60000548FFF73FF80020CBE72878214601F05D +:10EF70008FFEF0E7287A00202600010070B51446C5 +:10EF80000E46054614234FF40062052129200EF099 +:10EF900003F90122027045704680002115B13C2D15 +:10EFA00027D032E01B4A52F826209279027123784A +:10EFB0004371002A16D0D4F80320C0F80620B4F814 +:10EFC0000720428134F8192F82816288C281A28889 +:10EFD000A4F11904028203D094F824104FEA5111CD +:10EFE000817412E0D4F80920C0F80620B4F80D208E +:10EFF000E7E7027141718181C1810182418054F84A +:10F00000031FC0F80610A1884181BDE870400EF0D2 +:10F0100023BA0000287A00202DE9F041104EC2F3F7 +:10F020000B2510460C4656F825700EF017F898B1CF +:10F03000012811D0B86954F8011F81636168C16368 +:10F04000A1680164E168416456F8250080790128CF +:10F0500002D1284602F0AAF80020BDE8F0810000A5 +:10F06000287A002070B514460D4606461F234FF43B +:10F07000006205212B200EF08FF80A2101704670E6 +:10F080004580F6B9144951F8251089790171227823 +:10F090004271002919D0D4F80310C0F80610B4F852 +:10F0A0000710418134F8191F018361884183A188C9 +:10F0B000A4F11904818304D094F824104FEA51116B +:10F0C0008177BDE870400EF0C7B9D4F80910C0F8D8 +:10F0D0000610B4F80D10E4E7287A00202DE9F0417D +:10F0E0002248C2F30727904650F827400E460025D5 +:10F0F00040460DF0B3FF022801D0022527E0B0788A +:10F1000030B1D4F89C0160B3E079C00729D104E0A4 +:10F11000E07920F00100E07119E0A0690079C0F306 +:10F12000810002281DD0122104F599700CF0A2FE76 +:10F13000C8B1E07940F00100E0717079B17940EA3E +:10F1400081102072B6F803002082002060823B46C6 +:10F150002A4642F256014046FBF798F90020BDE8E6 +:10F16000F0810C25F3E71A25F1E70000287A00204A +:10F170002DE9F0411748C2F30726174650F82640FC +:10F180008846002510460DF069FF022801D00225AF +:10F190000FE098F80200B0B1D4F8A001B8B1A069AE +:10F1A000007900F00300022811D0E07940F002005D +:10F1B000E07133462A4642F257013846FBF766F9BA +:10F1C0000020BDE8F081E07920F00200F0E70C2596 +:10F1D000EFE70000287A00202DE9FF47002088464D +:10F1E0008DF80C00C2F307204C498146924651F835 +:10F1F000297003AA514601F045FA02286AD09DF809 +:10F200000C0000287FD198F8040008285DD24449FA +:10F2100051F82060F6B3B07AC00756D0232006F02C +:10F220007DFA050055D0A88805F10C0420F4FF50A4 +:10F2300000F58C60A8801C202873B8F80200A5F89F +:10F240000D00122206F16001E01CF5F7FDF8B0890F +:10F25000401EA4F81300B089401EA4F81700B86F30 +:10F26000B7F89210CDE900100294D7E91A23D6E935 +:10F270002201FEF74BFCB06DC17D607E61F303009F +:10F2800028496076097861F347106076B06D817D1A +:10F29000012000E019E08840A076B06D807A002857 +:10F2A000607E1AD040F01000607698F804001E4985 +:10F2B00000EB400001EB400101F18000D1F8FE10AD +:10F2C000C4F81B10B0F8820011E042208DF80C0049 +:10F2D00019E0022004B0BDE8F08720F0100060764D +:10F2E0001148D0F83411C4F81B10B0F83801A4F854 +:10F2F0001F00B7F89200A4F82100398800232A469D +:10F30000504601F02BFD4B469DF80C2042F25B016C +:10F310005046FBF7BBF80020DCE70000287A00200D +:10F32000487A0020F4010020307500202DE9FF47C5 +:10F33000002089468DF80C00C2F307205249804610 +:10F34000924651F8287003AA514601F09BF9022811 +:10F350007ED09DF80C0000287BD1B9F80400082865 +:10F3600078D24A4951F82060002E73D0232006F04D +:10F37000D5F904006FD0A08804F10C0520F4FF50EB +:10F3800000F58C60A0801C202073B9F80200A4F85E +:10F390000D00207C40F2E24220F080002074D6E98B +:10F3A00014010023F5F70CF8A5F805007069406B0F +:10F3B000C069C5F807007069406B90F82010E87AC2 +:10F3C00061F30400E872717861F34710E8727069C4 +:10F3D000406B0069E8607069406B818A2982807D9A +:10F3E000A8747089A5F813007089A5F81700B86F84 +:10F3F000B7F89210CDE900100295D7E91A23D6E9A3 +:10F400001601FEF783FB96F8291015F8190F61F322 +:10F410000300287096F8281061F304101C49287026 +:10F42000097861F3471028707069406B0079C0F368 +:10F430008101012088406870F06BC5F80200B6F8C1 +:10F440004000E880B7F89200401E2881398803E028 +:10F4500010E006E011E014E000232246504601F0DF +:10F460007DFC43469DF80C2042F25A015046FBF7C2 +:10F470000DF8002004B0BDE8F08742208DF80C00A4 +:10F48000EFE70220F6E70000287A0020EC7A00205F +:10F49000F401002070B51048C2F30725194650F852 +:10F4A000254005230D480DF077FEA0F801500221FC +:10F4B00001706CB100210170A1690979C1F381016A +:10F4C000491C0171A169097901F00301491CC1704E +:10F4D0000DF0C2FF002070BD287A0020300001002E +:10F4E0002DE9F0472548C2F30727914650F82740F9 +:10F4F0000E46002548460DF0B1FD022801D0022538 +:10F5000032E0D4F89C010DF09FFC0020C4F89C016F +:10F510000021E069FEF772FDB07828B33079811ED2 +:10F52000072901D312251FE0401CC0B280460021EC +:10F530000EF0E4F8C4F89C0168B14246311DF4F7BE +:10F5400083FFA069F17810F8202F61F34512027053 +:10F55000606910B104E0072506E006F05DF860611F +:10F560000146E069FEF74AFD3B462A4642F2540155 +:10F570004846FAF78BFF0020BDE8F087287A002084 +:10F580002DE9F0471A48C2F30726914650F8265055 +:10F590000F46002448460DF061FD022801D00224E8 +:10F5A00019E0D5F8A0010DF04FFC0020C5F8A0012E +:10F5B000F878811E072901D312240CE0801CC0B208 +:10F5C000804600210EF09AF8C5F8A00168B14246C5 +:10F5D000B91CF4F739FF3346224642F2550148463A +:10F5E000FAF754FF0020BDE8F0870724F3E7000096 +:10F5F000287A00202DE9FF5F0C4602984949C0F3A4 +:10F6000007294FF0020851F829500DF027FD002876 +:10F6100075D0012873D0022803D0022004B0BDE8C1 +:10F62000F09F002D6BD0E878FF2801D03A2051E000 +:10F63000A0784FF01108C10702D1E17800295ED00F +:10F64000810701D42179E9B3C00706D1E0780CF035 +:10F650001DFCB8B3E07885F8D100A078800706D407 +:10F6600020790CF013FC68B3207985F8D20060791A +:10F670004FF0010B00F00300012802D0022806D150 +:10F6800002E085F898B102E0002085F89801A078A2 +:10F690004FF00008C043800731D04FF0160A85F8BC +:10F6A00003A0032006F03AF8060012D0B08806F155 +:10F6B0000C0720F4FF506030B08086F80CA0E21CEC +:10F6C000394600E01BE02846FFF75CFAA87918B13C +:10F6D00008E00720804612E03888A5F8CE00B87808 +:10F6E00085F8D000BA787978284601F05BFF0123CD +:10F6F00032464946029801F031FB85F805B0424692 +:10F7000042F232010298FAF7D5FEA078C043800792 +:10F7100005D100234A460521029801F071FB002023 +:10F720007CE70000287A00202DE9F0411248C2F35E +:10F730000724164650F824708846002510460DF020 +:10F740008DFC30B1012804D0022804D00220BDE88D +:10F75000F081022507E0D8F80210C7F8A411B8F824 +:10F760000600A7F8A80123462A4642F25C0130466B +:10F77000FAF78CFE0020EAE7287A00202DE9F04114 +:10F780000888134F90460C4657F820600C25104609 +:10F790000DF064FC90B1012810D0208857F820109B +:10F7A00091F83A1149074FF0060102D501F046FEE3 +:10F7B00001E001F04BF9FF20B070002523882A46B4 +:10F7C00042F21B014046FAF761FE0020BDE8F081DD +:10F7D000287A00202DE9F04117460C460C251046EA +:10F7E0000DF03CFC58B3012829D020233A460321D0 +:10F7F00018480DF0D1FC06462088174D102255F808 +:10F80000201006F1100001F5A371F4F71DFE10227F +:10F81000A11C3046F4F718FE20881022A11C55F8D0 +:10F82000200000F5AB70F4F70FFE2188012055F899 +:10F83000211081F8660130460DF00EFE0025238868 +:10F840002A4642F21A013846FAF720FE0020BDE8A7 +:10F85000F081000011000300287A002070B50546F1 +:10F86000012000EB052605F059FF040001D001201E +:10F8700000E00020D82209A1F6F7B6F81221217382 +:10F88000A088224620F4FF502030A0802946304630 +:10F89000BDE87040012301F061BA0000626C655F51 +:10F8A0006C6C635F6374726C2E6300002DE9F04131 +:10F8B00018460E460146174600250A230F480DF04C +:10F8C0006BFC044638460DF0C9FBA0B130880C49EA +:10F8D00051F8201001F58070D1F82811616090F87E +:10F8E0002C00207225703088608020460DF0B4FD19 +:10F8F0000020BDE8F0810C25F4E70000270001009E +:10F90000287A00202DE9F0411F4690460D460C2430 +:10F9100010460DF0A3FBA0B1012812D0022802D09E +:10F920000220BDE8F08128880B4E002456F82010F4 +:10F93000897971B101F068FB2988012056F82110FE +:10F94000487123464246394604480BF056FC0020D5 +:10F95000E7E7FFF7E9F8EFE7287A00202800010041 +:10F9600070B516460C46002510460DF077FBB8B171 +:10F97000012815D020883B220F2101F04FF80221E9 +:10F9800030460DF0E9FD2188064AFF2052F821108B +:10F990002A468870238842F221013046FAF776FD24 +:10F9A000002070BD287A00202DE9F0470D46098817 +:10F9B000DFF8888091460C27C2F30B2458F82160A9 +:10F9C00048460DF04BFB50B1012808D0022802D068 +:10F9D0000220BDE8F0872846FEF7ECF907462B88A1 +:10F9E0003A4642F220014846FAF750FD4FB1204610 +:10F9F0003B220F2101F012F8022148460DF0ACFD28 +:10FA000011E058F82410887978B106F1A802002393 +:10FA1000144629463046FDF75DFF2888002318224A +:10FA2000214601F0BBF90020D3E7E0B22A4601F0FD +:10FA3000EBF8012086F86E01F5E70000287A002037 +:10FA40002DE9F0410D462149C2F30B20174651F82C +:10FA50002040002610460DF001FB70B101280CD0AB +:10FA60001B4A6888B2F84D11884204D8A988B2F8B8 +:10FA70004F21914203D912261DE00C261BE0B4F859 +:10FA80008821904203D1B4F88A21914213D0E178C1 +:10FA9000FF2901D02A260EE0A4F87801A888A4F84E +:10FAA0007A0100221146204601F07CFD84F88C0189 +:10FAB0002888FEF7D5FC2B88324642F222013846D0 +:10FAC000FAF7E4FC0020BDE8F0810000287A00206D +:10FAD000307500202DE9F0472848C2F30B279046E7 +:10FAE00050F8274099460E461A2540460DF0B6FAC2 +:10FAF00088B3012838D0022836D1A07958BB00211C +:10FB000004F599700CF0B6F928B3D6F80200C4F8E1 +:10FB10003C01D6F80600C4F840017089A4F84401FD +:10FB2000102206F10C0104F5AB70F4F78DFC0120F6 +:10FB300084F8660194F83A0140F0080084F83A012C +:10FB4000810709D040F0040084F83A0100253846C6 +:10FB500000F06CFB04E007E03846FEF7C7FE002526 +:10FB6000032140460DF0F8FC2B4642464946044826 +:10FB70000BF043FB0020BDE8F0870000287A00204E +:10FB80002900010070B50A49C2F30B25104651F84F +:10FB900025400DF063FA40B1012806D02CB1FF20BA +:10FBA000E0702221284601F0DDFD002070BD00003C +:10FBB000287A002030B40124FF210C2B1CD00BDC50 +:10FBC000022B1DD003DCB3B1012B11D113E0072BA5 +:10FBD0001CD00B2B0CD11BE0112B17D004DC0D2BF0 +:10FBE00014D00E2B04D106E0182B04D0192B05D00D +:10FBF000C2789A4213D1047130BC7047C170FBE7E0 +:10FC000090F8691130BC104601F0ACBD8170F3E78B +:10FC100080790028F0D130BC1046FEF767BE8278AC +:10FC2000521C9A42F2D0E7E72DE9FF4F81B0DFF88E +:10FC3000F4A103980C46C0F30B250E795AF82590D1 +:10FC4000C98822890027B9F80E001144BB468142B9 +:10FC500001D8012000E0002040F2527272A1F5F7B5 +:10FC6000C3FEE088218942185AF82510CB899A1AD8 +:10FC7000CA815AF82500E288B0F872111144A0F840 +:10FC80007211608918B1C1B2284600F021FA2468C7 +:10FC9000B2E0002F78D1204602F0EEFCA9F8260150 +:10FCA0002089C0F30C08B9F8920001280CD85FEA4B +:10FCB000487009D45AF82500503001F099F95AF8E3 +:10FCC0002510002081F86C015FEAC86009D56079D1 +:10FCD000400606D52146484600F030FE2089C0F394 +:10FCE0000C0818F03E0F11D05FEA487002D5BBF146 +:10FCF000000F02D038F0040003D04FF0010B89F858 +:10FD000070815FEAC8603FD501273DE05AF82520A1 +:10FD1000002182F86D115AF82500503001F068F981 +:10FD20005FEA486030D4A08810F4FF5F2CD05AF806 +:10FD3000250090F83A1189070ED0D0F890213E485E +:10FD400003990DF06FFC5AF825000399D0F894211F +:10FD50003948401C0DF066FC20795AF8251000F057 +:10FD60000308A08891F83A11C0F34710890701D51C +:10FD7000001F80B24146B8F1010F09D0022907D017 +:10FD8000B8F1030F1DD110E0204605F00EFD32E062 +:10FD90002A490978090714D5009004F118032A4666 +:10FDA0004FF001014FF0030009E024490978C9062A +:10FDB00007D5009004F118032A460121042011F010 +:10FDC00057FD4046B8F1010F09D0022807D0B8F11D +:10FDD000030FD9D121462846FEF78CFAD4E7607983 +:10FDE000400604D521464846039A00F095FE214678 +:10FDF0002846FEF7A9FC24683000A6F10106F6B2F9 +:10FE00007FF447AF1FB13D21284601F0ABFC5AF803 +:10FE10002500C08910B903980DF03EFA05B0002006 +:10FE2000BDE8F08F287A0020626C655F6C6C635FC0 +:10FE30007461736B2E630000380001001C00002009 +:10FE40002DE9FF4F7B4FC2F30726002557F82640C8 +:10FE500085B09A4691468B46002C7CD0206D0028B8 +:10FE6000FBD048460DF0FAF8002875D0012800D1E3 +:10FE70000125206D06F0D6FE4FF00008C4F8508032 +:10FE8000002D6AD194F868010028FAD194F86A012B +:10FE90000028F6D169462046FDF7BBFF6B46324687 +:10FEA00049462046FDF7E9FF53464A46694605980C +:10FEB000FFF7BAFE48460DF0D1F801284DD0A4F85E +:10FEC0009680E069A063A069A1794079C0F3C00081 +:10FED00021B994F8401011F00C0F26D028B305F08A +:10FEE00009FE050001D0012000E0002040F6FF22BD +:10FEF00051A1F5F779FD687920F020006871287923 +:10FF000040F010002871A069417921F00801417189 +:10FF1000F4F798FD0022294604F12800F6F72EFE9A +:10FF2000206B00B92563F4F797FDF4F78BFD606B48 +:10FF300010B905F0DFFD6063F4F78EFDA069D4F819 +:10FF40009C11001DFDF786FBA07901254FF0040AE6 +:10FF5000012807D002E068E068E052E094F8A200CF +:10FF600018B32CE094F84400400716D4BBF80A00FC +:10FF700088B1A06994F84810001D05F089FEC4E915 +:10FF80001C01A26F801841EB0801C4E91A01B4F802 +:10FF90008400C4F8800084F8A25084F84880224687 +:10FFA0003146484600F0CAFA10E094F84400400791 +:10FFB00005D484F8A25004F1500001F019F822464B +:10FFC00031464846C4F840A000F046FAC4F844A0C0 +:10FFD00000282BD048460DF041F8012857F826009C +:10FFE00007D090F86C1111B190F8A20020B1082050 +:10FFF00003E090F8680100E03E2057F8261081F8F1 +:020000040001F9 +:10000000680104F1200005F0E7FC04F1280005F088 +:10001000E3FC94F86A0118B194F8690184F8680166 +:1000200000223146484601F077F9002009B0BDE8CA +:10003000F08F0000287A0020626C6535305F6C6CB0 +:10004000632E63007FB506460B49C2F307201D46A9 +:1000500051F820000021ADF80610ADF80810144644 +:100060006946FDF7D6FE2B46224669463046FFF725 +:10007000DBFD04B070BD0000287A0020002070472E +:1000800070B5054601200C4600EB05220E23052124 +:1000900008480DF081F805210170641C4580218914 +:1000A00081812168416061688160BDE870400DF028 +:1000B000D3B900002C000100044951F8200010B110 +:1000C00090F88D017047FB2070470000287A0020CF +:1000D00070B504460E460125052105EB04222223B6 +:1000E00004480DF059F8448046820570BDE8704020 +:1000F0000DF0B2B9200001002DE9F04107463B4860 +:100100000E4650F8264004F15005A879012804D085 +:10011000022817D0032865D11AE0D5F80700A86394 +:10012000D5F80B00E863E87B85F84000284600F02E +:100130005FFF29462046FDF79AFA31463846FEF71A +:10014000A9F84FE005F110013046FDF70BFF49E03B +:10015000A0790028A87D24D038B1FEF78FFD014694 +:10016000A069027961F301020271687D38B1FEF77E +:1001700085FD0146A069027961F3830202710022C4 +:100180001146204601F00EFA00233246052138467A +:1001900000F036FEA0690179C1F38101022914D073 +:1001A00017E038B1FEF76AFD0146A069027961F3F4 +:1001B00083020271687D0028E1D0FEF75FFD0146F1 +:1001C000A069027961F30102D8E7E17921F0010128 +:1001D000E171007900F00300022803D1E07920F0FA +:1001E0000200E0710020A871BDE8F081287A0020AB +:1001F00010B50446012000EB04210A4850F8240001 +:1002000090F83A2142F0040280F83A214FF47A62E1 +:1002100005480DF0EBF92046BDE81040032100F041 +:1002200077B80000287A00203A0001002DE9F0415B +:100230000546012000EB052605F070FA040000F1E8 +:100240000C0701D0012000E00020F02208A1F5F702 +:10025000CBFB0A203870A088224620F4FF502030C3 +:10026000A08029463046BDE8F041012300F076BD6C +:10027000626C655F6C6C635F6374726C2E6300000C +:100280002DE9F0410446204D012000EB042655F8ED +:100290002400DFF878803146876940460CF064FD21 +:1002A000387920F0F000387155F8240090F83A11B0 +:1002B00021F0030180F83A113146A8F102000CF058 +:1002C00053FD3146A8F101000CF04EFD55F8240015 +:1002D000807958B1304603210DF03EF93146404651 +:1002E000BDE8F0414FF47A620DF080B90321204659 +:1002F00000F00EF855F8240090F83A1141F0100182 +:1003000080F83A11BDE8F081287A00203A00010017 +:100310002DE9F04705468946012005F0FFF9DFF891 +:100320006480040000F10C0758F82500866906F186 +:10033000040601D0012000E0002040F2051212A1C5 +:10034000F5F752FB0B203870A08820F4FF502030C6 +:10035000A080307820F0A000307058F8250090F888 +:100360003A1121F0020180F83A11012000EB05203A +:1003700049460DF0F1F829462046BDE8F04700F067 +:100380000BB80000287A0020626C655F6C6C635FBC +:100390006374726C2E6300000D4A30B452F8213041 +:1003A00093F83A31DB0707D083884FF0806404EB81 +:1003B00073334FEAF3438380037943F003030371FC +:1003C00052F82120014630BC1046FEF7D5B8000097 +:1003D000287A00200840810701D502207047C10714 +:1003E00001D001207047400701D50420704701204B +:1003F0009040C0B2704770B50446C0780D46FF28E3 +:1004000029D194F85600032825D0E179C80722D0D5 +:10041000208A40B1618A491C89B2618281421AD323 +:100420000020608202E021F00100E071022005F06E +:1004300075F902000FD09188284621F4FF51403110 +:1004400091801A211173217A51732188BDE870407F +:10045000012300F083BC70BD2DE9F047814690690F +:1004600086B04FF00008A0F86A8090698A46154669 +:10047000A0F86880906902F15004474641794646E9 +:1004800021F00401417149462846FFF7B4FF00BF3F +:10049000B4F84200A188884205D1A07918B151462C +:1004A0004846FFF729FEB4F84200B4F844108842E9 +:1004B00003D1082006B0BDE8F087A9692846091DC8 +:1004C000FDF74AF8E06A049028881B490091CDE9BD +:1004D00001600396D4E906016FF0FD02801841F136 +:1004E000FF314FF4BC6304AA06F0C8F82060A96984 +:1004F000B4F842004883D4E90620A16A511870413B +:10050000C4E90610B4F84200401CA4F84200206878 +:1005100050B1049840F27121FE38B0FBF1F0A969A6 +:10052000C885A969888505E07F1CBFB2642FAFD953 +:100530004FF043084046BDE7511301002DE9F74F46 +:1005400002F150048346D4E90B101546FE2286B012 +:1005500002EB40028F180497A16A6FF095024FF0EA +:10056000000902EB5101C846884234D2A86900262E +:10057000A0F86A60A869A0F86860A869417921F0CC +:100580000401417159462846FFF735FFA8693B49E8 +:100590000079C0F3810200F0030031F8122031F835 +:1005A00010004FF4BC61104400F5CA70884200D8B6 +:1005B00008468246B4F84200A188884205D1A07955 +:1005C00018B158460799FFF797FDB4F84200B4F800 +:1005D0004410884203D1082009B0BDE8F08F049789 +:1005E000A9692846091DFCF7B7FF2888244900910E +:1005F000CDE901600396D4E90621206B5346101A19 +:1006000061EB06016FF0FD02801841F1FF3104AA91 +:1006100006F034F82060A869B4F842104183D4E9A8 +:100620000620A16A51187041C4E90610B4F84200CE +:10063000401CA4F84200A18E206B0844206320686F +:1006400088B194F8520028B1A869216B001DFF22DF +:1006500006F09EFF049840F27121FE38B0FBF1F0E5 +:10066000A969C88508E008F101001FFA80F8B8F10F +:10067000640F9FD94FF043094846ADE7C63E0200DC +:100680005113010070B514460E4A52F82050084626 +:100690000CF0E4FC20B1012802D0022810D101E0C6 +:1006A00002200AE0192105F599700BF0E3FB18B15F +:1006B00095F8A20020B101E01A202070002070BD42 +:1006C000022070BD287A002070B50546807801268A +:1006D0000F2814D003DC90B1012804D113E01628B0 +:1006E00014D0182812D095F856000026012806D0FC +:1006F000022808D0032809D0A87968B119E00F2989 +:1007000019D0C1B106E0012915D003E0162912D095 +:10071000182910D02A240FE0E8780F28EFD004DC45 +:100720000028ECD0012804D1EDE71628EED01828D7 +:10073000ECD0002070BD23242888224600F06EF9FA +:100740001EB12888214601F00DF8012070BD00007F +:10075000F8B51D4616460F46C2F30B2410460CF0A2 +:100760007DFC0100194812D0012910D00023324627 +:1007700029460094FDF736FC154D55F8240090F8F5 +:10078000DA1059B12146002000F044F81BE00C2398 +:10079000324629460094FDF725FC14E0C178FF2974 +:1007A00001D00220F8BD0021017108484FF47A629F +:1007B00031461F300CF01AFF55F824100C20C87079 +:1007C000388801F03DF80020F8BD00001B00010052 +:1007D000287A002070B5064615460C4603200BF01B +:1007E0004FFA002813D0012000EB04220C2305212E +:1007F00007480CF0D1FC0421017046704480296840 +:10080000416069688160BDE870400CF025BE70BD34 +:100810002B00010070B50C460546012000EB0422B8 +:100820000A2305210C480CF0B7FC0C4905704480E4 +:1008300051F82420B2F8D620C28051F82420B2F812 +:10084000D820028151F8241091F8D4100171BDE82C +:1008500070400CF001BE00001F000100287A00204B +:1008600070B518460D4601461646062311480CF091 +:1008700093FC044630460CF0F1FB01004FF0000001 +:100880000DD001290BD0207028880B4951F8200089 +:100890000A4990F8260191F84211084401E00C2120 +:1008A000217020712888608020460CF0D5FD002042 +:1008B00070BD00001D000100287A00203075002066 +:1008C0002DE9F04118460E4601461546C2F30B27A6 +:1008D000062317480CF060FC044628460CF0BEFBCB +:1008E00001004FF000000AD0012908D02070B17833 +:1008F000642531B101290AD0122121700EE00C21AA +:10090000FBE70C4850F8270090F89A0002E00A48EC +:1009100090F8450111F05CF890FBF5F020713088FB +:10092000608020460CF098FD0020BDE8F0810000BA +:100930001C000100287A0020307500202DE9F843C2 +:10094000064688880C46C0F34710001FC7B2102F18 +:1009500062D800210D200CF015FC05460021102066 +:100960000CF010FC8046B069816D296090F85C1035 +:100970002971B07910B141F0800001E001F07F00F1 +:100980002871B069816CC5F80510C06CC5F8090004 +:1009900010214046F3F77FFD012188F801102079EE +:1009A00000F0030040F0200188F80210F4F74AF844 +:1009B00001F006F80097B06904F118033830424698 +:1009C0002946FCF7B1FF8146B06929463830FDF76A +:1009D00023FFE21989EA00009169884210D1A068DA +:1009E00020F01000A060B26952F8581F1079491C1D +:1009F00000F07F0343F1000363F306001160107100 +:100A0000F4F72AF801F0F2FF28460CF01DFA4046F0 +:100A1000BDE8F8430CF018BABDE8F88370B5064697 +:100A200014460D46032004F079FE0246918821F415 +:100A3000FF5160319180112100F80C1F3146457043 +:100A40008470BDE870401046FFF7A6BC2DE9F04168 +:100A500005460E46022004F061FE040000F10C077A +:100A600001D0012000E0002040F289120BA1F4F730 +:100A7000BBFF0E49002051F8251081F83A010D20E6 +:100A800038707E70A088294620F4FF504030A08046 +:100A90002046BDE8F041FFF77FBC0000626C655F57 +:100AA0006C6C635F6374726C2E630000287A0020A4 +:100AB00070B5054601200C4600EB05220B230521ED +:100AC0000A480CF069FB401C062100F8011C641C5C +:100AD00005806188818021884180A188C180E1886A +:100AE0000181BDE87040401E0CF0B6BC2D00010035 +:100AF00070B510460D46C2F30B240CF0AFFA48B1A6 +:100B0000012807D0022801D0022070BD2978204694 +:100B100000F0DAFC002070BD2DE9FC470546806935 +:100B20000E46144690F82010890601D4022700E0F2 +:100B3000012790F8220000F07F08F07900065CD5CC +:100B40006869002859D0307C810908D002214FF013 +:100B50000008B1EB901F01D1022700E0012700F04F +:100B60001F00394610F06DFF814601200CF054F94A +:100B7000002842D10E2101EB4903224605212048DD +:100B80000CF03EFE040038D0162020702888A4F80F +:100B90000100A8693B464A460079C0F38100401C29 +:100BA000E070B07900F03F002071F088C0F387104A +:100BB00040B200EB80004000A4F80500114890F816 +:100BC000FC02E071307C8009207267720020A07204 +:100BD000B5F89200401EA4F80B0084F80D90A969A6 +:100BE00004F10E006C31CDE90018696910F030FF96 +:100BF0002046BDE8FC470CF02FBCBDE8FC87000098 +:100C000032000100307500202DE9F0410746904682 +:100C10000E460C2004F082FD050000F10C0401D00A +:100C2000012000E000204FF4877215A1F4F7DCFEEC +:100C3000234606F1A80241463046FCF79FFF543692 +:100C40000120B07061893180D4F80110C6F803101A +:100C5000D4F80510C6F80710617AF17200212170EE +:100C6000A98800EB072021F4FF5101F5C071A9808C +:100C70002A463946BDE8F041002300F06FB8000075 +:100C8000626C655F6C6C635F7461736B2E630000F4 +:100C90002DE9F04107460D460C2004F03FFD06000B +:100CA00000F10C0401D0012000E000204FF490720C +:100CB0001BA1F4F799FE5435012085F81A01002193 +:100CC000217095F834206270B5F835206280B5F84F +:100CD00074202281B5F87220E280B5F86E20A280DF +:100CE000EA8F0A326281A87062892A80D4F80120D2 +:100CF000C5F80320D4F80520C5F80720627AEA7207 +:100D00002170B18800EB072021F4FF5101F5C0717B +:100D1000B18032463946BDE8F041002300F01EB8EC +:100D2000626C655F6C6C635F7461736B2E63000053 +:100D300070B5144605460A460423052106480CF002 +:100D40002BFA002807D01721017044704580BDE8B8 +:100D500070400CF081BB70BD3300010070B50C46D3 +:100D60001546014683B10B482A7B50F82430DA70CF +:100D700050F8243000221A7150F8240042714FF4C8 +:100D80007A6205480CF032FC21462846BDE87040E6 +:100D9000FFF702BB287A00203A0001002DE9F04756 +:100DA0000546012000EB05291F46884616461046D9 +:100DB00004F0B4FC0446324641460C30F3F744FBE1 +:100DC000A08866F34C10A0807FB10B4898F8001003 +:100DD00050F82520D17050F8250000214FF47A6298 +:100DE0000171494605480CF001FC29462046BDE842 +:100DF000F047FFF7D1BA0000287A00203A0001003E +:100E00002DE9F0410746134815461E4650F8254087 +:100E100088460B200AF034FF002819D006233A46F2 +:100E200041460D480CF0B8F946700C210170458020 +:100E3000A1690979C1F38101491C4171A16909794D +:100E400001F00301491C0171BDE8F0410CF004BB45 +:100E5000BDE8F081287A00203100010010B5084B70 +:100E60000C3000210268C47812BA22F0FF0222433B +:100E700043F82120001F491C0429F3DB10BD0000AA +:100E8000100008402DE9F0410E4608881A4917461F +:100E90000C2551F8204010460CF0E0F8F8B101287C +:100EA0001FD0E4B1B4F88D307288B4F88B105B1C9D +:100EB000D0005943884213D31201C4E9642094F846 +:100EC0003A0180070AD039460C480CF0ABFB0B48BE +:100ED0003946401CD4F894210CF0A4FB002500E016 +:100EE000122533882A4640F67C413846F9F7CEFA77 +:100EF0000020BDE8F0810000287A002038000100C1 +:100F00002DE9FC4792461046C2F30B250C260CF047 +:100F1000A5F838B1012805D0324C54F82500817964 +:100F2000F1BB02E00020BDE8FC87002600F59470CC +:100F300005222D49F3F7C1FA90B354F82500C17882 +:100F4000FF2901D00220EEE72849D1F83B21009289 +:100F500091F83F118DF8041090F8491080690079DC +:100F6000C0F38100014228D0052168460AF062FEE4 +:100F700054F8251091F84A1081421ED9081AC1B2BE +:100F800000204FF001096A46C70800F0070C09FA73 +:100F90000CF312F807C0DBB21CEA030F09D100E022 +:100FA00019E04CEA030C891E02F807C011F0FF019A +:100FB00003D0401CC0B22528E6D954F82510009A69 +:100FC00001F58070C1F82D219DF8041080F83110D2 +:100FD0002846FCF7A5FE324642F214015046F9F7C6 +:100FE00043FA9FE7287A00206B76002030750020B6 +:100FF0003B3081880288C900B1FBF2F1B0F80720CC +:101000001144A0F80910704770B50646092004F095 +:1010100085FB040000F10C0501D0012000E0002058 +:1010200040F2B9120BA1F4F7DFFCA08820F4FF50C6 +:1010300000F59070A0800E202870681C0AF0F4FE65 +:10104000012000EB062022463146BDE87040012316 +:10105000FFF784BE626C655F6C6C635F6374726C77 +:101060002E6300002DE9F04105464E480E46ED1D69 +:1010700050F826404C484FF0010808EB0627D0F8FE +:10108000FD12C4F8A411B0F80103A4F8A80115F8E2 +:10109000050CA071A869C4F82801287F84F82C01E8 +:1010A000A869C4F82D01287F84F831011B20A4F819 +:1010B0007C01A4F880014FF4A4703B49A4F87E01A0 +:1010C000A4F88201B1F85221ED1F002A62D0A4F8E1 +:1010D0007821A269127902F00302022A53D0B1F8F2 +:1010E0005421824200D91046A4F87A01B1F84B018C +:1010F000A4F87601B1F84901A4F874010022114660 +:10110000204600F04FFA032084F83201042084F8CE +:101110003401002084F8DA00E08184F83A0184F890 +:101120006C8184F86D0184F86E0184F86F0184F895 +:10113000680184F86B0184F870014BF68030C4F8C4 +:1011400090014010C4F894010020C4E96C00022111 +:1011500038460CF001FA2A4631460020FDF7A1FE80 +:1011600004235A02052127200CF016F814210170DF +:10117000A0F80160A169097EC1F38011C170BDE8CA +:10118000F0410CF069B9B1F854014FF42962904272 +:10119000AAD8A8E7B1F84D01A4F87801B1F84F0139 +:1011A000A2E70000287A00203075002070B50446C0 +:1011B000012004F0B3FA050000F10C0601D0012073 +:1011C00000E0002040F2E91220A1F4F70DFCA8880D +:1011D000224920F4FF502030A88051F82400836970 +:1011E000002050331A79186060F306021A7151F822 +:1011F0002420936958331A79186060F306021A7133 +:1012000051F82430C3E96C000520307051F82400F7 +:101210008269107940F08000107151F8242040F06C +:1012200020009269107151F824002A4690F83A1172 +:1012300041F0020180F83A11012000EB0420214620 +:10124000BDE870400123FFF789BD0000626C655F57 +:101250006C6C635F6374726C2E630000287A0020EC +:101260002DE9F0470446012000EB042904F056FA6A +:10127000DFF88C80054600F10C0758F824008669D9 +:10128000361D280000D001204FF4B3721DA1F4F7E1 +:10129000ABFB06203870307820F0C00040F0300002 +:1012A000307058F82400464690F83A1141F0030196 +:1012B00080F83A1158F824008179C9B1D0F890210A +:1012C000494614480CF0AEF956F824004946D0F8C7 +:1012D00094211048401C0CF0A5F9A888214620F460 +:1012E000FF502030A8802846BDE8F047FFF754B8EB +:1012F00008484FF47A624946801C0CF077F9ECE715 +:10130000287A0020626C655F6C6C635F6374726C3A +:101310002E6300003800010070B505460A480C46EF +:10132000164650F82400CAB2314690F86831284673 +:10133000FDF730FA294605480BF016FD21462846F0 +:10134000BDE87040FDF736BC287A00203A00010065 +:101350002DE9FF47804635490C9851F82040FE2082 +:10136000A5692D1D161843F1000724B1A06A4FF09E +:10137000000920B110E0002004B0BDE8F087606BE8 +:1013800010B904F0B7FB60630146002204F12800A5 +:10139000F5F7F4FBC4F83490D4E90A01C4E9080174 +:1013A00004F12800F5F728FCC4F83090206A686042 +:1013B000606A4B46417941F020014171017921F089 +:1013C00010010171216A01602846FCF714FDC8B1C3 +:1013D000607A78B16372D4F8A00100B1012040F2C4 +:1013E000A12213A1F4F700FBD4F8A0112846491C50 +:1013F000FCF730F932463B462846CDF8008004F031 +:10140000D1FBB9E7281FCDE90008E978ADF80C3029 +:10141000C1F384018DF80810ADF80A302A6F6946CF +:101420004FF0021005F0A6FCA5E70000287A002086 +:10143000626C6535305F6C6C632E63002DE9F041A2 +:1014400005460E46022004F069F9044600F10C0737 +:10145000012000EB0528200000D0012040F20A22E4 +:1014600013A1F4F7C1FAA08820F4FF504030A08007 +:10147000022038707E70132E00D11626104F0123E3 +:10148000224657F82500294680F869614046FFF753 +:1014900065FC57F82500B0F88F204FF4FA708242AF +:1014A00000D302464146BDE8F04106480CF09EB824 +:1014B000626C655F6C6C635F6374726C2E630000BA +:1014C000287A00203A0001002DE9F04106460D4639 +:1014D000022004F023F9040000F10C0701D00120E0 +:1014E00000E000204FF4097208A1F4F77DFAA0880B +:1014F000314620F4FF504030A080072038707D70C6 +:101500002046BDE8F041FEF747BF0000626C655F12 +:101510006C6C635F6374726C2E630000F0B50546FB +:101520008C4614465189B5F89220D5E91A038E1AD3 +:10153000A96F89B04E430021301841EB0302A38903 +:1015400040F2E24673431E1806A8CDE9021042EBB2 +:10155000E37740F2E240019104910CFB00F200912C +:101560000F4B3046394605F0B2F8002815D00699E1 +:101570008E1B4FF0000105F073F9A86F6189B6FB6F +:10158000F0F008446081A86FB6FBF0F100FB116039 +:1015900040F2E241B0FBF1F0A08109B0F0BD0000E3 +:1015A000416901002DE9FC470546B0F87A01B5F81C +:1015B0007E418A46A04200D20446B5F87601B5F8CD +:1015C0008261B04200D20646B5F87411B5F88001C8 +:1015D000814201D20B4600E003461B2B03D9814216 +:1015E00002D2084600E01B20ADF80000B5F87811E3 +:1015F000B5F87C01814201D20B4600E003461B2B6B +:1016000003D9814202D2084600E01B20ADF8040055 +:10161000A8694FF001080079C0F3810108FA01F0D0 +:101620001043C0B200F0DAF84FF4A4794FF4296700 +:10163000022806D04846864200D33046ADF8020064 +:1016400004E0BE4200D23E46ADF80260A8690079CF +:1016500000F0030108FA01F040EA0A00C0B200F00D +:10166000BDF80646022806D04846844200D32046EC +:10167000ADF806001EE0BDF80010BDF802004FF402 +:10168000747202EB8112904202D3880100F57470EB +:1016900000F59670A96F80B2814201D9081A00E066 +:1016A000002080B2844200D30446BC4200D23C46B3 +:1016B000ADF80640BDF90600314610F091F901463B +:1016C000BDF80400814204D8BDF90600314610F08F +:1016D00087F9C0B285F88D011B2800D21B2085F840 +:1016E0008D01082205F5C2716846F2F7E6FE002872 +:1016F00004D0DDE90001C5E961010120BDE8FC87F6 +:101700002DE9F04100240D46064601270EE000BFFA +:1017100036F81400082802D30920BDE8F08107EB51 +:1017200000200BF09BFC28B1641CA4B2AC42EFD3A8 +:101730000020F2E70220F0E70CB5094AD2E90012D6 +:10174000CDE9001200216A46535C834201D1012099 +:101750000CBD491CC9B20729F6D300200CBD0000FE +:10176000784C0200074B012202EB002253F82000C4 +:10177000002805D080F86811012110460BF0ECBE5E +:1017800070470000287A002070B500252C460126FD +:1017900006EB04200BF062FC08B16D1CEDB2641C7A +:1017A000E4B2082CF4D3284670BD00002DE9F041C6 +:1017B000002406465FF0010707EB042528460BF0DE +:1017C0004DFC30B1641CA4B2082CF5D30920BDE84F +:1017D000F081C5F30B2030800020F8E7410701D5E8 +:1017E00002207047C00701D00020704701207047D9 +:1017F00070B50D460646002405E000BFF2F712FE64 +:101800003055641CA4B2AC42F8D370BD0B4A10B57D +:1018100052F82020B2F89230C91A89B247F6FF7305 +:10182000994209D292F8561021B12A21FFF79AFF66 +:10183000002010BD012010BD2821F7E7287A0020E4 +:1018400070B50646062003F069FF050000F10C04A0 +:1018500001D0012000E00020BA2212A1F4F7C4F860 +:101860000C2020700FF0F4FCC00701D00A2000E02B +:101870000820607040F2AC60608040F20110A080EF +:10188000A8880C4920F4FF50C030A88051F82610D9 +:10189000012081F8DB0031462846BDE87040FEF7A4 +:1018A0007BBD0000626C655F6C6C635F6374726C1F +:1018B0002E630000287A002010B51046C2F30B24D6 +:1018C0000BF0CCFB40B1012806D0022801D0022049 +:1018D00010BD2046FFF7B4FF002010BD70B50546CF +:1018E000002410F8011B00F05FFE002801DB122429 +:1018F0000CE028781D4958B101281ED0FF28F6D1E8 +:10190000012081F8620100BF00F036FC204670BD66 +:1019100091F86021D1F8580100EBC200D1F85C21A8 +:10192000904221D255F8012F0260AA88828091F856 +:101930006001401C81F86001E6E791F86021D1F870 +:10194000580100EBC202D1F85C0182420CD201F5D1 +:10195000AE710838086055F8012F0260AA888280AD +:101960004879401C4871CFE70724CFE73075002045 +:1019700010B5104C206928B90021032003F02CFE7B +:101980002061A8B12169002081F826000948216959 +:10199000103890F8450181F8230021690648086154 +:1019A000216906484861216903204867002010BD6D +:1019B000072010BD40750020D6BE898E55555500B4 +:1019C000064810B590F8F800002805D002F084FD14 +:1019D000BDE8104000F094BC10BD00003075002040 +:1019E00070B5044601690F23032213480BF0D4FBA2 +:1019F000054618340E222146401CF2F725FD2078BA +:101A0000B0B16288D4F80A000C49F2F71DFD00203D +:101A100028700B488168C90605D5816821F010013E +:101A20008160012028702846BDE870400BF014BD8D +:101A3000608861784218E5E745000300000208402D +:101A4000000008402DE9F0470F4681461E469046AB +:101A5000002168200BF052FE04460C2003F05EFECD +:101A60000546ECB368212046F2F715FD2765C4E969 +:101A700015862146484603F0AFFD6063FF2207212B +:101A800004F1380003F0FEFDA06B50B3606B40B36F +:101A90003DB32D60A88820F47F60C030A8802879ED +:101AA00020F00F00C01C2871606BC17921F07C010F +:101AB0005C31C171017E21F0010101760C4991F880 +:101AC000451180F8231085602821C185417921F0D6 +:101AD00004014171012180F826102046BDE8F087FD +:101AE00000E001E00020F9E7204600F01FF8F9E7E8 +:101AF0003075002010B504000ED02078012801D0E8 +:101B0000012000E00020482204A1F3F76DFF2046E9 +:101B1000BDE8104000F00AB810BD0000626C655FBF +:101B20006164765F636861696E2E630010B5044678 +:101B3000806B18B104F1380003F000FF606B28B12E +:101B4000806803F069FF606B03F0BCFEE06D10B1CC +:101B500018380BF035FA2046BDE810400BF074B988 +:101B60002DE9FF4706460C989046DDE90E2A817C58 +:101B7000994609064FF4967701D41E2100E03946B4 +:101B8000746BB0F81330241DC3F30C05E3784D4398 +:101B900062F38603E370027DEA3D5309227801F582 +:101BA000967163F383022270807C627D60F305028C +:101BB0006275207D20F001002075607820F004001F +:101BC0006070204603F015FE84F822A0EA2000226F +:101BD0000749CDE90240CDE9001218EB050049EBB9 +:101BE00002013B460DAA04F049FD7064BDE8FF8781 +:101BF00035B601002DE9FE4F07460C9D92469946E9 +:101C0000A87D800601D41E2601E04FF4967635F8B3 +:101C1000150F7C6BC0F30C007043A0F1EE0814F8B4 +:101C2000040F0022C0F38101FF200FF0F1FE834674 +:101C3000E07820F07C005830E070786B0079C0F3D9 +:101C40008101207861F3830020706868A061287AA0 +:101C5000217F60F304012177B5F80D002082E87B35 +:101C6000A074D5F80900E06006F59671204603F0EF +:101C7000C0FD207D002240F041002075288AE082CE +:101C8000012084F82200EA200092CDE901401AEBFD +:101C9000080049EB0201044B0BF1EA0204F0C6FC18 +:101CA0007864BDE8FE8F000035B60100416C19B1C3 +:101CB00001210170084670470020704770B5044646 +:101CC000856B0078012801D0012000E00020662209 +:101CD0000AA1F3F789FE284603F070FD606BC16826 +:101CE00065F31E01C160607820F003006070002081 +:101CF000A0802564C4E9120070BD0000626C655FBD +:101D00006164765F636861696E2E630070B50C0074 +:101D1000054601D0012000E000204FF4A07220A170 +:101D2000F3F762FE287A162817D0172815D018283E +:101D300026D1216C4879800608D5236D2046A26DF6 +:101D40009847206C417921F020014171206C006896 +:101D50002064A08800F10100A080216C48798006F1 +:101D600008D5236D2046A26D9847206C417921F05B +:101D700020014171206C00682064A088401CA08074 +:101D8000606C00280BD1606B216CC06820F00040B3 +:101D9000884204D12046BDE8704000F066B970BDAD +:101DA000626C655F6164765F636861696E2E630073 +:101DB00070B50C46017A00250226162911D0172984 +:101DC0000FD0182908D1408902280DD2606C10B1BB +:101DD00004F028FF656426702046BDE8704000F0DE +:101DE00044B940890028F1D070BD00002DE9FF41C1 +:101DF000476B0446851D007897F88280012869D1D9 +:101E0000B86F616C884201D1012000E00020F5220A +:101E100031A1F3F7E9FD606C18B104F003FF002075 +:101E20006064F868B8F1180F20F0004600D13668F9 +:101E3000316861F31E00F8606078C0074AD170799C +:101E4000800647D5307A10F02E0F43D1F07B00F09A +:101E50000301381D03F01CFF07468846D4E9120130 +:101E6000084301D1C4E912782946304609F091FDB2 +:101E700000282FD0A878C1060FD4800601D40320F3 +:101E800027E01948D0F89800002823D13A46434665 +:101E900020460095FFF7AEFE14E0B5F81300C0042D +:101EA00010D0287D114B4009012133F81000172272 +:101EB000EA3000950391CDE901023A4643462046B7 +:101EC000FFF74EFE606C002804D12078012801D174 +:101ED00002202070BDE8FF81626C655F6164765FFF +:101EE000636861696E2E630030750020C63E020093 +:101EF0002DE9FF470CA91546B1E810031E46074619 +:101F0000FFF7DCFEA078810606D52A463346384620 +:101F10000094FFF76FFE53E0C0064CD5217D2B4B9C +:101F20004909786B33F81120001D2949C160EA3254 +:101F300028490161B8F1000F36D04168B9F1000FAE +:101F400091F805C02CF0800C81F805C091F807C00D +:101F50002CF0030C0CF1010C81F807C002D04CF0FE +:101F6000080C01E02CF0080C81F807C0797802F524 +:101F7000167241F002017970217D4FEA511C0178FF +:101F80006CF301010170207D0221400933F810003B +:101F90000094104418220391CDE901022A463346E9 +:101FA0003846FFF7DDFD0BE0012017210094039078 +:101FB000CDE90121F2E7BD2207A10020F3F714FDCE +:101FC00004B03846BDE8F047FFF770BEC63E0200D9 +:101FD000D6BE898E55555500626C655F6164765F2B +:101FE000636861696E2E63002DE9FE4F0CA91646E9 +:101FF000B1E880071C460546FFF760FE00218DE82A +:10200000020643463A463046214604F00FFB686418 +:102010002846BDE8FE4FFFF749BE10B5044640789C +:10202000002140F001006070606C04F019FC002891 +:1020300004D00020606402202070012010BD000048 +:102040002DE9F04101250E460746002408E000BFB7 +:1020500057F8240018B1FFF7E0FF00B90025641C11 +:10206000B442F5DB2846BDE8F0810178022901D0B1 +:10207000032906D100210170426D002A01D0816D33 +:10208000104770472DE9F0470026204C3746B046F0 +:102090004FF0020926714FF4804A00BF07EB47005A +:1020A00004EB400515F8360F01282BD0032809D37F +:1020B0002FBBE06BC4F83600B4F840006087A9F18C +:1020C00001091AE0A9886A8891421BD86B78012B14 +:1020D00018D8514516D8042914D3524512D8042AC9 +:1020E00010D309F0A9FE68B108F1010000F0FF0863 +:1020F00068787F1C012800D120714F45CEDB56EA5D +:10210000080000D112263046BDE8F0874075002057 +:1021100070B50E4C054621B1012907D094F8450051 +:1021200012E00B490FF08BF860B9F7E70849891FF7 +:102130000FF085F830B994F8450028B1284606F02C +:10214000CFF908B1012070BD002070BD30750020AE +:102150006476002010B503F03FFF064C206003F0CA +:102160003BFF80306060002020726072BDE810404C +:1021700000F002B8887600200548027A417A42EAE7 +:1021800001220449CA6302684A6340688863704751 +:1021900088760020000009402DE9F041504CFFF7FF +:1021A00071FF10B11220BDE8F0810026A667E66736 +:1021B000C4F88060C4F8846084F848600120A0708E +:1021C000A68502F073F9FFF7D3FB0028EBD1256950 +:1021D000FF222D1D022104F1140003F053FA0C22FA +:1021E000012104F11C0003F0ABFAE069C0B16169A0 +:1021F000B1B12179C9B1017921F00F01C91C017177 +:10220000818821F47F61C0318180C17921F003018F +:10221000491CC17194F8342022B141F0080103E057 +:102220000720C0E721F00801C171002723460022E2 +:102230002C490320FFF706FC04EB8701C1F8B80026 +:1022400030B1217921B1406BE16980684968416012 +:102250007F1C042FEADB94F8341004F108022248B2 +:1022600009F07AFC00289ED16069A062D4E90701D8 +:10227000086095F8200040F0010085F82000E06932 +:1022800068606169A86861F31E00A860287D16492E +:1022900020F0400040F001002875687D0D3120F0ED +:1022A0003F002730687505F1180004F0B0FD667036 +:1022B000022103200BF050F901F0B6FA050005D019 +:1022C000002103200BF048F928466CE7B4F84420BD +:1022D0001AB1032105480BF089F9002063E70000DB +:1022E00040750020193701005E7600204C00030085 +:1022F00010B500F005F8BDE8104000F047B8000048 +:102300002DE9F0411D48F4F787FC054601200AF04D +:102310001BFD1A4F083F002655B1686920280BD0D5 +:102320002846FFF75DFB1648866028460AF048FEFF +:1023300087F8F860BDE8F08111230322114829696C +:102340000AF02AFF044610220F49401CF2F77CF8DD +:10235000287C01280DD00020C0F10F0123180A1994 +:1023600093F801C0517882F801C0401C59700828C8 +:10237000F2DB267020460BF06FF8D4E738750020AA +:102380000000084044000300100208400448806830 +:1023900010B1183002F01CB81020F4F7C3B90000D7 +:1023A000307500202DE9F041144688460646012587 +:1023B000876A0DE0022C10D302224146304600F01D +:1023C00015F800B900253868A41EA4B20068B062F0 +:1023D000002CEFD12846BDE8F0810122414630466D +:1023E00000F004F80028F5D10025F3E770B5846A01 +:1023F00016460546012A05D03EB3207A10F02E0F6E +:1024000015D033E0207A10F02E0F2FD1207900F074 +:102410000F000728F1D1204605F096FE8007ECD585 +:102420002146284601F056FD80F0010070BDE87895 +:1024300010B1204600F054FB022E17D12068017A1B +:1024400011F02E0F02D0E87860B10FE0017901F0B1 +:102450000F0104290AD1E97811B100F041FB05E030 +:10246000012100E00021204600F026F8012070BD87 +:1024700010B50446806AB2B1017A11F02E0F12D164 +:10248000017901F00F0108290DD2DFE801F0040401 +:10249000040C0C0C040EE17811B100F021FB02E0F9 +:1024A000002100F009F8012010BD0146204601F08E +:1024B00011FD80F0010010BD2DE9FC4105460079B9 +:1024C0000F4600F00F040C2009F0DAFB002824D09E +:1024D00000F06EFA060020D0A8690090A88BADF835 +:1024E0000400234890F8530020B12146684609F0C3 +:1024F000D9FC70B1B41C2946204601F0F9FF2879B7 +:1025000010F00F000BD001280BD0062819D0102096 +:1025100018E0A6F118000AF053FDBDE8FC81132075 +:1025200010E0152020800020E0756879C0F380104D +:102530002074D5F81E00C4F81100688CA4F81500AA +:1025400001E0122020807FB12968204601F0D0FFF1 +:102550000849E01C0EF073FE287910F00F0F01D02F +:102560001A2000E01B20208030460AF075FFD4E7D7 +:1025700030750020054802002DE9F04117460D4650 +:10258000064600240BE000BF06EBC40039460EF0FF +:1025900056FE10B12046BDE8F081641CE4B2AC42A6 +:1025A000F2D34FF0FF30F6E7094B21B1012907D0F4 +:1025B0004FF0FF30704793F86011D3F8583103E0C3 +:1025C00093F86111D3F85C3102461846FFF7D4BF87 +:1025D0003075002070B5064600240A4D09E000BFA2 +:1025E00005EBC4009D3008223146F1F766FF38B193 +:1025F000641C95F89C00A042F2DC4FF0FF3070BDE7 +:10260000204670BD3075002070B500210F4D044686 +:102610000A460B4605EB8300D0F8C80050B1066EA1 +:10262000A64200D1024611B9067806B901465B1CE4 +:10263000042BEFDB32B11078012801D0104670BDB9 +:10264000002070BD01B10C66084670BD30750020D9 +:1026500010B5084B0246002103EB8100D0F8C800FA +:10266000002806D0046E944203D0491C0429F3DBF1 +:10267000002010BD307500200449C08891F8421137 +:10268000C0F38710084440B2704700003075002046 +:1026900070B5214C032121480AF066FB1F48032135 +:1026A000401C0AF061FB0021206B04F0D9F868B3EC +:1026B0000026042104F1B8002663FFF7C1FC28B30B +:1026C0005FF0000504EB8500D0F8B800FFF712FAC0 +:1026D0006D1C042DF6DB883426636663A663E6630F +:1026E00054F888090AF0B0FB04F1100003F01AF95D +:1026F00004F1140003F022F904F11C0003F06CF95A +:10270000002103200AF028FF267070BDBDE870404C +:10271000012103200AF020BF407500204C00030077 +:102720002DE9F04389B0C76D4FF000098DF81C907A +:10273000436B2D4D0DF11C0C1B798846C3F38106AC +:10274000D5F88830BF1C1C785B7B0296CDE9054923 +:10275000CDE903C3D0E91210CDE900104146384657 +:1027600009F0F8FF0446082803D39DF81C00002850 +:1027700037D00D2009F084FA38B310230322052145 +:102780001A480AF009FD0E2101709DF81C1001B1D4 +:1027900007214170448098F81120761C12090271BB +:1027A000BA784271D7F80320C0F80620B7F807209E +:1027B00042810673B8F81720A0F80D2098F81D2064 +:1027C0005209C27311B10AF047FE03E0084951F8FB +:1027D00024108866D5F888000AF036FB0120C5F879 +:1027E000889009B0BDE8F083407500203C000300EC +:1027F000EC7A002010B508480A881C4642808A8876 +:1028000082808988C180002303222146034808F082 +:10281000EAFC002010BD0000307500202E000300EF +:1028200070B5154C1E460D462078012822D1FEF7C2 +:10283000ABFFF8B10020E0800AE005EB4002E18840 +:102840005288401C05EB4202C0B2528A1144E1801A +:1028500029788142F1D8E088A188884204D8297873 +:10286000A81CFEF74DFF28B112230322314603486E +:1028700008F0B9FC002070BD307500202F00030067 +:102880002DE9F0410022434903200AF0A9FA424908 +:1028900001200AF011FE4148016C406C4FF4427176 +:1028A0003F48F1F7F8FDFF2204213E48F1F7ECFD27 +:1028B0003C4C1F274F3C012684F8537084F84E602F +:1028C00044F29020A4F85F00FB21A4F85D10A4F866 +:1028D0006300A4F861101B20A4F866004FF4A470F4 +:1028E000A4F86800F1F79EFD60730025A573E573F9 +:1028F00026706760EC3C0EF0ABFCC00604D504F516 +:102900009A700EF0ABFC06E0264827493B380A686F +:1029100042638988018784F8F85084F8466108206A +:1029200009F098FA28B194F8460140F0020084F8C2 +:1029300046010B2009F08EFA28B194F8460140F0C8 +:10294000040084F8460104F5A274A078E0702071B8 +:102950003F2060702570A4F5A274FFF7FBFB104DBB +:1029600008352846F4F758F910B10AF029FBF8E7C2 +:102970002846F4F741F904F2F624322060806420FE +:1029800020806FF02F000949A0800B200860BDE86F +:10299000F0810000843E0200F122010000000940A5 +:1029A000307500206B7600200548020000000840CA +:1029B00010B501200AF030FA98B9FF23032205214F +:1029C00009480AF01DFF60B10D210170012141701D +:1029D000FF22027142737F228273002202824276BA +:1029E00010BD002010BD00003B000300FFF7CEBC6F +:1029F000034608680A46C16F002901D010461847EF +:102A00007047000010B50C460A4991F8451001299D +:102A100008D0032906D05CB12046BDE81040194615 +:102A2000FFF776BB1146FFF7BFFDC017401C10BD76 +:102A3000012010BD307500202DE9F041074600242B +:102A40000E4E14E006EBC405B87815F89D1F8842B9 +:102A50000BD1691CF81C0EF0F2FB30B1F87AE97961 +:102A6000884202D10120BDE8F081641CE4B296F8EE +:102A70009C00A042E6D80020F5E700003075002059 +:102A8000054890F84510012903D0032901D0012001 +:102A9000704790F8620170473075002010B50A4BFE +:102AA00000214FF6FF7400BF03EB4102B2F85A2039 +:102AB000A24206D0824201D1002010BD491C142937 +:102AC000F2D3012010BD0000307500200348D0F87B +:102AD0009800002800D001207047000030750020C9 +:102AE0007CB505460079184C00F00F01A8690090EC +:102AF000A88BADF8040094F85300012806D00129F2 +:102B000004D094F8F010890717D508E0684609F05A +:102B1000C9F994F8F01089070FD500280DD02B23A0 +:102B2000032205212A200AF037FB0446294608F033 +:102B300093FC18B120460AF08FFC7CBDA4F118006C +:102B40000AF03EFA7CBD00003075002010B5A1F1FE +:102B500018000446014600220648F4F72DF80548FF +:102B6000083890F8F80010B9204601F031FC012037 +:102B700010BD0000387500202DE9F041194C0E46BB +:102B8000002594F8D8001746410706D440F0080005 +:102B900084F8D800FFF79AFF08B10C2518E094F8E4 +:102BA0009C00052801D3072512E03046FFF712FDEF +:102BB000002801DB12250BE094F89C0004EBC00117 +:102BC000401C84F89C00306841F89D0F7068486094 +:102BD0002A4642F247013846F7F746FC0020BDE896 +:102BE000F08100003075002010B50D491446002218 +:102BF00091F8D830580706D443F0080081F8D8007F +:102C0000FFF764FF08B10C2202E0002081F89C006D +:102C100042F249012046F7F727FC002010BD0000D2 +:102C20003075002010B502F0B3FF002010BD000089 +:102C30002DE9F0410E4E087817463478002518B17A +:102C400034B1641EE4B204E0072C01D2641CF9E73D +:102C500043252046FAF794FD00B934702A4642F223 +:102C60005F013846F7F700FC0020BDE8F081000066 +:102C7000F40100202DE9F0472A4F0C46A7F110007F +:102C8000914690F8D81000264A0706D441F0080172 +:102C900080F8D810D7F8880008B10C2639E0B4F8CD +:102CA0000900B0F5FA7F0FD2B4F80B000A280BD355 +:102CB000B0F5804F08D82078C00720D1A07801282F +:102CC00002D860780F2801D9122622E0DFF8588058 +:102CD000002500BF58F8250068B13C30E11C0EF01B +:102CE000AEFA40B158F82500617890F82900884282 +:102CF00001D10B260DE06D1CEDB2082DEAD30021A9 +:102D00000E200AF03FFA0E222146C7F88800F1F79C +:102D10009BFB324642F244014846F7F7CBFB0020CA +:102D2000BDE8F08740750020EC7A002070B5174CA4 +:102D30001546A4F1100142F2450691F8D800420769 +:102D40001DD440F0080081F8D800D4F88800B0B154 +:102D50000AF07AF8002231462846C4F88820F7F7AE +:102D600083FB10230322052109480AF015FA0E21DE +:102D70000170442141700AF06FFB002070BD0C22ED +:102D800031462846F7F770FBF7E700004075002052 +:102D90003C0003001046104A10B592F8D810CB073B +:102DA00005D00C2242F23A01F7F75EFB11E041F048 +:102DB000020182F8D81002460323052107480AF0D1 +:102DC000EBF90021017040F27261A0F801100AF0E5 +:102DD00043FB002010BD00003075002035000300CB +:102DE00010460F4A10B592F8D810CB0705D00C2228 +:102DF00042F23B01F7F738FB0FE041F0020182F8A5 +:102E0000D81002460223052106480AF0C5F9002120 +:102E10000170082141700AF01FFB002010BD000066 +:102E2000307500203600030010460F4A10B592F8A6 +:102E3000D8104B0705D50C2242F24A01F7F714FBD4 +:102E40000FE041F0080182F8D81002460223052164 +:102E500006480AF0A1F900210170052141700AF02D +:102E6000FBFA002010BD0000307500203800030080 +:102E700010B5052319460C480AF08EF9002101709F +:102E80000A49B1F8422102EB82025200A0F8032065 +:102E9000B1F940110A2291FBF2F1A0F801100AF0F9 +:102EA000DBFA002010BD000039000300307500205F +:102EB00070B5032305210D480AF06EF904460C4D48 +:102EC0000020207095F844010EF082FD642690FBEE +:102ED000F6F0607095F845010EF07AFD90FBF6F083 +:102EE000A07020460AF0B8FA002070BD3700030039 +:102EF0003075002010B50523194608480AF04CF932 +:102F0000002101700721417008218170C1701421D6 +:102F100001710AF0A1FA002010BD00003D0003007D +:102F200010B500210846F3F7F3FF002240F60341F5 +:102F30000320F7F799FA012010BD000070B51A4C74 +:102F40001646002594F8D800420706D440F0080041 +:102F500084F8D800FFF7BAFD08B10C251CE008463C +:102F6000FFF738FB002801DA422515E000200AE0CF +:102F700004EBC00202F1A501D2F8A53042F89D3F52 +:102F800049685160401C94F89C10491E8142EFDC56 +:102F900014F89C0F401E20702A4642F24801304629 +:102FA000F7F762FA002070BD3075002070B5164644 +:102FB00010460AF053F8022820D1114BB3F85600FE +:102FC000B3F85450C401A54210D9102008F058FE9F +:102FD00048B10123324605210A480AF0DDF81121E3 +:102FE00001700AF039FAFFF753FB07E0012058742B +:102FF0000448621B314613300AF0F8FA002070BD15 +:10300000307500203A00030070B516460C4C10468F +:103010000AF024F8022811D1A4F110053146B5F8C0 +:10302000542008480AF0E2FA0020687494F843003B +:10303000022801D101F03AFA00F0F6FB002070BD41 +:10304000407500204C0003002DE9F0410C46097842 +:1030500012251646C80701D16078C0B1880701D48F +:10306000A078A0B10E4FC80706D1607808F00EFF17 +:1030700068B1607887F847012078800706D4A07887 +:1030800008F004FF18B1A07887F8480100252A4607 +:1030900042F231013046F7F7E7F90020BDE8F08150 +:1030A00030750020104610B5064A0B68C2F8FD3294 +:1030B0008988A2F80113002242F25D01F7F7D4F9E2 +:1030C000002010BD307500202DE9F0412D4E0C463A +:1030D000A6F110009846002590F8D81017464245F2 +:1030E00004D04A0723D441F0080103E00A071ED4A4 +:1030F00041F0040180F8D810207870B1607802287F +:1031000009D8A08801D130B100E030B1A088618831 +:10311000B0EBD11F01D812250AE0384609F09EFF16 +:1031200058B1012823D0022820781BD000B10C25EB +:1031300047451FD042F242011EE020780028F7D018 +:10314000002030702068C6F84200A088A6F846002B +:10315000474501D1012000E00020F070FFF71CF886 +:103160000546E5E70028E3D1FFF792FAE0E7022001 +:10317000BDE8F08142F20C012A463846F7F774F9AF +:103180000020F5E7407500202DE9F0411D46224E54 +:1031900014460F46AA4203D00EF05AF8C0070AD0D0 +:1031A0001D481038AC4290F8D81006D04A0710D409 +:1031B00041F0080105E0112221E00A0709D441F09D +:1031C000040180F8D810204609F048FF18B1012802 +:1031D00009D00C2213E03878032802D87878042824 +:1031E00004D312220BE00220BDE8F0810E22394602 +:1031F00006F13400F1F728F9FEF744FF0246AC422D +:1032000002D042F2410101E042F20B012046F7F701 +:103210002BF90020E8E7000040750020074910B5B1 +:1032200000200874032009F019FF022804D100F0DF +:10323000FBFA08B1FFF72CFA002010BD3075002012 +:1032400070B5B1F902301046002203F5A0644FF4C6 +:103250002065AC4205D8B1F9004004F5A064AC4249 +:1032600001D912220BE00A2493FBF4F4074BA3F8D4 +:103270004241098801EB81014900A3F8401142F263 +:103280004D01F7F7F1F8002070BD00003075002007 +:1032900010B5194609230322074809F07DFF0446AB +:1032A0000821401C01F0B0F80020207020460AF0F0 +:1032B000D3F8002010BD00004600030070B5134C89 +:1032C0001046194694F8D820930705D50C2242F2EF +:1032D0000701F7F7C9F816E042F0010084F8D800BA +:1032E000022303220A4809F057FF054694F84501D6 +:1032F0000EF06EFB642190FBF1F0687000202870E6 +:1033000028460AF0A9F8002070BD000030750020A2 +:103310004200030010B5194604230322064809F0B1 +:103320003BFF5F21C170FB21A0F80110002101705B +:103330000AF092F8002010BD3F00030010B51946B6 +:1033400009230322074809F027FF07490A68C0F844 +:1033500001204968C0F80510002101700AF07CF8CE +:10336000002010BD40000300743E020010B5194655 +:10337000092303220A4809F00FFF401C002100F82E +:10338000011C08490A8882804A88C2808A88028093 +:10339000C9884180401E0AF05FF8002010BD00007F +:1033A000480003007976002010B519460523032252 +:1033B000084809F0F1FE002101700749B1F85221D7 +:1033C000A0F80120B1F85411A0F803100AF044F855 +:1033D000002010BD490003003075002010B51946CB +:1033E00009230322074809F0D7FE07490A68C0F8F5 +:1033F00001204968C0F80510002101700AF02CF87E +:10340000002010BD470003007C3E020010B51946A5 +:1034100002230322054809F0BFFE0021017010219C +:1034200041700AF019F8002010BD000043000300AD +:1034300010B50748D1E90021C0E900211C4600234E +:1034400003222146034807F0CEFE002010BD0000F5 +:10345000207600203E00030070B51D460C464FF458 +:10346000006009F0FBFD022807D0032009F0F6FDFB +:10347000022802D005F020F808B10C2305E00B4922 +:1034800020460DF0DCFE38B11223032229460848FD +:1034900007F0A9FE002070BD064821680023C0F88F +:1034A0002E11A188A0F83211EFE7000005480200B4 +:1034B00041000300307500207CB5064615460C46D9 +:1034C000104609F0CBFD0228207809D0012809D048 +:1034D0000C2242F20C012846F6F7C6FF00207CBD04 +:1034E0000028F5D10021ADF80210ADF804102078C5 +:1034F0008DF8000060788DF801002B461A46694669 +:103500003046FFF7E1FD7CBD1FB54B798DF80030EB +:103510008B798DF8013000238DF80230B1F801303D +:10352000ADF804300B788DF80330B1F80310ADF826 +:10353000061003218DF8081013466946FFF724FE94 +:1035400004B010BD10B508480A881C46A0F85221E6 +:103550004988A0F85411002303222146034807F0AC +:1035600042FE002010BD0000307500204A0003001C +:103570002DE9F04792460F464FF000093A4C0D7A7C +:10358000104609F06BFD06005CD0C846012E07D03E +:10359000162D61D01BDC042D42D0052D1BD125E05A +:1035A000162D0DD004DC042D07D0052D0CD104E020 +:1035B000172D05D0182D07D102E0C4F8308003E0A4 +:1035C00039462A48FFF714FAFFF762F83AE0172D58 +:1035D00042D0182D40D0C5B35FF0000040F6E11294 +:1035E00023A1F2F701FA206B48B32BE07868216B36 +:1035F000884201D1012000E0002040F6CD121CA13C +:10360000F2F7F2F9206B18B103F00CFBC4F830802C +:103610001B4803F08BFA80F0010040F6CF12DFE781 +:10362000206B18B103F0FEFAC4F830807989A08CC1 +:10363000814202D9081A1FFA80F9022E06D02046CC +:1036400000F028FF0020BDE8F0870AE04A46514616 +:103650002046FEF7A7FEC6E739460448FFF7C8F93B +:10366000C1E70120BAE7000040750020B11D01004C +:10367000626C6535305F6C6C636F6D2E63000000AB +:103680003D44010070B516460D46204C104609F029 +:10369000E5FC022838D1697AA06A04E0027A12F0C7 +:1036A0002E0F0FD000680A00A1F10101C9B2F5D1B7 +:1036B000287A052809D0162822D0172820D01828C3 +:1036C00022D11DE00020A085F2E76D7AA08C2A4669 +:1036D0002844A08431462046FEF7CAFEA06A08E0CE +:1036E000417921F020014171C17921F08001C1713E +:1036F00000682900A5F10105ADB2F1D1A06203E097 +:1037000029460348FFF774F9002070BD407500207A +:103710000D1D01000020704770B58EB004460020DA +:1037200016468DF830000D460CAB01AA204600F07D +:1037300072FB78B16078800701D5A08878B19DF8D8 +:103740003000009001AB32462946204600F07EFC56 +:10375000002802D12046FEF760FC0EB070BDE06D7F +:10376000418841F0080141809DF830000028F4D0E4 +:1037700001AA2946204600F031FBE9E72DE9FF5F69 +:1037800084B08468129D06469346A87C04F1040424 +:10379000000601D41E2701E04FF49677B5F8130018 +:1037A0000022C0F30C007843A0F58179287D4109FF +:1037B000FF200EF02DF900F1FE0AE078D6F80C801B +:1037C00020F07C006430E070607820F004006070CD +:1037D000287D4109207861F383002070207D20F04E +:1037E00001002075A87C617D60F305016175A16809 +:1037F000204668F31E01A16007F5967101F0F9FFFC +:10380000404601F0DBFF00220294CDE90026079933 +:103810001BEB09005141034B524602F007FF08B071 +:10382000BDE8F09F75B601002DE9F04F8C4C87B0D4 +:10383000A4F1100B20699BF81110071D002973D10A +:10384000002871D0032009F009FC0228F7D1206B71 +:103850000028F4D194F8480040F2712200EB4001B6 +:1038600004EB410504EBC0003635D0E91E1668882C +:103870005043C21711EB0008A08D5641401CA08593 +:10388000606901F09BFFE06901F0A3FF60694FF000 +:10389000000AA062A4F824A094F8480084F8490023 +:1038A000F8784FF0010920F07C001430F87087F8A8 +:1038B00022902978C9B1387820F00C00083020F027 +:1038C0000300801C38707878664A20F00400787015 +:1038D00094F83510788861F38900788010F47F7F40 +:1038E0002BD09BF8601101B320E0397821F00F0153 +:1038F000397069780129E6D1E17811B9A1780029F8 +:10390000E1D020F07C01584A87F822A01031F970EC +:103910001088401C1080C007D5D021F07C0087F8AB +:1039200022901430F870CEE77AE001219BF8610113 +:1039300000B9012041EA0020D06397F820004C4BE9 +:1039400040F0010087F82000A988388C61F34E0010 +:103950003884A888A0F101007885E0697860616901 +:10396000B86861F31E00B860387D40495FEAC07CEA +:1039700011D05FEA406C0ED497F815C00CF03F0CE4 +:10398000BCF1250F07D3D7F80CC08C4503D1D7F86D +:1039900010C09C450BD020F0400040F0010038756D +:1039A000787D20F03F0027307875F9603B61916A9F +:1039B000072060F30201916202F012FB642280187A +:1039C00041F10001B8EB0002CDE9040176EB010200 +:1039D00002D3B8EB000000E06420A98840F2712215 +:1039E000514394F8482004ABCDE9002ACDE902A365 +:1039F000EA31564600231F4A02F0EFFD206310B162 +:103A0000287820B110E0432007B0BDE8F08F687837 +:103A1000012809D1A07828B10020A070012803D086 +:103A20000020F1E70120F8E794F84820DDE90401DF +:103A300004EBC202C2E91E0194F84820494629EA73 +:103A4000020000EB400204EB420292F83620032A07 +:103A500002D284F8480001E084F84860A170DFE7F2 +:103A6000407500200000094018040020D6BE898E51 +:103A7000555555003D4401002DE9F0410546087AB1 +:103A80008EB00C4610F02E0F54D103A9204607F03B +:103A900080FF00284ED09DF80E00C1064AD5BDF823 +:103AA0001F10C90446D0000744D5D5F8880038B99E +:103AB000BDF81C00C0F30B00FEF7F0FF002839D062 +:103AC000BDF81C00FEF7A0FD060033D0E07B00F03F +:103AD00003012869001D02F0DBF86FF00902841869 +:103AE0009DF80D0041F1FF3580070DF10C080AD556 +:103AF000124F97F8580000EB400007EB400090F899 +:103B00004700012807D0304600F083FB0020CDE9B4 +:103B10000080029009E0304600F07BFB97F84400FB +:103B20000122CDF80080CDE9012022462B46304607 +:103B3000FEF7DEF90EB0BDE8F08100003075002020 +:103B4000014800F0A7BC00004075002010B51946E0 +:103B500007230322084809F01FFB0849D1F8342144 +:103B6000C0F80120B1F83811A0F80510002101704B +:103B700009F072FC002010BD3400030030750020F5 +:103B800010B5194608230322064809F005FB002159 +:103B90008180A0F80110C170C180017009F05CFC47 +:103BA000002010BD3300030010B519464123032245 +:103BB000074809F0F1FA044640220649401CF0F794 +:103BC00043FC00202070204609F046FC002010BD78 +:103BD00031000300343E020010B5194609230322C8 +:103BE000094809F0D9FA002141708170C170017152 +:103BF0006022427181714022C2710172017009F02C +:103C00002BFC002010BD00003200030010B5194647 +:103C10000A2303220D4809F0BFFA04460020207051 +:103C20000DF016FBC00701D00A2000E0082020712B +:103C3000607040F20110608040F2AC61E180208150 +:103C4000204609F009FC002010BD000030000300F0 +:103C50002DE9F041C46D804691F82B009188A41C99 +:103C6000C1F3071188423DD2091A1832CDB2871824 +:103C700036E0E07DC0F1E501CEB2B54234D904F1C1 +:103C80001801084432463946F0F7DEFBE520E075BE +:103C9000A81B3744C5B2FEF78BFE060013D01922CD +:103CA0003046D8F85C10F0F7CFFB208840F02000B9 +:103CB00020800C2007F0E4FF0028D8F85C0007D033 +:103CC00009F0CAFB07E04046BDE8F04100F0A1BAA8 +:103CD000183809F075F9B41C0020C8F85C607076DB +:103CE000002DC6D1BDE8F081C1B204F1180008442E +:103CF0002A463946F0F7A8FBE07D2844E075F1E755 +:103D000070B50546002410F8011BFEF74DFC002895 +:103D100001DA122070BD2A7822492AB1012A1DD069 +:103D2000FF2A37D012243AE008230CE0D1F85821BA +:103D300003EBC00602EBC0053244401C16682E603F +:103D400052686A6000B291F86021521E8242EDDC36 +:103D500091F86001401E81F860011EE06FF00703DA +:103D60000DE000BFD1F85C2103EBC00602EBC005FB +:103D70003244401E16682E6052686A6000B2012804 +:103D8000F0DA01F5AE714879401E487108680830D4 +:103D9000086002E0002081F86201FEF7EDF920469C +:103DA00070BD00003075002010B54FF6FF729042D4 +:103DB0000CD0094B002100BF03EB4104B4F85A407A +:103DC000944204D103EB4101A1F85A0010BD491CF3 +:103DD0001429F1D310BD00003075002070B51446D1 +:103DE00005460A46A0780021800701D504F10901A3 +:103DF0005079C0F38013C209E01CFEF703FE08B13E +:103E0000012070BD2DB1E86D183809F0D9F80020F7 +:103E1000E865002070BD2DE9F0410646087A1F468E +:103E20000D46144610F02E0F3AD1F06DC0B3114676 +:103E3000284607F0AEFD98B3F26D0120921C9178F0 +:103E4000FF290FD1A178C9070CD069794FEAD111A8 +:103E50009170D4F80310C2F80310B4F80710A2F858 +:103E600007103870A178890710D5118841F0040136 +:103E700011806979C1F380111174D4F80910C2F866 +:103E80001110B4F80D10A2F815103870A0780007C2 +:103E90000DD5D07AFF2806D0617CB0EB111F02D07F +:103EA0000020BDE8F081607C4FEA1010D072A0784D +:103EB000400602D594F827001073706B0079C0F3A8 +:103EC0008100401C90722846FEF7D6FB50730120FB +:103ED000E7E70000F0B55C4D07468BB095F8EC00C5 +:103EE0000E46E0B3B5F8F000C00440D5307A10F0CB +:103EF0002E0F3CD16946304607F04BFD002837D0E5 +:103F00009DF802000DF10904C10710D000218007BF +:103F100000D52146D5F8980048B97079C0F38013D0 +:103F2000C2090DF10300FEF76DFD002820D09DF8B9 +:103F30000200C00604D432466946384600F018F93B +:103F40009DF80200800707D57079C0F380112046E4 +:103F5000FEF7DEF800280BD0BDF8100000E006E008 +:103F6000FEF776FB050002D0E86D18B107E00020EF +:103F70000BB0F0BDFEF71CFDE8650028F8D0EC6D35 +:103F80009DF8010024F8020F97F8490000EB40006B +:103F900007EB400090F83600401C60723046FEF798 +:103FA0006BFB60739DF80200C0070BD070794FEA7D +:103FB000D010A070DDF80300C4F80300BDF80700BE +:103FC000A4F807009DF8020080070FD5208840F074 +:103FD000040020807079C0F380102074DDF809009F +:103FE000C4F81100BDF80D00A4F815004FF6FF70DD +:103FF00068809DF80200000714D5D7F8880038B90A +:10400000BDF81000C0F30B00FEF748FD0028AFD04C +:104010009DF811004FEA1010E072BDF81000C0F3D7 +:104020000B0068809DF80200400602D59DF827002D +:104030002073BDF81300C00401D0012098E7284682 +:1040400000F0E7F893E70000307500202DE9F04715 +:10405000C56D1646AD1CDDF82080AA781C46894641 +:104060000746FF2A2AD0A078800627D5D6F88810E0 +:1040700021B3087810F0010F12D02846FEF7DCFCBF +:10408000E0B14A4621463846FEF74AFBB0B1208AE5 +:10409000C0F30B00FFF788FEB4F81700E88134E0A6 +:1040A000887882420AD1C91CE81C0DF0C8F828B1F2 +:1040B000D6F88810E87A49788842E2D0B8F1000F43 +:1040C00006D0224649463846FFF788FE00281AD017 +:1040D0004A4621463846FFF7BBFDFA6DA07802F14B +:1040E0000202C1060AD4800603D5B4F81700D081B5 +:1040F00008E03146384600F00DF809E0B4F8130046 +:10410000C00402D00120BDE8F087384600F081F8F5 +:104110000020F8E770B50446C06D154600281ED093 +:104120000C2007F0ADFD0026D0B1032008F096FF6B +:10413000022815D1A878FF2802D1FEF7A1FC78B19A +:10414000288820F060002880084890F8530010B1BB +:104150006088FFF729FEE06D09F07EF9E66570BD25 +:10416000E06D183808F02CFFF8E7000030750020EB +:104170002DE9F04116460C460746F0F753F9FEF7D5 +:1041800043FA050043D0FEF713FCE86500283ED053 +:10419000821C6078108097F8490000EB400007EB24 +:1041A000400090F83600401C50723046FEF764FA2A +:1041B0005073A078C0070BD070794FEAD010907080 +:1041C000D4F80300C2F80300B4F80700A2F807000F +:1041D000A07880070FD5108840F004001080707917 +:1041E000C0F380101074D4F80900C2F81100B4F8BC +:1041F0000D00A2F81500A078400602D594F827001B +:10420000107339462846BDE8F041FFF783BFBDE88B +:10421000F08170B50446C06D00281BD0032008F063 +:104220001DFF022816D10C2007F02AFD002590B1B1 +:10423000E06D801C8178FF2904D1C17AFF2901D16A +:10424000C17D41B1018841F040010180E06D09F07C +:1042500003F9E56570BDE06D183808F0B1FEF8E7C8 +:1042600070B51D460C46FDF78FFA48B121780B4812 +:1042700041B1012908D0022904D0032906D103E065 +:104280000C2304E0002100E001210170002303223F +:104290002946034806F0A7FF002070BD30750020B6 +:1042A0002D00030010B51C46094AD1E90030C2E9CF +:1042B0000030A2F1DC01C0F3407081F8EC00002373 +:1042C00003222146034806F08EFF002010BD0000A7 +:1042D0000C7600202C00030010B506480A68026026 +:1042E00049684160002240F663410320F6F7BCF8BC +:1042F000002010BD1476002010B50446014610229F +:104300000848F0F7A1F8102204F110010648F0F770 +:104310009BF80449012010394860BDE81040102086 +:10432000F2F726BA100008400002084070B50446B3 +:10433000254821210646F0F7AEF8244D286840F0C4 +:10434000400028602078012821D06288D4F8161017 +:104350003046F0F779F81D48D4F80E1010221030CE +:10436000F0F772F81948D4F812100D223830F0F72F +:104370006BF80B202860A2886AB11448D4F81A1090 +:104380002830F0F761F8A08828B1012204E06088A5 +:1043900061784218DAE70022607808280FD0002000 +:1043A000A37842EA4000D9B240EA810040EAC32043 +:1043B00028622078012804D00220686070BD0120A6 +:1043C000EEE70420F9E70000000208400000084082 +:1043D000094A012182F8F810416918301E2909D0D4 +:1043E000202905D04FF4A47204A10020F1F7FCBAF3 +:1043F000FFF782BFFFF79ABF30750020626C655FE0 +:104400006C6C636F6D2E630070B50D460646F0F759 +:1044100019FB094C606840F4801060602946304602 +:1044200042F6C5429047606820F480106060BDE8A5 +:104430007040F0F711BB0000000007402DE9F84381 +:10444000124C0746154620691E4600F10408002854 +:1044500011D00F48A1680164E1684164A08D17285C +:104460000BD901F0F7F92A4633464046009701F090 +:1044700099FB0021A185BDE8F883EA202A1843F1C1 +:1044800000034046009701F08DFBF4E740750020E3 +:10449000000009400178002905D1012101700321A4 +:1044A000014801F0F1BD70474E00030010B5FF2236 +:1044B00028210748EFF7E8FF8C210648EFF7EBFFCC +:1044C0000448BDE810404FF482718C30EFF7E3BF31 +:1044D0008A75002094760020044881680907FCD57D +:1044E000016841F0200101607047000000000840B1 +:1044F00070B5034648790025C00998708869C3F8EB +:104500000300888BA3F80700012058729D72FF20DA +:10451000D8727F200C4618732046FEF7ADF858730A +:10452000DD81A088C0F30710801FC2B2DA75E52ACA +:1045300007D804F11E01BDE8704003F11800EFF741 +:1045400083BFDD7570BD000070B510460D46C2F327 +:104550000B2408F083FD022823D1134E012156F8C5 +:104560002400FCF7B1F8E0B956F82400807901285E +:1045700005D00C2201212046FCF750FA11E0E98811 +:104580002046FDF743F900280CD056F8240054309B +:1045900002218170E9880180D5F80110C160697934 +:1045A0000174002070BD0000287A00202DE9F04140 +:1045B000DFF88C80C2F30B2610460D4658F82640D3 +:1045C0004F8908F04BFD022837D158F8260000210A +:1045D000FCF77AF888BB58F826008079012804D0C7 +:1045E0000C213046FCF732FA27E069893046FDF7A6 +:1045F0000DF9002822D05734012024F8037C04F858 +:10460000010CD5F801102160D5F805106160697AB8 +:10461000217284F81801A888A18E573C88420CD1D9 +:10462000E888B4F88D10884207D12889B4F88F1033 +:10463000884202D1002084F86F010020BDE8F0819B +:10464000287A00202DE9F04117468846C2F30B2452 +:10465000104608F003FD324D002855F8246057D06D +:10466000012855D0B078FF2809D02A2214212046ED +:10467000FCF7D4F92A212046FDF774F848E005201C +:1046800007F0E8FBE8B355F82420D8F80130C2F869 +:104690007C31D8F80500C2F88001002255F82400CA +:1046A0001146FCF77FFF98B10C233A4605211D48BF +:1046B00008F072FD07210170448055F8242002F5AE +:1046C000C071D2F8842142608968816008F0C4FE1C +:1046D0001420B070092001F021F80246918821F4DD +:1046E000FF5101F590719180152100F80C1F55F8CC +:1046F000241001F58073D1F87411C0F80110996F7E +:1047000000E008E0C0F8051021461046FBF744FE23 +:104710000020BDE8F08114212046FCF7D5FEF7E724 +:10472000287A00202E00010070B510460D46C2F315 +:104730000B2408F093FC28B1012803D02946204619 +:10474000F9F7DEFE002070BD70B515460E46C2F3C7 +:104750000B24104608F082FC01002FD001292DD037 +:10476000174803290BD050F8241091F83A219308E8 +:104770000BD03D2200212046FAF76EF808E050F8F1 +:104780002400C089B0B1022070BD8B79012B04D008 +:104790001A212046FCF75AF910E042F0180281F87D +:1047A0003A2150F82400C08920B10321284608F09E +:1047B000D3FEE8E731462046FAF778F8002070BDCE +:1047C000287A002070B50E461446C2F30B25114618 +:1047D0000C4808F0C9FA204608F040FC78B10128DE +:1047E0000DD0094850F82500817941B9C1780329D5 +:1047F00005D1FF21C17031462846FAF7CDF80020D7 +:1048000070BD00003A000100287A002070B5104603 +:104810000D46C2F30B2408F021FC114850F8240087 +:104820008178FF290AD02A2208212046FCF7F6F8D1 +:104830002A212046FCF796FF022070BD81790129CC +:1048400006D00C2208212046FCF7E8F8002070BDB5 +:104850000821817029462046FAF730F9F6E7000072 +:10486000287A00202DE9F0411148C2F30B270D46AC +:1048700050F82760144611460E4808F075FA204695 +:1048800008F0ECFB80B101280ED0FF20F070D5F8C5 +:104890000100C6F83201D5F80500C6F836016A1CD9 +:1048A00039460020FBF796FF0020BDE8F0810000AC +:1048B000287A00203A0001002DE9F0411648C2F3A1 +:1048C0000724154650F824600F46104608F0C6FB32 +:1048D00020B1012802D002281CD102E00020BDE84E +:1048E000F081022000F01AFF020013D01E21117384 +:1048F0000A490023097851739088214620F4FF501B +:10490000403090802846FCF729FA79783046F9F74C +:1049100043FAE3E70220E2E7287A0020F4010020CE +:1049200070B50D460E49C2F30720144651F82060B9 +:10493000104608F093FB28B1012803D0022803D0C9 +:10494000022070BD002070BD2146064808F00CFA18 +:1049500069783046F9F720FA034881780170F1E769 +:10496000287A00203A000100F40100202DE9F041EE +:104970002448C2F30725174650F825400E46104636 +:1049800008F06CFBF8B1012837D0022838D1E07963 +:10499000800713D5A069007900F0030002280DD02C +:1049A000D4F8A00101220178707883099A4011425D +:1049B00004D000F01F00801E132805D320221A21E6 +:1049C0002846FCF72BF818E0032000F0A7FE0200B1 +:1049D00016D01B2111739079002340F001009071D3 +:1049E0007078D0729088294620F4FF502030908053 +:1049F0001A20A0703846FCF7B1F90020BDE8F0811C +:104A00000220FBE7287A002070B50C49C2F307208A +:104A1000144651F82050104608F020FB28B1012818 +:104A200003D0022803D0022070BD002070BDFF20FB +:104A3000E8702146024808F097F9F6E7287A002046 +:104A40003A00010070B50C461049C2F30726104623 +:104A500051F8265008F002FB022815D1A87978B940 +:104A6000102007F0F7F958B1607868B1A0780228F3 +:104A70000AD3252808D8B4F80100A5F8490003E0B6 +:104A800019213046FCF720FD002070BD287A002057 +:104A90002DE9F04F1046C2F3072A4FF0000B85B006 +:104AA000614A8DF810B01E460C465D4652F82A70D9 +:104AB000D94608F0D3FA00287CD001287AD0022801 +:104AC00025D197F8A401002822D0607E04F11B01B3 +:104AD000C0F3001007F036FAA0F57F40FF3869D127 +:104AE000172007F0CDF838B11423324605214F487E +:104AF00008F052FB05000AD0B4F81500B7F8921080 +:104B0000401AB0F5804F06DDA0F5803008E00220A5 +:104B100005B0BDE8F08F10F5804F01DA00F5803068 +:104B2000B96F4143D7E91A20561840EBE1780029C4 +:104B300009DAB4F8050040F2E2425043494291FBE1 +:104B4000F0F01FFA80F901F04BFA831B71EB0801BA +:104B500017D2311AB4F8050040F2E24200FB02F22B +:104B600091FBF2F100290CDD40F2E2424A4350434E +:104B7000361A68EBE078B4F81300A0EB0100A4F853 +:104B80001300A07E04ABB0FA80F0C0F11F00A07645 +:104B900007F5D271CDE90039CDE9021B3246434613 +:104BA000204607F003FF064697F8A40102280ED01E +:104BB000002100E030E0304607F030FD65B31820FA +:104BC0002870A6F57F40FF3803D1012002E00121C3 +:104BD000EFE700206870A5F802A034F8011FA98053 +:104BE000EE80217E01F00F012972217EC1F30011B8 +:104BF0006972D4F81A10C5F80A10E18BE981617E58 +:104C0000491C2974A188A5F81110217E4909E9746D +:104C100018B1284608F020FC03E0054850F82600AB +:104C20008566002074E70000287A00203400010027 +:104C3000EC7A00202DE9F8430E462F49C2F30728ED +:104C4000914651F82850484608F008FAA8B30128C0 +:104C500033D0022834D116212846FBF735FD60BB3E +:104C6000052000F05BFD04002AD0A879002804F19B +:104C70000C0027D0A18821F4FF516031A1801721B9 +:104C80000170B17895F8D12011404170727895F893 +:104C9000D2100A40827041782846FCF783FC162027 +:104CA000A8700023224641464846FCF757F84FF4C7 +:104CB0007A624946114808F099FC0020BDE8F88363 +:104CC0000220FBE707460E4823466A4690F8460155 +:104CD0008DF801008DF80000711C2846F8F790FD52 +:104CE000BA7879782846FCF75DFC002322464146D5 +:104CF0004846FCF733F8E0E7287A00203A00010044 +:104D0000307500202DE9F0412548C2F307261746EB +:104D100050F826408846104608F0A0F960B10128F6 +:104D20000AD0022802D00220BDE8F081A07928B183 +:104D300018213046FCF7C8FB0020F5E73946194832 +:104D400008F012F8E178FF201629E07004D02A213B +:104D50003046FCF707FDEFE7052000F0DFFC05001B +:104D600018D0034604F1CF0208F101012046F8F7FC +:104D700047FD00232A4631463846FBF7EFFF94F8FB +:104D800056000028D8D10023324605213846FCF7CA +:104D900037F8D1E707213046FCF7E4FCC3E7000011 +:104DA000287A00203A0001002DE9F0412548C2F39D +:104DB0000726174650F826400D46104608F04EF9D3 +:104DC00090B1012810D0022802D00220BDE8F08165 +:104DD00016212046FBF778FC30B9A079012805D0D0 +:104DE00018213046FCF770FB0020EFE7FF20E07051 +:104DF0003946154807F0B8FF687808B9A878A8B10F +:104E0000B5F803103046FCF701FD0028ECD015F88A +:104E1000012F20466978FCF7C5FB03205434A070AD +:104E2000688820802888A4F81100DDE760790028D0 +:104E3000DAD0002060710346324605213846FBF780 +:104E4000DFFFD1E7287A00203A0001002DE9F04188 +:104E50004B4EC2F30B2410460D4656F8247008F052 +:104E6000FDF8002833D0012831D0022802D00220DA +:104E7000BDE8F0810F213846FBF726FC00287DD1E4 +:104E8000012006F0E7FF18B3052006F0F9FE20B375 +:104E9000B5F80500B0F5FA7F14D2B5F80120062A5E +:104EA00010D3B5F803004FF4486398420AD8B5F818 +:104EB0000710994206D80A2904D3697A814201D29F +:104EC00090420DD220461E220F21FBF7A7FD55E090 +:104ED00020460F21FCF7F8FA50E020461A22F3E7AB +:104EE00056F824001822A8302946EFF7ADFA56F8F4 +:104EF0002400012290F8B11009B980F8B12056F8C9 +:104F0000241040F2E24CBB6F91F8B10000FB0CF0B2 +:104F1000B3FBF0F0B5F8013080B2834228D8B5F881 +:104F20000330834224D3B5F80500B7F88D3098429A +:104F30001ED1B5F80700B7F88F30984218D188799C +:104F400088B101F1A80510202870B1F8AB1056F80F +:104F500024002A46FCF7E2FA2046002318222946BC +:104F6000FBF71CFF0AE0E0B20022FBF74DFE05E074 +:104F700087F86F2120462946FBF79AFD002077E746 +:104F8000287A00202DE9F04115460E46C2F30B2485 +:104F9000104608F063F807462946274807F0E4FE64 +:104FA000264D55F824008179012942D03FB3012FC5 +:104FB0003FD0022F02D00220BDE8F081FF21C17056 +:104FC000B6F80500B0F5FA7F14D2B6F8010006284D +:104FD00010D3B6F803104FF4486399420AD8B6F8D4 +:104FE00007209A4206D80A2A04D3727A8A4201D24A +:104FF000814205D220461E221021FBF70FFD18E04A +:1050000055F824001822A8303146EFF71DFA55F85C +:105010002400012690F8B11009B980F8B16055F864 +:105020002410E0B20022FBF7EFFD55F8240080F8D1 +:105030006E610020C0E700003A000100287A0020DD +:1050400070B51546C2F30B24104608F007F8E8B116 +:1050500001281BD0022819D1042006F0FBFEB8B1AC +:10506000012000F05BFB020017D013211173908820 +:10507000002320F4FF502030908021462846FBF783 +:105080006DFE0749122051F824108870002070BD71 +:1050900012212046FCF718FAF8E7022070BD000044 +:1050A000287A002070B50D48C2F30B26144650F83C +:1050B000265011460A4807F057FE204607F0CEFF5B +:1050C000022809D1E878122804D02A213046FCF7BA +:1050D00049FB01E0FF20E870002070BD287A002025 +:1050E0003A00010070B51546C2F30B24104607F0D4 +:1050F000B5FF01001AD0012918D0164803290ED097 +:1051000050F82410CA78FF2A01D00A7982B18A792E +:10511000012A0FD01A212046FBF798FC06E050F830 +:105120002400C08920B92046FBF762F8002070BD3A +:10513000022070BD91F83A2142F0180281F83A211C +:1051400050F82400C0890028EDD00321284608F03B +:1051500003FAEDE7287A002070B51446C2F30B2558 +:105160001146094807F000FE204607F077FF48B1D6 +:10517000012807D00549FF2051F82510C87028469E +:10518000FBF77EF8002070BD3A000100287A00206D +:105190002DE9F8430C4680461F461546C2F30B2600 +:1051A0001146164807F0E0FD284607F057FFB8B152 +:1051B000012815D01248617850F82600C278914233 +:1051C00011D003290CD1817951B990F83A114907CE +:1051D00006D4002180F83A11A2783046F9F73CFB5A +:1051E0000020BDE8F883A0788DF801003B462A46F0 +:1051F0006946404600F006F8F3E700003A00010077 +:10520000287A00202DE9F0410C461646C2F30B2502 +:1052100011462C4807F0A8FD304607F01FFF70B17B +:1052200001280CD0284F57F82500C1780A291DD035 +:1052300008DC41B3032919D0052909D116E0002063 +:10524000BDE8F0810F291CD0162929D01A2932D0A7 +:1052500090F83A01C00604D5627800212846F9F793 +:10526000FBFA57F82510FF20C870E8E7817900297C +:10527000F7D190F83A114907F3D4002180F83A1198 +:10528000EAE7817931B100F1880260782946F8F7C0 +:10529000E3FFE6E7EAB201461046FBF7F9FCE0E778 +:1052A00000221146FCF77EF96378EAB20521304608 +:1052B000FBF7A6FDD5E7627831462846FBF738FDB7 +:1052C000CFE700003A000100287A002070B51046B0 +:1052D0000E46C2F30B2407F0C1FE40B3012835D0BF +:1052E0001B4D55F8240090F83A11090701D502200A +:1052F00070BD8178FF2909D02A2208212046FBF7BA +:105300008DFB2A212046FCF72DFAF0E7807910B1B9 +:1053100001281BD116E0032006F09CFD40B155F892 +:1053200024100820887031462046F9F7C7FB0DE0AD +:10533000721C21461A20FBF74DFA0E212046FCF77D +:10534000C3F803E00C212046FBF780FB002070BD72 +:10535000287A002070B51546C2F30B241146154873 +:1053600007F002FD284607F079FE00B301281ED0A1 +:10537000114951F824008369002050331A791860CC +:1053800060F306021A7151F82420936958331A7990 +:10539000186060F306021A7151F82430C3E96C00FA +:1053A00051F82410052088702046FBF759FF002093 +:1053B00070BD00003A000100287A00202DE9F0417C +:1053C0001646C2F30B24104607F048FE31461D482E +:1053D00007F0CAFC304607F041FE48B1012807D06B +:1053E000194DFF2755F824008179012903D006E0E3 +:1053F0000020BDE8F081C7702046FBF731FF55F86B +:105400002400877055F8241091F83A0120F0180014 +:1054100081F83A0155F82410420708D520F004001D +:1054200081F83A0100212046F9F72CFA04E0002225 +:1054300001212046F9F710FA0221304608F08CF8D5 +:10544000D6E700003A000100287A00202DE9F0415B +:105450001646C2F30B251146374807F085FC304647 +:1054600007F0FCFD88B101280FD0344C002754F818 +:105470002520D0780A2812D00ADCC8B303280ED021 +:1054800005280CD0082851D139E00020BDE8F08172 +:105490000E2834D00F281AD01A2847D13BE092F8B2 +:1054A000320120F0010082F8320154F8250090F812 +:1054B0003A11490706D480F83A711A220021284689 +:1054C000F9F7CAF90221304608F046F82EE092F8C2 +:1054D000320120F0020082F8320154F82510887958 +:1054E00038B101F1880229461A20F8F7B5FE1DE00F +:1054F00003E0E8B2FBF7CCFB18E08832F3E7507921 +:10550000A0B102F5997229461A20FBF763F954F805 +:10551000250047710AE092F83401314620F004007A +:1055200082F8340100222846FBF702FC54F82510CB +:10553000FF20C870A9E700003A000100287A002087 +:105540002DE9F04117460E46C2F30B24104607F032 +:1055500085FD022802D0032838D109E01C4D55F8FA +:10556000240090F8DB1049B990F83A01000702D501 +:105570000220BDE8F0812046FCF762F955F82400CE +:1055800090F8DA1011BB717880F8D41055F8241017 +:105590007088A1F8D60055F82410B088A1F8D8007A +:1055A00055F82410012081F8DA0055F82400C0785D +:1055B0000C280BD13946074807F0D6FB55F82410C4 +:1055C000FF20C87021460020FBF724F90020D0E717 +:1055D000287A00203A00010070B50D460646EFF724 +:1055E00031FA0C48F1F718FB0446EFF735FA7CB1B5 +:1055F0006667E567208C20F4F8604030208494F8DA +:10560000210020F0F800603084F82100204670BDB1 +:10561000002070BD3878002002214FF4027008F09D +:105620006DB82DE9F041044616460D461F46184652 +:10563000B047002810D0002101602060606006E0C3 +:105640003846B047002807D02168016020606D1EF1 +:105650002D042D0CF4D10120BDE8F08110B5FB28FC +:1056600001D8001D80B20221183008F047F8002848 +:1056700006D000214160C27942F04002C27141610E +:1056800010BD000070B516460D46044600F056F9F0 +:105690000DB1012000E000204FF4C0720AA1F0F724 +:1056A000A3F933460D4A29462046FFF7BAFF18B141 +:1056B000D4E90012116070BD206810B1204600F0DE +:1056C0003DF9002070BD0000626C6535305F6C6C88 +:1056D000645F656370742E63000000005D56010016 +:1056E0002DE9F04106460F460846FFF7B7FF0500D3 +:1056F0000FD0761E36040446360C0CD03846FFF721 +:10570000ADFF08B12060F4E72560284600F036F9C7 +:105710000020BDE8F08105602846FAE710B5044690 +:10572000FB2801D8041DA4B2022104F10C0007F0EB +:10573000E5FF002802D044720021416010BD000046 +:1057400070B516460C46054600F046F90CB101202E +:1057500000E0002040F2711209A1F0F745F933464C +:105760000C4A21462846FFF75CFF08B1204670BD71 +:10577000286810B1284600F02FF9002070BD000005 +:10578000626C6535305F6C6C645F656370742E634A +:10579000000000001D570100417921F020014171F6 +:1057A000C17921F08001C1717047417921F0200158 +:1057B0004171C17921F08001C171704770B5044613 +:1057C000050005D02046FFF7E7FF2468AC42F9D179 +:1057D00070BD02000CD0417921F080014171016857 +:1057E000814205D0002903D0914201D00846F2E75A +:1057F000704730B5027890F82030C2F3810440F24F +:105800007122B1FBF2F24FF41C75022C10D0A942A8 +:1058100005D343F0010180F82010921C11E023F021 +:10582000010280F82020028C61F34E02028430BD18 +:1058300043F0010380F82030A94201D3D21C00E0DC +:105840000322018C62F34E01018430BD0048704791 +:105850003C0C0A4010B5144CD4F80C111348084401 +:1058600021B1826F90F8821001F070FA00F018FCFC +:105870000020C4F80C01206988B1002040F25922B0 +:105880000BA1F0F7B1F8D4F80C0150B15FF00000B3 +:10589000BDE8104040F25A2205A1F0F7A5B801205A +:1058A000ECE70120F4E7000000000940FCFFFF3FA7 +:1058B000626C6535305F6C6C645F656370742E6319 +:1058C0000000000070B5050001D0012000E00020BC +:1058D000B3220EA1F0F788F8EFF7B4F81048046887 +:1058E00009E0AC4201D0012000E00020B92207A16C +:1058F000F0F77AF82468002CF3D1002229460848F2 +:10590000F1F73CF9BDE87040EFF7A6B8626C653579 +:10591000305F6C6C645F656370742E630000000020 +:105920003878002010B504460068002803D0FFF73F +:10593000C9FF0020206010BD07F086BA10B50446EC +:105940000122D4E9000100F005F82046BDE810402E +:10595000F1F752B970B515460C4600280DD003E09A +:10596000066800F01BF83046A042F9D1002D04D0A3 +:105970002046BDE8704000F011B870BD03680146D4 +:1059800001221846FFF7E6BF10B50446006800285C +:1059900003D0FFF7F3FF0020206010BD10B5040016 +:1059A00001D0012000E000204FF4907205A1F0F733 +:1059B0001BF8606907F048FA2046BDE8104007F080 +:1059C00043BA0000626C6535305F6C6C645F656380 +:1059D00070742E630000000010B504460122D4E963 +:1059E000000100F005F82046BDE81040F1F704B9C9 +:1059F00070B515460C4600280DD003E0066800F08F +:105A00000BF83046A042F9D1002D04D02046BDE865 +:105A1000704000F001B870BD10B5040001D0012045 +:105A200000E000204FF48D720349EFF7DDFF2046C0 +:105A3000BDE8104007F008BAB43E02002DE9F0417D +:105A4000204E0BF005FC800600D4FEE71E48002126 +:105A50001E4C016041608160C16040F2BC71204613 +:105A6000EEF719FD1A4D2C605FF00004286804EB76 +:105A7000441700EB870100221348F1F77FF82868EC +:105A8000641C00EB8700A4B241790F2C21F01001B7 +:105A900041F020014171C17B41F08001C173E5D328 +:105AA0004CF6691206F63C41022007F089FB0949D1 +:105AB000052007F001FDBDE8F0410749002007F08F +:105AC000FBBC000000000A403878002000040A40B7 +:105AD0001C040020015F01007D5F01000448016992 +:105AE000D0F80C0150EAC17000D0012070470000CE +:105AF0000000094010B50020FFF710FE040001D09F +:105B0000012000E000204FF4CF720EA1EFF76CFFF0 +:105B1000A08820F4FF50A0802079617920F0030054 +:105B200021F08001401C41F02001617120F0100043 +:105B30002071A07920F00100A07100202060204693 +:105B400010BD0000626C6535305F6C6C645F65632E +:105B500070742E630000000010B50446C07940F058 +:105B60004000E0716069002803D007F06DF9002063 +:105B7000606110BD10B50446406920B9FFF74CFDC7 +:105B80006061002803D0E07920F04000E07110BD92 +:105B900010B5EEF757FFFFF75DFEBDE81040EEF7DA +:105BA0005BBF00002DE9FF41324F944605460A9A3B +:105BB00038691946D7F80C312C1F00F0010E2E4E13 +:105BC0005EEA030E13D0C00702D03089401C30813A +:105BD000E878C0F38401204601F0B8F83089012844 +:105BE00001D9FFF737FE002004B0BDE8F0810020A6 +:105BF0003081E878C0F38400A4F882001F48A267CF +:105C0000426842F40012426003A8009002AB01AA6D +:105C100060460BF0D9FF07F580770298786001980D +:105C2000B860FD60BDF80C00E8840120386094F88D +:105C3000821088401249084201D0124801E0114800 +:105C4000401E11490860B4F882007081688DB081EF +:105C5000002007F053FC0D480078C00707D034F847 +:105C6000740FC0F30722A17B00200BF067FD2846CC +:105C7000BAE7000000000940387800200000074023 +:105C80005000000391F225001C0409401C00002074 +:105C9000F0B5C36D40F27127A3FB075CB0F862203A +:105CA000002602FB07C203FB0622B0F86030007832 +:105CB000C3F51C73DC17EB186241C0F381000228A6 +:105CC00002D06FF0370002E0012904D00348181811 +:105CD00042F1FF31F0BD0148B030F8E77CFDFFFF35 +:105CE0004CF69942904200D31046074A1378074A6F +:105CF00032F8133032F81110194448435221484306 +:105D0000000C103080B27047F4010020943E020075 +:105D100010B5094CD4F80C0100280BD04FF002103C +:105D200001F038F80020C4F80C010448416821F45F +:105D30000011416010BD0000000009400000074054 +:105D4000054A08B5116C526CADF800200160BDF831 +:105D50000010818008BD00000000094070B50A4AAB +:105D600051684FF41C701268A0EB112040F27125AD +:105D7000A2FB0536C9B201FB0561002402FB041138 +:105D80001818614170BD00004403094010B500229D +:105D90000649022007F024F84FF405710448EEF795 +:105DA0007AFBBDE8104000F005B80000A43E0200F8 +:105DB000F801002010B5484C0120216860F3000173 +:105DC0002160F1F78DF82168002060F39A6121606D +:105DD000216860F3DB61216020684049084040F49D +:105DE00060202060206D40F4A6702065206D40F09A +:105DF000C04020652168012060F304112160216802 +:105E000060F341012160206835490843206035482E +:105E1000A0673548E06735494FF011300860091D2B +:105E20000860091D0860091D0860091D0860002040 +:105E30002064606C6FF30F0060642168002060F3E1 +:105E400049212160A16A072060F30201A1620020BC +:105E5000C4F80C0120482649083018220A6001685D +:105E600021F0C001403101602248D4F8001290F8BE +:105E7000FC026FF3080141F480710843C4F800028A +:105E80001D48816821F4002181601C4C216821F0AB +:105E90001C0141F008012160216821F4E0712160BA +:105EA000216821F47F0141F4B8112160216821F0BB +:105EB0007F412160816841F40021816007F016FE76 +:105EC0000120211D0860206840F002002060206849 +:105ED0008006FCD510BD000000000940FFFF00FC5B +:105EE000040000804F002F01565218208005094001 +:105EF00060010440307500200000074000040940A4 +:105F000070B5114D0520B5F9164206F01DFF14E0DD +:105F100004EB440005EBC0061023D6E90101022280 +:105F200007F03AF90C364ECE80E84E0007F094FAAE +:105F3000641C24B2162C00D30024B5F91402A0422C +:105F4000E6D1A5F8164270BDF40100200A4800BF52 +:105F5000D0F81413C907FBD1D0F8381311F0010F92 +:105F6000FAD142680A2161F303024260416811F0EC +:105F70000F0FFBD1704700000000094010B5002052 +:105F800006F0E2FE0C490D484A89082A0FD0092A7A +:105F90000DD00A2A0BD08A894FF4C8610A328A428E +:105FA00000D80A46BDE81040032107F03BBBBDE81E +:105FB0001040032106F0D8BE387800204F000300BF +:105FC00042F21C110160014870470000D8DB0A4012 +:105FD00000487047A8D50A4000487047BC0B0A40EB +:105FE00070B5EEF72FFD10480121C0F8381300BF3F +:105FF000D0F8381311F0010FFAD100F54B70466854 +:1060000005688068C0F51C74EEF726FD40F2712229 +:10601000A5FB0203002106FB023205FB012100194A +:1060200041F1000170BD00000000094070B5EEF7BD +:1060300009FD0F4CB4F9141201EB410004EBC0064A +:10604000491C361D0DB2162D00D30025B4F91602D9 +:10605000A84201D0012000E0002040F2B31205A1C7 +:10606000EFF7C2FCA4F81452EEF7F6FC304670BD10 +:10607000F4010020626C6535305F6C6C645F6563B1 +:1060800070742E630000000070B50D460446FFF7E3 +:10609000CDFFC0E90045BDE87040052007F02EBAED +:1060A0002DE9F047204CD4F840A0D4F844900025C6 +:1060B000D4F81403C007FBD1D4F8380310F0010F53 +:1060C000FAD1EEF7BFFC276DB80404D5FFF746FE02 +:1060D0000646884601256168012060F3041161606D +:1060E0006068C0F300100028FAD1FFF763FE206D4E +:1060F00038432065C4F840A0C4F84490FCF73CF84D +:10610000EEF7AAFC3DB1EEF79DFC3046414600F0AB +:10611000DFFBEEF7A1FC780504D5BDE8F0470320CE +:1061200007F0ECB9BDE8F0870000094070B50E46F5 +:10613000040000D00120DA2209A1EFF755FC00F09D +:106140002BF905460020E86232462946204600F039 +:1061500057FC0028284602D100F0F4FB002070BD57 +:10616000626C6535305F6C6C645F7363686C2E6362 +:10617000000000002DE9F0470468DDF820A0164675 +:1061800012EB0A081D46074643F1000908B1012039 +:1061900000E000204FF48E7231A1EFF725FCD7E923 +:1061A0000401301A75EB010030D30CE0D7E904018B +:1061B000301A75EB010004D3D4E90410891BA841FF +:1061C00004D227462468002CF0D13EE0B4B3D4E9D1 +:1061D0000201B0EB080271EB090236D2227FD3072D +:1061E00017D0920712D54FF4FA72821841F10000CD +:1061F000B11A75EB000009D36FF0F900311845F1C1 +:10620000FF30C4E90410274624681EE00020BDE8E2 +:10621000F087B8EB00004FF0FA01421821463846EB +:1062200000F080F80028F2D03C68D4E90230B3EBEB +:10623000080270EB090002D3012001E005E0002014 +:1062400040F2451206A1EFF7CFFB00F0A5F800F1F0 +:106250000C018660A1E8200738600460D7E70000E1 +:10626000626C6535305F6C6C645F7363686C2E6361 +:10627000000000002DE9F05F1546DDE90A8B076894 +:10628000D8F800101C4611EB050A064643F1000938 +:1062900008B1012000E00020F1221DA1EFF7A4FBCE +:1062A000D6E90401281A74EB010021D318E000BFDD +:1062B000D6E90401281A74EB01000FD3D7E90201D3 +:1062C000421BA1410AD3401B584507D3D8F8001000 +:1062D000814200D20846C8F8000003E03E463F680D +:1062E000002FE5D1D6E90401281A74EB010002D28F +:1062F0000020BDE8F09F00F04FF8C0E90254C0E96B +:1063000004A9D8F80010816130600760F1E700004F +:10631000626C6535305F6C6C645F7363686C2E63B0 +:10632000000000002DE9FC41086816460C46A8B1A3 +:1063300081682269891AB14210D2027FD20706D041 +:10634000A26902B02146BDE8F04100F059BB721AC3 +:1063500001462046FFF7E6FF002812D0D4E90205E7 +:1063600000278619D4F82CC07D41BCF1000F0AD05B +:10637000CDE90065D4E9082300216068E04710B149 +:106380000020BDE8FC81C4E90265A06980196F4165 +:10639000C4E904070120F4E770B5074C206C18B974 +:1063A000606C206400206064256C0DB900F03CFD39 +:1063B00028682064284670BD487800202DE9FE4FEB +:1063C00004460CA89846E0C891468A46EEF73AFB88 +:1063D00000F0C0FA2146FFF7A9FECDE90057434679 +:1063E0004A465146029600F0D9FB0446EEF734FBCC +:1063F00014B16068BDE8FE8F0020FBE72DE9FE4F79 +:1064000090461C4681460025EEF71CFB00F0A2FAE0 +:1064100006460768D0E90420B2EB0801A04134D257 +:1064200018EB090B44F1000A01E03E463F68FFB15A +:10643000D7E90220B2EB0801A041F6D3D6E9041255 +:10644000B8EB010074EB02001FD3D7E90231B3EBC4 +:106450000B0271EB0A0120D3FFF79EFFC0E9034B4B +:106460000546C0F80880C5E905A93060076014E05A +:10647000FFF792FFC0E9034B0546C0F80880C5E965 +:1064800005A900213060016007E0DDE90C233046FA +:10649000CDF8009000F056F80546DDE91101012223 +:1064A0008DE807000EAC28460ECC00F077FB0446C2 +:1064B000EEF7D2FA14B16068BDE8FE8F0020FBE76A +:1064C0002DE9F0471546DDF820A00746066812EBD7 +:1064D0000A0243F10000FA2112EB010840F1000921 +:1064E000D7E904101C46491BA04104D35146384645 +:1064F00024E03746366886B1D6E90410491BA0412E +:10650000F7D3D7E90410491BA04115D2D6E90223DD +:10651000B8EB020179EB03000ED2FFF73DFFFA2141 +:106520006A1800F10C0344F100018260A3E802073D +:1065300038600660BDE8F08751463046BDE8F04758 +:10654000FFF7F4BD2DE9F0470446089E0568D4E93D +:106550000401101A4FF0000873EB01003BD315E063 +:10656000D4E904C71CEB060C47EB0807B1EB0C01A0 +:10657000E146B84108D3FFF70FFFD4E9041200F158 +:106580000803A3E8060220E02C462D682DB1D5E9CA +:1065900002108F1A70EB0307E2D3D4E90407111A33 +:1065A000BB4118D3801947EB080780462DB1D5E9C8 +:1065B0000212401A77EB02000DD2FFF7EDFED4E98C +:1065C000041200F10803A3E80601C0E90576206083 +:1065D0000560BDE8F0870020FBE72DE9FF4F83B0A1 +:1065E000054610A80E46B0E8000FEEF72BFAFFF7AD +:1065F000F7FC04460F4600F0ADF9621947F10003BD +:106600000096FFF75DFFCDE9009BCDF808A0DDE91E +:106610000512434600F0C2FA0446EEF71DFA1CB11B +:10662000606807B0BDE8F08F0020FAE72DE9F04779 +:1066300086B004460EA89A46B0E8800316460D467A +:10664000EEF700FA00F086F922462B460096FFF797 +:1066500091FD012104AACDF80090CDE90121434626 +:106660003A46514600F09AFA0446EEF7F5F91CB1A5 +:10667000606806B0BDE8F0870020FAE72DE9F04F2A +:1066800087B0044610A81F46B0E8000F16460D4616 +:10669000EEF7D8F900F05EF922462B46CDE9006707 +:1066A000FFF7E8FD032204ABCDF800B0CDE90132DD +:1066B00053464A46414600F071FA0446EEF7CCF9DB +:1066C0001CB1606807B0BDE8F08F0020FAE72DE943 +:1066D000FE4F9A46DDE90F87DDE90DB916460446FF +:1066E0000D46EEF7AFF900F035F922462B4600963D +:1066F00097B1FFF727FF0123CDF80090CDE9018383 +:106700005B4651460C9A00F049FA0446EEF7A4F9AC +:106710002CB16068BDE8FE8FFFF7D2FEEBE70020EA +:10672000F8E72DE9FF5F88B08246DDE91E54DDE918 +:106730001C76002083468146DDF86C80EEF782F9F6 +:1067400004F108002099059079B30120CDF800806C +:10675000CDE90340CDE90176DDE9091250461A9BE7 +:10676000FFF7B5FF2860002864D0D4E90013189A19 +:1067700050468A18924500D31046DDF814C0CDE982 +:106780000476CDF818C01A9E4FF0000ACDE9000A31 +:10679000CDF80C800296DDE916208A1843410A984C +:1067A000FFF72CFE6860F0B33AE0FFE70020CDF879 +:1067B0000080CDE90340CDE90176DDE909125046BC +:1067C0001A9BFFF784FF286090B90020CDF8008065 +:1067D000CDE90340CDE90176DDE9183209991AEBDC +:1067E000030051411A9B0A9AFFF771FF286008B312 +:1067F0000598CDE90560CDE903871A980290D4E9A0 +:106800000003DDE9182182185941CDE90021DDE9B5 +:10681000162182184B410A98FFF7F0FD686080B19D +:10682000D4E9023000E013E0D4E90012B3EB010B2D +:1068300060EB0209EEF710F90CB058464946BDE886 +:10684000F09F0021286800F00BF800202860F1E795 +:106850000021286800F004F8C5F800A0EAE700006D +:1068600070B50E46050008D0EEF7ECF8174A106830 +:106870004068A84203D1012302E0012070BD00233B +:10688000124CE06B4168A94208D116B10021E163C6 +:1068900009E0EEF7E1F8002070BD02469AB11068F9 +:1068A0004168A942F9D10168116000F04BF8B4F8D1 +:1068B0004800401EA4F848002BB1FFF791FBC4E943 +:1068C000040100F0EDF8EEF7C7F8D6E748780020AD +:1068D0002DE9FF4105460C46FFF782FB07460E46B1 +:1068E000002008F099FA2820391846F10000691AAA +:1068F00074EB000004D22846214600F0C3F918E0EA +:1069000003A8009002AB01AA284621460BF05CF9CF +:106910000A480299C0F84413BDF80C10019AC1F559 +:106920001C7142EA0121C0F84813C16D41F40051C5 +:10693000C165012008F070FABDE8FF810000094040 +:106940000020704702494A6C0260486470470000AA +:106950004878002010B5094CE06B00280BD1FFF7F8 +:106960003FFB2268C4E9040122B1D2E90234C01A13 +:10697000A14101D2014810BD104610BD4878002049 +:1069800010B500F009F8010002D0D1E9020110BDF4 +:106990000020014610BD000070B5050004D0EEF7E0 +:1069A00051F80748046805E0002070BD6068A842FF +:1069B00002D02468002CF9D1EEF74EF8204670BDC5 +:1069C0004878002010B5FFF703FB044650210B4820 +:1069D000EDF761FD4FF4C6612046EDF75CFD074819 +:1069E0000021046401EB410004EB0010491C00F19C +:1069F000300289B202601F29F4D910BD4878002006 +:106A00002DE9FC41076814460D46060001D001201F +:106A100000E000207F221DA1EEF7E6FF4FF0000806 +:106A200004F5FA7001E03E463F685FB1D7E902C164 +:106A3000D6E90423BCEB020261EB0301121A71EBED +:106A40000801F0D3D5F82CC0BCF1000F0CD0D6E96A +:106A50000401CDE90001D5E9082300216868E04779 +:106A600010B10020BDE8FC81D6E90410FA22891893 +:106A700040F10000C5E90210091940EB0800AC61C3 +:106A8000C5E90410356001202F60EBE7626C6535C5 +:106A9000305F6C6C645F7363686C2E630000000091 +:106AA0002DE9FC41204D06460F4695F84A00002886 +:106AB00038D108F0B1F9E86B38BB23E0D4E9021013 +:106AC000891BB84122D220682860B5F84800401ED2 +:106AD000A5F84800D4F82CC0BCF1000F07D0CDE9D0 +:106AE0000067D4E9082301216068E04707E0D4E9A2 +:106AF0000801CDE90001201DA16A0DC88847204684 +:106B0000FFF720FF2C68002CD8D106E02CB1D4E987 +:106B10000201BDE8FC41FFF7DBBEBDE8FC410120FE +:106B200008F07AB9BDE8FC814878002070B50546C8 +:106B30000024EDF787FF0748016805E0886AA8424E +:106B400001D1012402E009680029F7D1EDF784FFA3 +:106B5000204670BD4878002010B5EDF773FFFEF7B2 +:106B6000BDFF10B90C48C16B19B1EDF775FF0020DE +:106B700010BD04684CB1FFF733FAA1680C1A322C2F +:106B800001D9323C03E0002401E04FF0FF34EDF77F +:106B900063FF204610BD0000487800202DE9F04733 +:106BA0001E46DDE909A8DDF8209017460D460400D1 +:106BB00002D025B1012003E00020BDE8F0870020CD +:106BC0004FF4FF7211A1EEF70FFF84F81C80C4E9A7 +:106BD0000A571348C4E90869816B491C816301D1D4 +:106BE000012181636160D4E90212CAE90012B0F8A0 +:106BF0004810491CA0F848100068A04203D1FFF7D4 +:106C0000EFF9FFF74DFF2046D7E70000626C6535CE +:106C1000305F6C6C645F7363686C2E63000000000F +:106C20004878002070B50646EDF70CFF104CE56B78 +:106C3000CDB16868B04216D10020E0632068A84258 +:106C400011D1FFF7CDF9C4E9040128682060284676 +:106C5000FFF778FEB4F84800401EA4F84800D4E9D5 +:106C60000401FFF71DFFBDE87040EDF7F5BE000021 +:106C70004878002010B5FFF771F8BDE8104000F02B +:106C800001B800002DE9FC411A4D064600202C6891 +:106C9000E863C5E90C610F4634B3D4E902017040E2 +:106CA0007940084310D1D4E90801CDE90001A16A77 +:106CB00032463B466068884760B1EC63D4E9040122 +:106CC000BDE8FC41FFF704BED4E9040170407940FF +:106CD000084309D1206828602046FFF733FEB5F845 +:106CE0004800401EA5F8480030463946BDE8FC4142 +:106CF000FFF7D6BE4878002010B5EDF7A3FE0D4C87 +:106D0000002084F84A00E06B88B100204FF44B72F9 +:106D100009A1EEF769FE206828B1FFF761F9C4E91F +:106D20000401FFF7BDFEBDE81040EDF795BE012060 +:106D3000ECE7000048780020626C6535305F6C6CD1 +:106D4000645F7363686C2E63000000001FB58DF8EC +:106D50000810FE218DF809100021CDE90002ADF8E0 +:106D60000A10ADF80C10426F69464FF0021000F0A7 +:106D700001F81FBD70B516460D460446FFF756F9DB +:106D8000C0E900461ECD08301EC0BDE87040052099 +:106D900006F0B4BB70B50546FFF748F9044600F1AC +:106DA00008061348006840F08041091F886FC6E953 +:106DB00000106431887F307211F83E0C7072C88800 +:106DC00070818888B081256008696060052006F0C0 +:106DD00095FB08480078C00708D0A088317ABDE844 +:106DE0007040C0F3072201200AF0A8BC70BD00006B +:106DF0000C0109401C00002010B5C478036864F33E +:106E00001F631360808861F31F40506010BD0A68E3 +:106E100002600A79017962F304010171704701226D +:106E200011460720F4F7C0BB012202210720F4F726 +:106E3000BBBB00002DE9F04788462C49044600689A +:106E400051F8285088B04FF0000920B1A04202D07C +:106E5000E96B884203D1002008B0BDE8F0875835BF +:106E60006864E86BFFF78CFD0646E0790F4600F09A +:106E700003022868817DA088C0F307100AF0C8FDCE +:106E800082462068C179808801F003022968C0F336 +:106E90000710897D0AF0BCFD0246204600F06CFC1C +:106EA000504483B2206800F067FC104482B2002096 +:106EB0000DF1180C0294CDE903C0F118CDE90008DA +:106EC00047414FF49670081847F10001084BFE3215 +:106ED000FFF7FDFB286430B10698811B204601F0C6 +:106EE00063F84846B8E74FF04309FAE7487A0020CC +:106EF00073B501002DE9F04F05467E484FF0000BB9 +:106F000097B050F82540DA46D4E9227657EA0600D1 +:106F10007ED1FFF765F84FF4487201278018A783E8 +:106F2000E28B41F100014FF4487810AE012A55D0B0 +:106F30000DF1300CE389CDE9073CCDE9096A6E4BD0 +:106F4000CDE9043A0695A36D40F2712CD3F80620E2 +:106F500022F07F4202FB0CF24FEAE27CCDE9022CE8 +:106F6000D3F8032040F2712322F07F425A43D31713 +:106F7000CDE90023626AFE32FFF7D3FBC4E92001AA +:106F800008430CD0DDE910018834C4E900010C98F5 +:106F9000A060883C00210D98FFF762FC9CE014344F +:106FA000002334F8060CCDE90276CDE90050524AB0 +:106FB00040462169FFF711FBE067DDE91001C4E9F4 +:106FC0001D01606C40F27121D0F8060020F07F4076 +:106FD0004843C117C4E91B01143C7DE0143400236D +:106FE00034F8060CCDE90276CDE90050424A40461D +:106FF0002169FFF7F2FAE067DDE91012C4E91D121A +:107000000021C4E91B11143C002865D1432000E095 +:1070100002E017B0BDE8F08FFEF7E2FF0246084637 +:10702000C82112EB010840F10009D4F8900008B122 +:107030005846ECE7A08B401CA4F81C00EDF7F2F9D1 +:10704000C0B20621B0FBF1F201FB12014FF47A70DD +:107050004143C817D4E92023C91970418F1840EB68 +:107060000306B7EB080176EB090001D247464E460E +:107070003A4633462146284600F04EFA0028C6D14B +:107080001C48D4F824B050F82500A04201D10120BA +:1070900000E0002040F6434218A1EEF7A5FCE0898D +:1070A00014AA0495CDE905021348CDE9020A41F27C +:1070B0008830381846F10001CDE900013A463346E0 +:1070C0005846FFF79BF9C4F89000DDE91412C4E9B3 +:1070D000221238B1A4F820A02946204600F014F866 +:1070E000C0B294E7208C401C80B220846428A5D9CB +:1070F00003208CE7487A0020CDB70100626C65352B +:10710000305F6C6C6D2E63002DE9F0470446406CD7 +:1071100088B08A4600684FF00008D0F80090D9F88F +:107120000050002D78D04D45FCD0E87900F00302E6 +:10713000A06D817DA888C0F307100AF069FC06469F +:10714000A06DB0F80110CA0715D0E97901F003026B +:10715000817D22200AF05CFC0746E87900F00302FA +:10716000A06D817D0C200AF053FC3844064406F5DE +:107170009676434F1BE0890718D5E97901F00302A1 +:10718000817D0C200AF044FC0746E87900F00302F8 +:10719000A06D817D28688088C0F307100AF038FC54 +:1071A0003844064406F59676364F00E0364FD4F85C +:1071B000940090B35FF0000040F6D12233A1EEF7C7 +:1071C00013FC002006ABCDF80890CDE90330CDE9E3 +:1071D000000A54F8242F4FF4167CD4E9193112EB2D +:1071E0000C0C40F1000213EB0C0051413B4606F140 +:1071F000FE02FFF76CFA2067243C00B1012040F644 +:10720000D82222A1EEF7F0FBD4F8940040B1A06D93 +:10721000807D012806D00EE02EE0FFE70120CBE7BD +:10722000432028E0DDE906016FF00902821841F1F0 +:10723000FF30CDE90620D4F888100698421A20467F +:10724000616C04F0B9FB1048874206D151462846CC +:10725000C4F89C50FFF7EEFD0DE00A4887420BD1C1 +:107260002868C4F89C00CDF800A02B68DDE9060171 +:10727000324600F011F8804608B04046BDE8F0877D +:1072800085B5010097B5010073B50100626C6535E5 +:10729000305F6C6C6D2E63002DE9F04F89B08B462A +:1072A0002749DDF848900746186851F829601C46C0 +:1072B00015464FF0000820B1A04202D0F16B884281 +:1072C00003D1002009B0BDE8F08F58367064E07932 +:1072D00000F003023068817DA088C0F307100AF037 +:1072E00097FB82462068C179808801F003023168EB +:1072F000C0F30710897D0AF08BFB0246002006AB25 +:107300000294CDE90330CDE900097B194BEB000174 +:1073100040F29D30181841F100010A4BFE32FFF790 +:10732000D6F9306448B10698C01B411B11EB0A0125 +:10733000204600F039FE4046C4E74FF04308FAE724 +:10734000487A002073B5010070B505461548B5F5BB +:10735000006F046807D000205E2213A1EEF744FB03 +:10736000A06810B107E00120F6E700212846FEF7EB +:1073700033F9A06098B1A168002081F82600A168C7 +:107380000D480861A1680D484861A06845670C4830 +:10739000A16890F8450181F82300002070BD072006 +:1073A00070BD000068040020626C6535305F6C6C55 +:1073B0006D5F692E63000000D6BE898E555555005D +:1073C0003075002070B50D460D4951F82040206BF6 +:1073D00028B900212846FEF7FFF8206368B1216B29 +:1073E000002081F82600216B06480861216B0648C1 +:1073F0004861206B4567002070BD072070BD00000C +:10740000487A0020D6BE898E5555550010B50446E1 +:10741000D4E900020AB10023136001291BD002291C +:1074200018D110B10068002814D12522022120466D +:10743000FEF786F92068818821F47F6160318180C0 +:107440000068818821F47F6160318180417921F079 +:107450009001417110BD252201212046FEF770F9EF +:107460002068818821F47F616031818010BD002215 +:1074700040F603410320F2F7F7BF000010B5806D1E +:10748000C07C0AF0A5FA0A496422B1F84011084408 +:1074900001B291FBF2F302FB131158B2322901DD64 +:1074A000401C03E011F1320F01DA401E40B210BD62 +:1074B0003075002010B5022902D1406D407970B9B5 +:1074C000032005F0CBFD022806D1074890F84500BF +:1074D000012804D0032802D000F0F6FF08B10020F4 +:1074E00010BD012010BD000030750020094810B506 +:1074F000006850B1416A41B1012180F83010406A02 +:107500000021FFF7ADF9002803D0BDE8104000F0DE +:1075100079BD10BD6804002070B5D1E920452C4329 +:1075200003D10B7F0022432116E0CD8B4DB18C8B14 +:10753000AC4206D9E3B20022432103F03DFE4320D2 +:1075400070BDD1E9285455EA040609D0AA1A9C4115 +:1075500006D20B7F00223C2103F02EFE3C2070BDA2 +:10756000002070BD00B5024601F10C0000F024FEC1 +:10757000C107064804D0916A0164D16A416400BD24 +:10758000426C002161F31042426400BD00000940DA +:10759000490012B1012A04D101E01E3101E001F5D8 +:1075A000967189B2FEF725B92DE9F04706466E4877 +:1075B0000D460022046811464FF4486701EB0110A4 +:1075C000284410F8093F032B38D2B0F80330B0F844 +:1075D00001C0634571D8B0F80530B0F807C0634505 +:1075E0006BD8062B69D3BC4567D8B0F80B90B9456A +:1075F00063D8B9F10A0F60D3B0F80980B8F5FA7F03 +:107600007ED208F1010808FB0CF8B8EB890F77DC93 +:10761000B0F80D80B0F80FC0E04571D8B8F1000F98 +:1076200002D0BCF1000F03D1401D038103884381C8 +:10763000521C491CC9B2D2B20329BFD3EAB30020FD +:1076400084F86D00012084F888003C22294604F16A +:107650003100ECF7F9FE3046FFF776FE002850D1F6 +:10766000FF22022104F10C00FEF70CF82222012176 +:1076700004F11400FEF764F8E068E8B36069D8B379 +:10768000A1690860A06894F83120C18862F389017B +:10769000C180E268C16862F31E01C16061698160F6 +:1076A00094F8332090F8361062F3000180F8361019 +:1076B000616B0163218F818600E021E094F8321034 +:1076C00022462A4804F048FA00281AD1ECF7AAFE0C +:1076D00020F07F47606900F10C06818821F47F610A +:1076E00001F508718180417921F010014171A9787B +:1076F0000029C17909D000E005E041F0040106E06D +:107700001220BDE8F0870720FBE721F00401184AAA +:10771000C17192F8632162F30101C171304604F036 +:10772000F7FA3771380A7071380CB0711048D0F818 +:107730003B11316190F83F0130750220F0710C204F +:10774000B7FBF0F100FB1171707D491D61F304007E +:1077500008497075097861F3471070752046BDE8D7 +:10776000F04702F073BB0000680400205E76002042 +:1077700030750020F40100208179C90703D0C07A58 +:10778000C006000E70470020704700002DE9F0434E +:1077900095B09946DDE91E47DDE920650DF11C0E27 +:1077A00000230DF1400C0DF13008AEE80811DFF8B0 +:1077B00084C00A93CDE904C340F2E24C07FB0CF706 +:1077C0004FEAE77CCDE9027C40F2E2477C43E717D1 +:1077D00006938018CDE9004759414A46FEF7A1FFBC +:1077E00004460F46084311D000210C98FFF738F8E3 +:1077F00000210D98FFF734F80FA800900BAB0EAAEC +:10780000204639460AF0E0F90E9818B1002015B06C +:10781000BDE8F0830B9840080B903080ECF702FE37 +:107820000B99B0FBF1F201FB1200401C28800120F3 +:10783000EDE700004169010070B5044605022846E5 +:1078400005F00CFC022804D100222146284600F055 +:10785000FFFC002070BD10B5044603F009FB10F0DA +:10786000FF0003D12046FFF745FBC0B210BD00006A +:107870002DE9F047A74992B051F82040276BE56BFE +:107880003F1DCDB1A44A616D00EB400002EB40000A +:10789000097AFE3004F1280204F05EF906000CD1EA +:1078A000216C82462046C1F800A004F033F9A88874 +:1078B00010F47F6F04D007E0072012B0BDE8F08716 +:1078C00020F47F606030A880606D8179287961F351 +:1078D00003002871286860B1818811F47F6F03D19B +:1078E00021F47F6160318180017921F00F01091D50 +:1078F0000171D4E90F010860787820F008007870F1 +:10790000616D20F004004A79798862F389017980F9 +:10791000F97821F07C01091DF9707870387820F031 +:107920000F003870606D007CF877E06B7860616BF9 +:10793000B86861F31E00B860387DFA2140F001009C +:107940003875787D20F03F002730787597F8200053 +:1079500020F0010087F82000388C61F34E00388455 +:10796000082087F82200606B00B1012040F6F44245 +:107970006AA1EEF739F8606BFDF720FF606DC07902 +:1079800010B140F2E24001E040F2DC50E0814500FD +:10799000E06B002211468088C0F307100AF038F827 +:1079A0000544208B68B1002205F596751146182014 +:1079B0000AF02EF80544208B801D002280B211466B +:1079C00003E000229635114622200AF021F80544F2 +:1079D000606D0DF130094FF00108C07980B14FF4AE +:1079E0000060788550486062E0890DF1040A4546E0 +:1079F0004D490094AAE82102FE3100234B4A77E06A +:107A000005F51C7040F27121B0FBF1F081B279856F +:107A100040F27120414332316162606D40F2712366 +:107A200002885343AB4202D34088824201D91226D6 +:107A30006DE0E08B012853D0FEF7D2FA0DF1400C37 +:107A4000E389CDE9073CCDE9099A384BCDE9043A01 +:107A500006946422636D801840F2712C5A8841F1BB +:107A6000000102FB0CF24FEAE27CCDE9022C1A88FD +:107A700040F271235A43D317CDE900234F4605F155 +:107A8000FE02FEF74EFEC4E920014246A4F81C8027 +:107A900008430BD0DDE90C018834C4E900011098DB +:107AA000A06000211198FEF7DBFE30E0E089CDE90F +:107AB0000227CDE9004054F8241F00231B4A64200C +:107AC000FEF78BFDE066DDE90C01C4E91901206BCE +:107AD00040F2712140884843C117C4E9170116E0FC +:107AE000E28901A845460094A0E824020F4A002339 +:107AF0006420FEF772FD1C346067DDE90C12C4E9F6 +:107B00001B120021C4E91911258000B94326304613 +:107B1000D3E60000487A002030750020626C65359D +:107B2000305F6C6C6D2E6300008813009DB6010001 +:107B300010B5044603F09CF910F0FF0003D1204675 +:107B400002F03EFBC0B210BD10B50446ECF76AFC73 +:107B5000410703D500F00100001D01E000F0030023 +:107B6000034944EA001040F08000886210BD000024 +:107B700000000940FEB5446B16460546DBB1207A8D +:107B800010F02E0F17D1207900F00F00052812D128 +:107B9000E07B00F00301286B001DFEF779F80B462F +:107BA00002AA0021CDE90012296B0246091D2046D8 +:107BB000F7F78AF808B10020FEBD0023BDF80820C1 +:107BC0001946304603F0F8FA0120FEBD70B5446B4B +:107BD000154643B1227A12F02E0F04D1227902F019 +:107BE0000F02032A01D0002070BD806D007E98B185 +:107BF0000A46092305212D2005F0CEFA1321017034 +:107C000045706179C9098170A169C0F80310A18B21 +:107C1000A0F8071005F020FC012070BDF0B5446B02 +:107C20008BB015460F4606461BB1207A10F02E0F7A +:107C30001CD0314850F82500406DC07978B1F06B08 +:107C40006A46D0F81210CDF80310C08AADF80700CC +:107C500000213C20F7F725F93C200BB0F0BD1BB10B +:107C6000207A10F02E0F01D0104641E0207900F06C +:107C70000F00032824D0052839D1E07B00F0030150 +:107C8000306B001DFEF704F80B460AAA0121CDE96E +:107C90000012316B0246091D2046F7F715F830BB7C +:107CA000082D06D20023BDF828201946284603F0E7 +:107CB00083FA00222946384600F0CAFA0020CCE7B1 +:107CC000706D407C98B10A46092305212D2005F0EE +:107CD00063FA1321017045706179C9098170A16946 +:107CE000C0F80310A18BA0F8071005F0B5FB2846DB +:107CF00002F0AEF9B1E70000487A00202DE9F04724 +:107D00000646214800251F46046891468A46A84633 +:107D1000002C36D0606A30B1FEF784FF002060622C +:107D200094F8300048BB052E04D0062E1AD0192E28 +:107D300020D117E00026E7680DE0387900F00F0049 +:107D4000072805D13A465146204600F01DFB88B968 +:107D50003F68761CF6B24E45EFD3204602F076F827 +:107D6000804607E03B464A465146204600F04AFB23 +:107D70000500F2D055EA080503D0BDE8F04700F051 +:107D800041B9BDE8F0870000680400202DE9F04704 +:107D90000F468146089849681D46904619B328B198 +:107DA0003946484600F02FF800281AD1C5B17C6842 +:107DB000A088C0F30710C0F1FF06AE4215D3A0881B +:107DC0002A46C0F3071020440C304146ECF73CFB38 +:107DD000A0884FEA303000EB05604FEA3050A080B9 +:107DE0000020BDE8F0871220FBE720440C3032462B +:107DF0004146ECF729FBA088B04440F47F60A080A6 +:107E0000A81BC5B2CCE70023FF2200F001B8000098 +:107E10002DE9F04F4D6804469DB0894605F10C00F0 +:107E20009A46904603260EA9834603F03FFD18B1FB +:107E30009DF8380020B104E01F201DB0BDE8F08F90 +:107E400004269DF83A0040F2777240F30010401C7F +:107E500051A1EDF7C9FD9DF83A0040F010008DF8F2 +:107E60003A00A06D817D9DF84C0061F347108DF8BC +:107E70004C004C48007805289DF84A0002D340F099 +:107E8000400001E020F040008DF84A004046FDF738 +:107E900045FC04002BD02C6000272760C9F8044063 +:107EA00020792C2220F00F00C01D20710EA903A8FC +:107EB000ECF7CAFA9DF83A008DF80D708DF8347021 +:107EC00000F00C008DF80E00BAF1000F03D020F086 +:107ED00004008DF80E000022214603A801F074FD75 +:107EE000A088C0F30711414503D8012002E0072014 +:107EF000A3E7002040F28F7227A1EDF775FDA88857 +:107F00006A7AC0F307118819824227D2801A87B291 +:107F10004819C11BA0880C31C0F3071020440C3055 +:107F20003A46ECF791FAA088C0F30711394461F39F +:107F30000B10A080A888C0F30711C91B61F30B10B8 +:107F4000A880A088C0F30711414501D8012000E0B6 +:107F5000002040F29B7210A1EDF746FDA888C0F307 +:107F600007119DF863000A1A00EB0B01431906F193 +:107F70000C001844ECF768FAA8880022C0F3071038 +:107F8000841929460EA801F01FFDA88864F30B1080 +:107F9000A880002051E70000626C6535305F6C6C92 +:107FA0006D2E6300F401002070B50D4600F0D5F889 +:107FB000040001D0012000E0002040F62A220DA19B +:107FC000EDF712FD0E488542207804D220F08000A3 +:107FD00020701E2004E040F0800020704FF4967066 +:107FE000B5FBF0F0B4F8011060F30C01A4F8011037 +:107FF00070BD0000626C6535305F6C6C6D2E630087 +:10800000C4BF030070B50F4D2C68002C19D094F834 +:10801000300028B100224FF6FF710220F6F741FF31 +:10802000A06808B1FDF74EFC04F10C00FDF786FCDA +:1080300004F11400FDF7D0FC204604F005FF0020F9 +:10804000286070BD6804002070B5040001D00120D4 +:1080500000E0002040F2611214A1EDF7C5FC04F12C +:108060003000FDF75FFC04F13400FDF767FC04F11C +:108070003C00FDF7B1FC04F14400FDF7ADFCE06C01 +:1080800004F0E2FE0025E564A06D10B104F0DCFE12 +:10809000A565E06D10B104F0D7FEE565606D0028C0 +:1080A00002D004F0D1FE656570BD0000626C6535DC +:1080B000305F6C6C6D2E630070B5154DC2F30B24F0 +:1080C000104655F82410897901BB04F0C7FFE8B1C8 +:1080D00001281BD0022801D0022070BD55F82400D1 +:1080E000052200F22D11481FECF7E7F970B155F8A1 +:1080F0002400052100F22D1003F09CFD18B9012188 +:108100002046F5F7C7F92046F5F70AFE002070BDB6 +:10811000287A002000B50C30024600F04DF80146E8 +:10812000000701D4002000BD02F10200CA0701D0FF +:1081300000F106008A0701D500F106004907F2D5D3 +:10814000401C00BD801C7047818811F47F6F02D0F5 +:10815000007E800970470020704700B50C30024651 +:1081600000F02AF80146C00601D4002000BD02F14B +:108170000200CA0701D000F106008A0701D500F10C +:1081800006004A0701D500F101000907EED5801C61 +:1081900000BD00B5024600F00FF80146400701D4CB +:1081A000002000BD02F10200CA0701D000F1060064 +:1081B0008907F6D5801D00BD0178890601D0407879 +:1081C00070470020704700B50C300246FFF7F4FFFF +:1081D0000146800601D4002000BD02F10200CA075A +:1081E00001D000F106008A0701D500F106004A0718 +:1081F00001D500F101000A0701D500F10200C9060E +:10820000EAD5C01C00BD00B50C300246FFF7D4FF14 +:108210000146400601D4002000BD02F10200CA0759 +:1082200001D000F106008A0701D500F106004A07D7 +:1082300001D500F101000A0701D500F10200CA06CC +:1082400001D500F103008906E6D5123000BD00001B +:108250002DE9F047DFF878800D46174658F825409D +:10826000814654B30021D4F89000FEF7F9FA30B3F8 +:108270000021D4F89400FEF7F3FA00B30021D4F8FB +:108280009800FEF7EDFAD0B1002644F8906F6660D2 +:10829000A660903CB7B12046FFF7D6FE082D11D05E +:1082A0000021484605F058F9444658F8250004F0E6 +:1082B000CBFD44F82560BDE8F087002103E027717D +:1082C000032100E001214846BDE8F04705F044B92C +:1082D000487A002010B500221249104604F080FDB3 +:1082E00024211148ECF7D7F8082000F021F80021EC +:1082F000122004F047FF0C4C00220223216A48653B +:108300000A498A70CB700A8009218171082003F024 +:108310000BFE03F0CBFC206A406DBDE8104003F07B +:10832000F1BD0000F0470200487A0020460400201A +:1083300070B5114D044655F82400D0B15FF000002F +:1083400040F21B620DA1EDF74FFB0021A82005F0C4 +:10835000D5F945F8240000280DD0A821ECF79BF8AA +:1083600055F8240004822002BDE87040012105F088 +:10837000F3B80120E4E770BD487A0020626C6535EF +:10838000305F6C6C6D2E630030B50446107A8DB092 +:10839000154610F02E0F09D101A9104603F0F9FA85 +:1083A000002804D09DF80600C00602D400200DB0BD +:1083B00030BD9DF80500C007F9D0BDF81700C00416 +:1083C000F5D06169A0684A7922F090024A71816013 +:1083D0009DF818104A09017962F301010171E87BE7 +:1083E00000F00301A068001DFDF752FC01AA0092F5 +:1083F00002460B462046FBF7C1F960620028D6D042 +:108400000120D4E72DE9F04105464169D5E9020490 +:10841000001D267906F00F070026072F02D0012B3A +:1084200045D11CE02368022A41D11A7A12F02E0F9E +:108430003DD1C979007801F00302C0F38101222007 +:1084400009F0E6FA00F19607E07B00F00301A86866 +:10845000001DFDF71DFCC01B61EB060117E0012AA2 +:1084600025D1E17B007801F00302C0F38101A088EF +:10847000C0F3071009F0CCFA00F19607E07B00F09A +:108480000301A868001DFDF703FCC0197141C5E98F +:108490001C01207900F00F00072801D0012300E023 +:1084A0000023214628466A69F5F7F2FD10B1002045 +:1084B000BDE8F0810120FBE702480068002800D0F9 +:1084C000012070476804002004480068002804D098 +:1084D00090F83100012800D0002070476804002087 +:1084E000C2780168808862F31F610122B2EB903F7D +:1084F0000FD101F07F42C0F30D031A4307D0FF22D2 +:10850000B2EB116F05D1A0F5FE41FF3901D1012079 +:1085100070470020704700002DE9F0411E461446C8 +:108520000F46C2F30725104604F098FD01460A489D +:1085300050F82500FEF7BEFF58B13846F9F7CEF9DE +:10854000034622463146222002F04DFE0020BDE8BF +:10855000F0810C23F5E70000487A002000207047E6 +:108560002DE9F0411F461546C2F3072600241046A8 +:1085700004F074FD0146094850F82600FEF79AFF02 +:1085800050B1F9F7E7FD23462A463946212002F08B +:108590002AFE0020BDE8F0810C24F4E7487A002090 +:1085A00070B51D4616460C24FFF786FF10B1FEF786 +:1085B0009DFF0024234632462946202002F013FE68 +:1085C000002070BDF0B507468FB01E460C4615461C +:1085D000104604F043FD01280CD0032808D00C23DA +:1085E0002A463146282002F008FE00200FB0F0BDD8 +:1085F0000220FBE7641C2B46E0788DF80000E07A4F +:108600008DF80100D4F80500CDF80300B4F8090096 +:10861000ADF8070020798DF8020000208DF80900E0 +:10862000E089ADF81000A089ADF80E00208AADF801 +:108630001200E08AADF81800A08AADF8160034F8F0 +:10864000010CADF80A00B4F80100ADF80C00608A26 +:10865000ADF8140003208DF81A001A466946384612 +:1086600000F08CF8C2E7000070B5144916460025EA +:1086700091F8D800C2070CD140F0020081F8D80070 +:108680000024200204F0EAFC50B1012803D00328A2 +:1086900012D00C2508E0012221463046FFF7D8FD14 +:1086A000641CE4B2092CECD32A4642F23D01304668 +:1086B000F1F7DAFE002070BD022070BD3075002099 +:1086C0002DE9F041487816460C46C2F3072742F2DE +:1086D0003305FF2803D10120607042F21D05E078C8 +:1086E000FF2810D042F24F05104604F0B7FC0128D5 +:1086F0000ED003280AD00C2229463046F1F7B4FEEA +:108700000020BDE8F0810020E070EDE70220F8E7EE +:108710003A462146304601F0BBF90246ECE72DE926 +:10872000F041C87816460C46C2F3072742F23405DA +:10873000FF2803D10120E07042F21E052079FF28B6 +:1087400010D042F25005104604F088FC01280ED0EB +:1087500003280AD00C2229463046F1F785FE002076 +:10876000BDE8F08100202071EDE70220F8E73A46ED +:108770002146304601F04CFA0246ECE72DE9F04183 +:108780001D4614460E46AA4203D008F061FDC007FC +:1087900009D01C48AC4290F8D81006D04A070DD436 +:1087A00041F0080105E011221FE00A0706D441F05C +:1087B0000401154F80F8D810386808B10C2214E075 +:1087C0000021902004F0DEFC90213860EBF763FE7E +:1087D0003868AC4201D1012100E0002180F8891005 +:1087E00031462046FEF7E0FE0246AC4202D142F29C +:1087F0000D0101E042F243012046F1F75BFE00204B +:10880000BDE8F081307500206804002070B5124981 +:108810001546002491F8D800C2F30726C2070AD1F2 +:1088200040F0020081F8D800284604F017FC012827 +:108830000CD0032808D00C24224642F23C012846E2 +:10884000F1F712FE002070BD022070BD01223146FA +:108850002846FFF7FDFCEFE7307500202DE9F043D7 +:108860000E462E48C2F307272D4950F8274091465F +:1088700091F8D80000258BB0C20734D140F0020037 +:1088800081F8D8008846484604F0E8FB022805D065 +:10889000032810D102200BB0BDE8F083A06D18B101 +:1088A000B0F80100F8B906E0606D8079D8B1012810 +:1088B00019D0042817D007EB470108EB4100D6F880 +:1088C000011040F8FE1FB6F8051081802A4642F2DA +:1088D00035014846F1F7C8FDF4B1A06DE0B1E56B94 +:1088E00005F10C0416E00C25F0E76946204602F07D +:1088F000DDFF78B19DF80200C0070BD0D6F801006B +:10890000CDF80300B6F80500ADF80700214668462B +:1089100003F080F8002DE8D10020BCE7487A002061 +:108920003075002010B510460E4CC2F3072200230C +:1089300054F8222042B1D46D44B149780029917A8B +:1089400006D041F0040105E0422304E00C2302E0DC +:1089500021F0040191721A4642F25201F1F784FDAE +:10896000002010BD487A00202DE9F0410C46244932 +:10897000C2F30720174651F820500026104604F095 +:108980006DFB012803D0022801D042262FE0A078F9 +:1089900010B12079022808D3E078102805D820B13A +:1089A0002079082806D9112621E0207912260828E6 +:1089B000F9D81CE0296B11F8222F60F306020A7027 +:1089C000286B22796C30611DEBF73EFD6078A17851 +:1089D00040EA81106871E078A87105F1440004460E +:1089E000EEF714F918B92146284601F069FF32461E +:1089F00042F251013846F1F737FD0020BDE8F08121 +:108A0000487A00202DE9F8430D465749C2F3072064 +:108A1000002651F8204055499046374691F8D80035 +:108A2000C20701D00C2694E040F0020081F8D80083 +:108A3000404604F013FB012806D0022804D0032886 +:108A400051D10220BDE8F883E878FB284BD868783C +:108A5000042848D8A8782072606D30B12A46214693 +:108A6000404602F035FD064673E06878042811D0D0 +:108A7000A06D00B1012040F661023DA1ECF7B4FF0A +:108A8000A06D407880072ED46878012806D003288E +:108A900004D01AE0EBF7C6FC60835AE0EBF7C2FCA7 +:108AA00060830020E082A06D4078C00703D020469C +:108AB00001F018FF07E06878012801D0E87818B3C2 +:108AC000204601F0AAFF060043D1A06D4078C00700 +:108AD0001AD0E06BEA780768B888C0F30710C0F1D5 +:108AE000FF018A4201D9122633E038440C30291D97 +:108AF000EBF7AAFCB888E9784FEA303000EB016068 +:108B00004FEA3050B88019E0E08AEB7840F27261A9 +:108B10001844884201D907261BE0A878012804D10F +:108B2000687808B1022800D101272A1D04F13C0110 +:108B300020460097FFF72AF906000AD1E08AE97873 +:108B40000844E082687803280BD0022809D000206E +:108B50006070324642F237014046F1F785FC002052 +:108B600070E70120F4E70000487A0020307500200B +:108B7000626C6535305F6C6C6D2E63002DE9F05FC3 +:108B80000C4654499346002791F8D800C2075ED19D +:108B900040F0020081F8D8006078082855D8217884 +:108BA00061B980B9082060705FF0000004EB8001BB +:108BB0008870401C6178C0B28142F7D820780128C3 +:108BC00001D1607890B30020617806E004EB800268 +:108BD0009278082A39D2401CC0B28142F6D80025CA +:108BE0006BE000BF04EB85093B4999F802804FEA2E +:108BF000082A51F82860D6B3207838B1514640464B +:108C0000FEF7E0FB070062D1C6E92200F06D002804 +:108C1000207810D00028B07A09D040F00100B0725E +:108C200052464146304602F094FC44E00DE020F00C +:108C30000100B0723FE0B0B3707840B1307830B12D +:108C4000504604F00BFA012803D0122738E00C2715 +:108C500036E0B9F8030058B1FDF7C2F9B9F80320BE +:108C600042F210735A43801841EBE27102E022E0B5 +:108C700000200146C6E9280199F80500F08300208C +:108C8000B083B06D002899F8020002D0FEF7E3FD32 +:108C900001E0FEF7EDFD10F0FF0711D10221504673 +:108CA00004F05AFC07E0FFE799F80200FEF7C4FD64 +:108CB00010F0FF0704D16D1CEDB26078A84291D886 +:108CC0003A4642F239015846F1F7CEFB0020BDE8A2 +:108CD000F09F000030750020487A00202DE9FF4FFA +:108CE00085B00D4607980026C0F3072708F0B0FAB4 +:108CF000DFF83CA2C00705D08E4991F8D800C20722 +:108D00000ED101E01126EEE040F0020081F8D8001B +:108D1000079804F0A3F978B1012807D0032801D0FF +:108D20000C26E0E0022009B0BDE8F08F5AF82700D9 +:108D300010B1FFF789F902E03846FFF7F9FA5AF85F +:108D4000274084B30020C4E92200D5F8030020F0B6 +:108D50007F42D5F8060020F07F418A427DD8D5F8C1 +:108D60000900C3B2072B78D8AB7C032B75D8202A17 +:108D700073D3B1F5804F70D8E97A03296DD8A97AF9 +:108D800003296AD8400768D0B5F801004FF0000801 +:108D9000410701D585F81280C006A06D4FF0010B88 +:108DA00045D418B107E0FFE707269CE00021192011 +:108DB00004F0E8F9A065606D18B104F045F8C4F856 +:108DC000548019222946A06DEBF73EFBA16D087D6A +:108DD000401E0875A06D817D491E8175A06D007DC6 +:108DE00003F02AF8C8B3A06D807D03F025F8A0B386 +:108DF000A06D642190F91300484305F009FEA16DB0 +:108E0000C874B5F80100010744D4C043800741D0BD +:108E1000EBF708FB00F00F00E07184F801B084F874 +:108E200000B06878800763D584F8008060E018B1EE +:108E300004F00AF8C4F85880606D20B900211220AF +:108E400004F0A0F960658146B5F80300ADF80000B4 +:108E5000E888ADF80200A87A00E01BE08DF8050074 +:108E6000E87A8DF80600E868CDF80700288AADF8A2 +:108E70000B00687A8DF80D00A87C8DF80E00B5F80F +:108E8000010010F007011AD002291AD0032903D0DB +:108E9000052904D0122626E08DF8048006E000079C +:108EA00001D5012000E004208DF804003946684611 +:108EB00002F0BCF90646287E28B1012104E0032017 +:108EC000F2E70220F0E7002189F8111095F913006C +:108ED0006421484305F09CFD89F8100084F801B036 +:108EE00084F800B026B1012239460798FFF7B0F99F +:108EF000DDE907210223262004F04EF906707F21C8 +:108F000041705AF82710044661B14A6D002002B141 +:108F1000107C896D01B1C87C08F05AFD642190FB7A +:108F2000F1F06070204604F097FA0020FBE60000A4 +:108F3000487A0020307500202DE9F8430E463B4961 +:108F4000C2F30720002451F82050394990462746A3 +:108F500091F8D800C20701D00C245CE040F0020078 +:108F600081F8D800404604F079F8012806D002289C +:108F700004D0032809D10220BDE8F8832DB1F07890 +:108F8000FB2802D87078032801D9122443E0B07876 +:108F90002872686D30B132462946404602F0BBFA6D +:108FA000044638E0A86D40788007EED57078012837 +:108FB00001D0032809D1EBF735FA68830020288314 +:108FC000284601F0B9FE040025D1F3781BB3288BA5 +:108FD00040F272611844884201D907241BE0B0783E +:108FE000012804D1707808B1022800D10127321D70 +:108FF00005F13C0128460097FEF7C8FE04000AD19F +:10900000288BF17808442883707803280BD0022835 +:1090100009D000202870224642F238014046F1F77C +:1090200023FA0020A8E70120F4E70000487A002096 +:1090300030750020F8B50D462E49C2F307201646BC +:1090400051F820402C4991F8D800C20701D00C22D9 +:1090500046E040F0020081F8D800304603F0FEFF01 +:10906000012805D0022803D003280CD10220F8BD26 +:109070004CB1A06D38B1E06D28B1A878FC2802D8B9 +:109080006878032801D912222AE00027012801D09C +:10909000032808D1EBF7C6F96083E782204601F088 +:1090A000ABFD02001CD1E08AAB7840F2726118443B +:1090B000884201D9072213E0EA1C04F13C01204652 +:1090C0000097FEF763FE02000AD1E08AA9780844FF +:1090D000E082687803280AD0022808D00020607057 +:1090E00042F23F013046F1F7BFF90020F8BD012000 +:1090F000F5E70000487A0020307500202DE9F047A0 +:109100000F464E7824482549914650F8264091F85C +:10911000D8000025C2072AD140F0020081F8D8000B +:10912000082E0ED26CB1A06D58B1E06D48B130027E +:10913000804603F093FF012808D0022819D00328A5 +:1091400001D0122520E00220BDE8F0873878D8B1A0 +:10915000607860B10020C4E92200A07A424640F065 +:109160000200A0723146204602F0F3F90CE00C2513 +:109170000AE0387840B9A07A002220F00200A072FC +:1091800031464046FFF764F82A464FF401514846FD +:10919000F1F76AF90020D7E7487A002030750020FF +:1091A0002DE9F0410F463B49C2F307203A4D51F8F3 +:1091B0002040164695F8D800C1070BD140F00200B8 +:1091C00085F8D800104603F049FF78B101280FD088 +:1091D000032809D00C252A4642F23E013046F1F719 +:1091E00043F90020BDE8F0810220FBE74225F2E7C9 +:1091F000B7F80100B7F80310884204D8A06D10B189 +:109200004078800701D01225E5E7E06D28B90021FC +:10921000072003F0B7FFE065C0B339680160B98883 +:109220008180B9798171EBF7FDF8074614F8610F79 +:1092300020F0800020701848D0F83B01C4F80300EB +:1092400095F83F11E07961F304001449E071097861 +:1092500061F34710E071613C04F1690002F058FDD0 +:1092600084F86D70380A84F86E00380C84F86F004A +:109270000020E082204601F0BFFC0546D4F86910CA +:10928000074A04F17200EDF72AFDA4E7FFE707257E +:10929000A1E70000487A002030750020F40100208A +:1092A0006B76002070B51D4614460E46104603F03E +:1092B000D5FE01460A4AC4F3072052F82000FEF703 +:1092C000F9F850B13046FAF71BFD0346224629460D +:1092D000232001F088FF002070BD0C23F6E700007A +:1092E000487A00202DE9F05F0E461F4992464FF064 +:1092F000000991F8D800C2F307279B464D46820724 +:1093000001D50C2527E040F0010081F8D800307825 +:109310001F280AD8DFF8548058F82700C46B34B1EE +:10932000207900F00F00012809D1122513E03C300C +:109330001F220121FCF704FA58F82700C46B327889 +:10934000711C04F10C00EBF77FF83078A188801DC8 +:1093500060F30B11A1802B46524659461D2001F0A7 +:1093600042FF4846BDE8F09F30750020487A002053 +:109370002DE9F0410C461D491546C2F3072791F827 +:10938000D8001E46820713D440F0010081F8D800AF +:10939000284603F063FE022808D0032803D0207873 +:1093A00001280CD004E00220BDE8F081207808B14B +:1093B0000C2412E03846FEF73FFAC4B20DE029460D +:1093C0003846FDF7FFFF3846FEF752FA10F0FF046B +:1093D00003D10221284604F0BFF823462A4631462D +:1093E0001F2001F000FF0020DEE7000030750020A4 +:1093F0002DE9F0411E4614460F46C2F307251046DC +:1094000003F02CFE022804D00B4991F8D800820703 +:1094100001D50C2308E040F0010081F8D80029466E +:10942000384601F003FF0346224631461C2001F076 +:10943000DAFE0020BDE8F0813075002002490120ED +:1094400081F83A0100207047307500202DE9F04185 +:109450001D4E1D46904696F83A010C4648B36422CC +:1094600041462F2004F0C2F8002086F83A01052179 +:10947000204602F0DFFBF0B125281CD830462168D9 +:10948000C0F83B112179002480F83F115FF00107FB +:1094900007EB0426304603F0E1FD20B14246314699 +:1094A000312003F0EDFF641CE4B2082CF0D300235C +:1094B00002E00C2300E0122342462946242001F05A +:1094C00092FE0020BDE8F081307500202DE9F047C4 +:1094D0000E4629499146002791F8D800C2F3072586 +:1094E0009A4682073DD4DFF8948040F0010081F86D +:1094F000D80058F8250044463C300221FDF786FF8D +:1095000054F82500C06B0468484603F0A7FD44B337 +:109510003278711C04F10C00EAF796FF58F8252008 +:10952000317811833178A288891D61F30B12A280F2 +:10953000217921F00F01091D2171617921F0B0011C +:10954000617158F82500406D007A0028E07902D05A +:1095500040F0080001E020F0080020F00400E07175 +:1095600000E00C273B464A4651461E2001F03BFED8 +:109570000020BDE8F087000030750020487A002008 +:1095800010B5104603F06AFD042804D0002001F055 +:109590003EFE002010BD084801218170C07818B13E +:1095A000082002F089FBF4E7044901204A6860F3CF +:1095B000D3424A60EDE70000460400200000094065 +:1095C0002DE9F8430546046D99461746184603F001 +:1095D00045FD012803D0032801D004283AD1688A28 +:1095E0004FF0000638446882DFF870802FE0207A60 +:1095F00010F02E0F20D1B8F80010404601F1010103 +:10960000A8F8001098F80210B1B96179490613D58D +:109610004279217CB2EB911F0ED198F8040001F041 +:109620001F01814208D1CDF80090286B0022001D57 +:109630002346114603F00AF86079761C20F02000DA +:109640006071E079F6B220F08000E0712468BE42DB +:10965000CDD32C650020BDE8F8830000460400202F +:109660002DE9FF4F81B00D460398BF49C0F3072B8A +:1096700095F8088051F82B404046B8F1050F28D0E6 +:10968000062826D0192824D0039803F0E7FC06000A +:1096900024D0012EFCD0002CFAD02868216B8842FF +:1096A0001CD10027032E1AD06989608AB5F80C9066 +:1096B000081A1FFA80FA4046B8F1110F74D077DC0F +:1096C000092805D06ADC01287BD0B8F1080F6ED1DB +:1096D00096E0AB896A890399FEF710FB27E14046C3 +:1096E000B8F1110F45D00EDC092821D005DC012886 +:1096F00012D0B8F1080F4FD11AE00A2818D0B8F1EB +:10970000100F49D120E0A8F11200062844D2DFE86A +:1097100000F0303A3A433F3FD4F8900040B36968D4 +:10972000814201D1012000E0002041F22B0216E02D +:10973000D4F89000E0B16968814201D1012000E0D5 +:10974000002041F230020AE0D4F8900080B169684C +:10975000814201D1012000E0002041F2330283A1C7 +:10976000ECF742F9D4F89000FDF75CFAC4F8907079 +:1097700012E0D4F8940078B1FDF754FA943460689C +:1097800064E8250708E054F8940FFDF74BFAF6E774 +:10979000D4F89400FDF746FA22799CE00A282FD0ED +:1097A000B8F1100F03D153E067E001E009E077E082 +:1097B000A8F11200062873D2DFE800F05F7A92CA9F +:1097C000BDBDD4F8900080B16968814201D101200B +:1097D00000E0002041F2540264A1ECF705F9D4F84E +:1097E0009000FDF71FFAC4F89070022E2FD1534657 +:1097F0005A46CDF8009020460399FEF70FFA94E000 +:10980000D4F8900080B16968814201D1012000E064 +:10981000002041F25B0255A1ECF7E6F8D4F8900085 +:10982000FDF700FAC4F89070042E10D1BAF1000FC1 +:1098300006D00AF0FF0259462046039BFFF7C0FE00 +:10984000A18A01EB0900A082584602F035FA6EE0C9 +:10985000D4F8900058B36968814201D1012000E03A +:10986000002041F2660241A1ECF7BEF8D4F8900066 +:10987000FDF7D8F9C4F8907052E0D4F89400B0B174 +:10988000696888420DD1FDF7CDF994345946606876 +:10989000C4E90007A068943CFDF7CCFA38B119E0A0 +:1098A00056E0D4F8980088423AD1C4F8987037E06E +:1098B00054F8940FFDF7B6F9606864E82507022EA6 +:1098C00035D153465A46CDF8009020460399FEF70D +:1098D00051F928B3002259460398FEF7B9FC26E057 +:1098E00054F8940FFDF79EF9606864E82507022E8E +:1098F0001DD153465A46CDF8009020460399FEF7F5 +:1099000065F928B15946D4F89C00FDF793FA07E0B1 +:109910000021D4F89400FCF7A3FF08B1C4F89470B8 +:109920005A463146204600F039FC0028D2D105B015 +:109930000020BDE8F08F0029F9D16868FDF772F9C1 +:109940006868D4F894108842F1D1C4F89470EEE7B6 +:10995000B8F1000F06D0002041F2A50203A1ECF7F8 +:1099600043F8E4E70120F7E7487A0020626C6535A8 +:10997000305F6C6C6D2E63002DE9F0410A48C2F334 +:109980000726144650F826500F46104603F066FB93 +:1099900030B12DB17A7A234631462846FFF710FEC2 +:1099A0000020BDE8F0810000487A002000207047C8 +:1099B00010B5012904D10348006808B100F046FA47 +:1099C000002010BD680400202DE9F04116460F4626 +:1099D000054601F10C0402F05FF8002856D0287803 +:1099E000697840EA8110207095F82B10B88861F3EF +:1099F0000B10B8802878E8B3A8786070A87804F1D4 +:109A00000204C00707D0D5F803002060B5F80700AE +:109A1000A08004F10604A878800707D5D5F80900CE +:109A20002060B5F80D00A08004F10604A878400776 +:109A300002D5E87B04F8010BA878000702D5288A34 +:109A400024F8020BA878C00605D5688A2080287DF6 +:109A5000A07004F10304A878800607D5122205F14E +:109A600015012046EAF7F0FC04F11204A87840063C +:109A700005D500E009E095F8270004F8010B95F8FA +:109A8000282031462046EAF7DFFC0120BDE8F081BE +:109A90002DE9F0439046574A0D46097852F8284080 +:109AA00087B0272902D86978032903D9122007B083 +:109AB000BDE8F083216B19B90021FBF78DFD206310 +:109AC0004D4F01264FF00009FE70A7F80090FF22CD +:109AD000082104F13400FBF7D5FD606B2065A4F884 +:109AE0001290206BC17921F07C012431C171216B6E +:109AF00042480861216B42484861D4E90C02C168C0 +:109B000062F31E01C160FBF7A1FE216B8860206B30 +:109B100080F82660206B017E21F001010176287813 +:109B2000F3F789FA216B4A7E60F305024A76216BCE +:109B300068780A79401E60F383020A71206B2D2237 +:109B400010F8241F41F001010170206B818C62F339 +:109B50004E018184206BC6852A48016866F3451151 +:109B6000016029494FF49670C862002005F03CF965 +:109B7000002005F031F9206BAA7910F8221F62F35A +:109B800006010170206B697910F8202F61F34512EE +:109B90000270E878387128797871E87890B1D4E962 +:109BA0000C070179C1F38101022921D0AA796C3017 +:109BB000E91DEAF749FC3846FBF7DCFF3F68606BBC +:109BC000B842F8D104A9CDF80090CDE9016143462F +:109BD00000220E496FF00040FCF7F0FBC4F8900043 +:109BE00030B14FEA0820042103F0B6FC00205EE704 +:109BF0000C205CE7487A0020460400202941767159 +:109C0000555555002004094000000940E1B6010007 +:109C10002DE9F0479046844A0D46097852F82840CD +:109C200086B027290DD8A97807290AD8E978042908 +:109C300007D82A795AB16A793AB1AA79921E072AC5 +:109C400003D3122006B0BDE8F08703297ED2216B32 +:109C500019B90021FBF7C0FC20634FF0000A5746FA +:109C6000A4F812A0FF22012104F13C00FBF768FDDB +:109C7000FF22012104F13400FBF704FDD4E90F01B8 +:109C8000DFF8AC9108606948E26BC770A8781646A7 +:109C9000082814D2DFE800F0040C0C040C0C0C0CA7 +:109CA000D9F8002060F38202C9F80020012004E006 +:109CB0000C32697802F05EF8002005F09DF8A97872 +:109CC000307961F3030030716978B08861F30B106B +:109CD000B080F07920F00301F171E87804287DD09C +:109CE000401EC7B2206BAA7910F8221F62F306014A +:109CF0000170B07920F00100B071287970B1206B4B +:109D0000AA796C30E91DEAF79FFBB07940F00100B9 +:109D1000B0712879697940EA8110F072D9F8002091 +:109D2000012161F34102C9F800206978D9F80020C7 +:109D3000404B1A4042EA0121C9F80010D9F800202E +:109D4000012161F30412C9F8002000E069E000205D +:109D500005F04AF8002005F03FF8F079394600F0A8 +:109D60000302687807F054FE2979F93000EBC1004E +:109D700080B200F51C7040F27121B0FBF1F0484355 +:109D80002D4980B2C862206BC17921F07C0120315D +:109D9000C171216B29480861216B29484861216BF9 +:109DA000E06B8860D4E90C02C16862F31E01C160F7 +:109DB000206B017E21F0010101762878F3F73BF951 +:109DC000216B4A7E60F305024A76206B017967F3C6 +:109DD000010101711B4890F8450100E01BE0216B77 +:109DE00004AA434681F82300216B0120C885CDF8E1 +:109DF00000A0CDE90102002213496FF00040FCF7FA +:109E0000DDFAC4F8900060B14FEA0820042103F0A5 +:109E1000A3FB002016E721F00300401CF07102278D +:109E200060E70C200EE70000487A0020460400207E +:109E300020040940FF00FEFF00000940294176711F +:109E40005555550030750020A9B701002DE9F043A4 +:109E5000044690F86D00A66800EB0010361D051949 +:109E6000F078676920F07C0087B01430F070787962 +:109E700007F10C0920F010007871387920F00F00FC +:109E8000401D387115F83A0F10B102281ED1D0E0EC +:109E900094F8890018B994F8880000287DD0F078EB +:109EA00020F07C001830F0700E2001F0D3FF79799B +:109EB00060F30411797194F888000028EED0002036 +:109EC00084F88800307820F00F003070307DC107B2 +:109ED00008D0410606D4717D01F03F01252901D348 +:109EE000272909D920F0400040F001003075707D2D +:109EF00020F03F002730707596F8200040F00100F8 +:109F000086F8200035F8031F308C61F34E00308452 +:109F100028887085707820F004007070E068FBF786 +:109F20004DFC6069FBF755FC2E8840F271204643DA +:109F3000A889FE36ED1E02210346022800D80846F5 +:109F400040F27121484381B2B5F80D000222022887 +:109F500000D8104640F271225043022280B2022BF8 +:109F600000D81346B5F807C0B5F8058040F2712255 +:109F70008DE80311534309F10802971CCDE90472DF +:109F8000D4E9200106F6C412FDF700FCF0B36D1C05 +:109F90002989A9F80C10698900E048E0A9F80E1099 +:109FA000FCF71EF8642280182F886A8841F10001AE +:109FB000974210D9D4E9202352EA03050BD040F28E +:109FC00071256F43BA1843EBE775831A71EB0503EC +:109FD00001D210462946002304F18002CDE9032373 +:109FE000194AFE258DE83400184B3246FCF76FFB0A +:109FF000606258B194F88800002815D094F86D007C +:10A00000401CC0B2032800D3002000E019E000EBA0 +:10A010000011214491F83A10032900D3002004F8DC +:10A020006D0F0120E076002007B0BDE8F08301202D +:10A0300046E7307820F00C00083020F00300801C48 +:10A0400043E70720F0E70000B19901004DB6010099 +:10A05000F0B506464C488BB050F82640206BE56BB7 +:10A060000146001D626B002C7ED000297CD0D4F804 +:10A070009010002978D1002D76D0A18B491CA183A6 +:10A08000417821F0040141701046FBF797FBA87955 +:10A0900020F0FE00A871687920F0A000687128689F +:10A0A00060B1817921F0FE0181712868417921F048 +:10A0B00080014171286821F020014171204601F0A2 +:10A0C00029FD072700258034D4E9023074E82012E6 +:10A0D00059185041CDE90810EAF7A4F990FBF7F1BF +:10A0E00007FB11004FF47A71DDE908234843C117DB +:10A0F00080185941CDE90801FBF772FF64228018EE +:10A10000DDE9083241F100011B1A8A4101D2CDE993 +:10A110000801DDE9082321463046FDF7FDF9002856 +:10A120002DD1E08908A90494CDE905011748CDE9AE +:10A130000205DDE9082340F6B830111843F10000AC +:10A14000CDE9001020346068FE30FCF757F9014675 +:10A150002067DDE90802C4E91A0234F82009B0F5E5 +:10A160007A7F00D269B100E008E02584080000D0C1 +:10A17000012040F6A84206A1EBF736FC00200BB008 +:10A18000F0BD401C20849EE7487A00209DB6010067 +:10A19000626C6535305F6C6C6D2E6300022905D1F1 +:10A1A000D0F8901011B9D0F8941009B10020704780 +:10A1B000C06D0028104601D0FDF7BABCFDF74BBBBF +:10A1C0002DE9F04F894A8146002052F829408DB090 +:10A1D000D4E92265A17A89071DD5A16C0860A27A0D +:10A1E000204604F14401520702D500F0F1F901E0E4 +:10A1F00000F0DFFA10F0FF0A7ED1A06C0060216B46 +:10A200007B480861D4E92201084307D10120A081DD +:10A21000484600F0F7F80DB0BDE8F08F606C0068BC +:10A220000068D0F80080D8F80070F87900F00302D8 +:10A23000A06D817DB888C0F3071007F0E9FB0346E5 +:10A240004046FDF7C0FFFE3383464FF000080393FE +:10A25000A089684B401CA081D4E92001CDF8008082 +:10A260008619CDE901974D4130462946039AFCF7FE +:10A27000DDF9C4F8980000287ED0A0892034401E63 +:10A28000ABF81000C4E91A65002020802067E7675A +:10A29000606714F8160C203CC0076ED0FBF7A0FED8 +:10A2A00064228718606C41F100060068006807901E +:10A2B000D0F800B09BF8070000F00302A06D817D8C +:10A2C000BBF80400C0F3071007F0A2FB0546606A64 +:10A2D0000C90D4E9222305F51671084496464FEAFE +:10A2E00080189C46B2EB080263F10003D11B73EBAC +:10A2F000060103D23A4600E075E03346E6890021C4 +:10A300009046BEEB00003C4A6CEB010CCDE902210B +:10A31000CDE9000C0AAFCDF81090CDE905670C9897 +:10A320004246FE30FCF76AF8C4F8900030B308AB40 +:10A330000799CDE90513314902AA0026A2E8420295 +:10A34000243405F1FE00D4E91921121A2C4B61EBDB +:10A350000601D21841F1FF31CDE90021DDE90A23E0 +:10A3600021688A1846EB03014FF49673D21841F125 +:10A370000003FCF743F802E013E025E021E020674A +:10A38000243CB8B108990A980A1A2046616C01F079 +:10A3900013FBD4F888100898091A584601F01EFBE0 +:10A3A0000FE0208C401C80B2208464287FF650AFE0 +:10A3B000032017E00021D4F89000FCF751FAC4F80C +:10A3C0009060D4F8940070B944344946606D2065BB +:10A3D0000020606520680068006800680068A0656B +:10A3E000FCF728FD8246504615E70000487A002019 +:10A3F000D6BE898E05B70100CDB7010073B5010047 +:10A40000D4FEFFFF2DE9F04F07466D489FB04FF097 +:10A41000000A50F827401AA95546E0890097039191 +:10A42000CDE9010A616A5346FE31664AC820FCF74D +:10A43000D4F8C4F89000606C0068D0F80090D9F8A7 +:10A440000060F07900F00302A06D817DB088C0F358 +:10A45000071007F0DDFA18A9CDE903158DE8A00271 +:10A460008046DDE91A12606A574B411845EB02003D +:10A470004FF4967211EB020C40F1000108F1FE025C +:10A480006046FCF724F9834618991A980A1A204660 +:10A49000616C01F091FAB1463668F07900F0030280 +:10A4A00054F8580F817DB088C0F3071007F0B0FA58 +:10A4B000024612A80EA9CDE90810444804A907963F +:10A4C0000A95A1C1616840F2E243491C488858439B +:10A4D000C317CDE90203088840F2E2414843C1179F +:10A4E000CDE90001DDE9183113EB080069414FF4B3 +:10A4F0009673C01841F10001FE321192FCF711F978 +:10A50000C4E90A01DDE91223C4E90C23583C0843DD +:10A5100020D1E06D40F2E2412C4BB0F803004843FB +:10A52000C117C4E9200112A802960F95CDE90305D1 +:10A53000CDE90057DDE9182012EB080168414FF41E +:10A5400096728F1840F100013846119AFCF7BFF857 +:10A550000E9040B300210F98FCF782F96434C4F8E0 +:10A5600030B00E9860634846FDF72DFE0546D4E9ED +:10A57000070140F2E2420023E9F722FF688024F855 +:10A58000020C688840F2E2414843C117C4E9070160 +:10A5900012991898091A484601F020FAA6631FB0CC +:10A5A0005046BDE8F08F54F8900F0021FCF758F9A1 +:10A5B00000215846FCF754F94FF0430A2560EEE7B6 +:10A5C000487A0020CDB7010073B5010005B701003E +:10A5D0002DE9F34F8FB083468679C08A0D9010988D +:10A5E000006800F0D5F85FEA000804D0D8F8004011 +:10A5F000A079C00703D0002011B0BDE8F08FFF2084 +:10A60000FBF78CF805004BD0287920F00F00C01D17 +:10A6100028719BF805008DF817009DF80A0000F0DE +:10A620004000001D8DF80A009DF8321004F10C0066 +:10A630000A18294602A8FFF7C7F9A879761E40F044 +:10A640000100A8719BF80500E872A988687AC1F337 +:10A65000071106F0FF09401A86B20195009570E0D7 +:10A6600004F10C0002A9054601F020F9A088C0F30E +:10A6700007119DF83300091A2844CFB20E905AE012 +:10A680008EBB0D980B3082B2FF2A00D9FF22B9F1A0 +:10A69000000F17D0002369465846FDF7B9FB98B163 +:10A6A00001980028A8D010992046C1F80480002104 +:10A6B000C8F800100A46FBF79BF96846FBF78CF9CF +:10A6C000072099E70123E6E70198B9F1000F0AD0C6 +:10A6D000817941F0010181719BF80510C172A9F1E6 +:10A6E000010000F0FF09BE4201D9384600E03046C3 +:10A6F000DDF804A0C5B22A46BAF80400C0F3071179 +:10A7000001EB0A000C300E99E9F79EFEBAF804003E +:10A710004FEA303000EB05604FEA3051781BC7B28A +:10A72000701BAAF8041086B20E9828440E900D985B +:10A73000401B80B20D90002FA2D120462468FBF769 +:10A740006BF9002C8CD10099C8F8001001980460B6 +:10A7500010980199416013E000230B22584610998C +:10A76000FDF756FB78B910984068817941F00101F6 +:10A7700081719BF80510C172A9F1010000F0FF0979 +:10A78000B9F1000FE8D110984068046033E7000089 +:10A7900000B5024609E000BF02F10C00FDF70CFD18 +:10A7A000800601D5104600BD1268002AF4D10020B1 +:10A7B00000BD2DE9F0418CB00F460868FFF7E8FFB7 +:10A7C0000025002878D00468A079C00774D03CE048 +:10A7D000A0886946C0F3071604F10C00804601F01A +:10A7E00065F8002868D09DF80200400763D5A0886E +:10A7F00004F10B03C0F307119DF82B000A1A00EBBC +:10A8000008011844E9F720FE9DF80200002220F01C +:10A8100004008DF8020021466846FFF7D5F8A088AD +:10A82000761E66F30B10A080A07920F00100A071C5 +:10A830009DF82B00401EC0B28DF82B00A188C1F3FB +:10A840000711884204D025462468002CC0D132E08C +:10A850008CB315B9254624686CB3A0886946C0F34B +:10A86000071605F10C00804601F020F89DF8020063 +:10A8700020F010008DF802009DF82A1004F10C0061 +:10A880000A1821466846FFF79FF8A988F01E60F372 +:10A890000B11A9809DF82B0005F10F01321A01441C +:10A8A0004044E9F7D1FD7D60002228681146FBF79E +:10A8B0009FF80020286000200CB0BDE8F081000067 +:10A8C00030B50546D1E90030D0F8004003F10C0066 +:10A8D000FDF75FFC002804D0697901701B68A34272 +:10A8E000F4D130BDF0B505463C308BB0FF220321DA +:10A8F0000746FAF725FFB0B105F134002522012102 +:10A900000646FAF7BFFE70B16946284600F0E2FB42 +:10A9100004000AD03846FBF75FF83046FBF70EF824 +:10A9200020460BB0F0BD0720FBE7EC6B4FF00106B3 +:10A93000207920F00F0000F107002071E07920F06D +:10A940000C00E071607920F0100060718DF80160FA +:10A950004FF018008DF80200A86D817D29B940786C +:10A96000400602D558208DF8020000222146684694 +:10A97000FFF72AF82468207920F00F0000F1070083 +:10A9800020719DF82910E07961F3C30020F00400E4 +:10A99000E071607920F0100060718DF801604FF077 +:10A9A00009008DF80200A86D4078400602D54920C4 +:10A9B0008DF80200A86D407840070BD59DF8020085 +:10A9C00040F002008DF80200A86DC17AE07961F3D1 +:10A9D0008200E071002221466846FEF7F5FF2168FB +:10A9E000087920F00F00083008719DF82920C879F7 +:10A9F00062F3C30020F00400C8714879002220F0FF +:10AA00001000487100208DF8010003208DF802002D +:10AA10006846FEF7D9FF002083E730B5044634309E +:10AA20008BB00546FAF78AFFFF22022104F13C00B1 +:10AA3000FAF786FE30B3252201212846FAF722FED6 +:10AA400000B36946204600F045FB00281BD1E16BAE +:10AA50004FF00005087920F00F0000F107000871A1 +:10AA6000C87920F00C00C871487920F010004871B6 +:10AA70008DF801504FF018008DF80200A06D827D16 +:10AA80001AB108E007200BB030BD4078400602D56F +:10AA900058208DF8020000226846FEF795FFB0B3FB +:10AAA000E06B0168087920F00F0000F107000871E1 +:10AAB000C87920F00C00C871487920F01000487166 +:10AAC0008DF801504FF008008DF80200A06D40781D +:10AAD000400602D548208DF80200A06DB0F80100B4 +:10AAE000420715D59DF8020040F002008DF80200E3 +:10AAF000A06DC27AC87962F38200C871A06D4078F7 +:10AB0000800613D49DF8020040F0030006E014E034 +:10AB100080060BD49DF8020040F001008DF8020081 +:10AB20009DF82920C87962F3C300C87100226846E5 +:10AB3000FEF74AFF08B10020A5E7FF20A3E710B504 +:10AB400004468CB0FF2201213C30FAF7F9FDE8B34E +:10AB50002522012104F13400FAF794FDB0B36946CF +:10AB6000204600F0B7FA002842D1E16B087920F0C6 +:10AB70000F0000F107000871C87920F00C00C871BF +:10AB8000487920F0100048714FF000008DF8010066 +:10AB90008DF80200A06D4078800608D401208DF861 +:10ABA00002009DF82920C87962F3C300C871A06D26 +:10ABB0004078400605D59DF8020040F040008DF831 +:10ABC0000200A06D407840070DD500E012E09DF82E +:10ABD000020040F002008DF80200A06DC27AC87930 +:10ABE00062F38200C87100226846FEF7EDFE002085 +:10ABF0000CB010BD0720FBE770B505468CB0FF22F6 +:10AC000003213C30FAF79CFD00287CD0252201214D +:10AC100005F13400FAF736FD002874D0694628465D +:10AC200000F058FA00286FD1EC6B002632462079EC +:10AC3000214620F00F00C01D2071E07920F00C00AB +:10AC4000E071607920F0100060718DF801601820CB +:10AC50008DF802006846FEF7B7FE2468122205F15F +:10AC60006001207920F00F00C01D2071E07920F0F4 +:10AC70000C00E071607920F0100060718DF80160C7 +:10AC800028208DF802000DF11500E9F7DDFBA889F9 +:10AC9000ADF82500A86D4078800608D429208DF8ED +:10ACA00002009DF82910E07961F3C300E071A86DFE +:10ACB0004078400605D59DF8020040F040008DF830 +:10ACC0000200A86D407840070BD59DF8020040F0C7 +:10ACD00002008DF80200A86DC17AE07961F382006C +:10ACE000E071002221466846FEF76EFE2168087971 +:10ACF00020F00F0000F107000871C87920F00C0067 +:10AD0000C871487901E015E012E020F010004871A8 +:10AD10008DF801608DF80260E86D4079400602D53B +:10AD200040208DF8020000226846FEF74DFE00200C +:10AD30000CB070BD0720FBE770B505468CB0FF2254 +:10AD400003213C30FAF7FCFC38B32522012105F140 +:10AD50003400FAF797FC00B36946284600F0BAF9C8 +:10AD600000281BD1EC6B4FF00206207920F00F0079 +:10AD700000F107002071E07920F00C00E0716079AB +:10AD800020F0100060718DF801604FF018008DF810 +:10AD90000200A86D817D19B108E007200CB070BDDC +:10ADA0004078400602D558208DF802000022214646 +:10ADB0006846FEF709FE2468207920F00F0000F1B4 +:10ADC000070020719DF82910E07961F3C30020F09D +:10ADD0000400E071607920F0100060718DF801606E +:10ADE0004FF009008DF80200A86D4078400602D5AA +:10ADF00049208DF80200A86D407840070BD59DF8DA +:10AE0000020040F002008DF80200A86DC17AE079DE +:10AE100061F38200E071002221466846FEF7D4FD0E +:10AE20002168087920F00F0000F1070008719DF8F3 +:10AE30002920C87962F3C30020F00400C871487962 +:10AE400020F0100048714FF000008DF801004FF025 +:10AE500001008DF80200A86D4078400602D541201F +:10AE60008DF8020000226846FEF7AEFD002095E74F +:10AE70002DE9F0478F49804651F82840E9F7D2FA8A +:10AE8000252690FBF6F106FB1100C5B20CB101209E +:10AE900000E0002040F6941287A1EAF7A5FDDFF854 +:10AEA0002492E36B1BB1607808B12078F0BB04F109 +:10AEB0004400EBF7ABFE68B1A06D4078C0072046B8 +:10AEC00002D0FFF70FFD01E0FFF739FE00286DD13A +:10AED000E36B30E0A06C002101602046656CFCF75C +:10AEE000CDFA034605E02846FDF78DF900B1037061 +:10AEF0002D68002DF7D16CE01846FDF70BF90746D9 +:10AF00001846FDF72AF927B1628B398862F30B01E5 +:10AF1000398048B1017865F305010170E079284472 +:10AF2000B0FBF6F106FB1105587900E003E020F0D4 +:10AF3000200058711B6818680028DDD1587902215B +:10AF400020F020005871606C8088C0F3071204F173 +:10AF500044000546FAF7F4FB38B304F13C012846F7 +:10AF6000EBF766FE656C00272868066806F10C0A98 +:10AF700070686860B0885146C0F3071205F10C0094 +:10AF8000E9F762FA7F1C2D68FFB2022FF0D3606CE4 +:10AF900099F803134A4621FA08F1C37901F0010137 +:10AFA00061F30103C37101230BE00720BDE8F087C3 +:10AFB0005B1C032B05D192F8041321FA08F101F070 +:10AFC00001010068C57961F30105C571A56C854271 +:10AFD000EED1A06D08EB4802666C817A09EB420065 +:10AFE000FE3004F1280200F0B7FD0500DED1206B31 +:10AFF0003549001DC16035490161417821F00801E2 +:10B000004170A16D8A7C418862F389014180C178D9 +:10B0100021F07C014031C170A16D0A7D017862F39D +:10B0200001010170A16DC97CC177616C4160626BE7 +:10B03000816862F31E018160427D017D22F03F0242 +:10B0400021F040012732427541F00101017520498C +:10B050001830FBF7DCFEF07900F00302A06D017DF3 +:10B06000B088C0F3071006F0D3FC00F5967189B2E2 +:10B07000E18100EB4100226B0A2100F50270D185CD +:10B080006062A26D40F27123D2F8031021F07F417B +:10B090004B43834205D3D2F8060020F07F40814223 +:10B0A00001D9122504E0606CFAF793FBA06C0060F4 +:10B0B00028467BE7487A0020626C6535305F6C6C0F +:10B0C0006D2E630030750020D6BE898E5555550013 +:10B0D0006B76002070B5054600200C4681F82800EC +:10B0E000698B208A61F30B002082A86DC17D607C92 +:10B0F00061F307106074A07C20F03F00A074A96D7C +:10B100008A7D217D62F3471121751249097805294D +:10B1100002D340F0400001E020F0400009346072AA +:10B120002846FCF7ABF9A077A86D0B4AC1682160EF +:10B13000008AA080A86D093C04F12903817A288A3D +:10B1400000EB400002EB4000FE30E21C00F042FE4B +:10B15000002070BDF40100203075002010B50446B9 +:10B16000C06C002809D10021402002F00BF8FF211B +:10B17000E0640170E06C80F8201010BD30B50C4820 +:10B1800087B00825046A606B2065FAF717FB00207A +:10B19000608204AA01218DE8070002462B4605497A +:10B1A0006FF00040FBF70AF9C4F8900007B030BD1B +:10B1B000487A0020E1B601002DE9F04116461D460F +:10B1C0000F4604460202062305212C2001F0E4FF6D +:10B1D0001221017084704770A0F803604571BDE8CA +:10B1E000F04102F039B910B51C46012301F0D4FF3B +:10B1F0000470BDE8104002F02FB910B51C460123C1 +:10B2000001F0CAFF0470BDE8104002F025B910B586 +:10B21000044604235A020521252001F0BDFF448085 +:10B2200000210170BDE8104002F016B92DE9F04789 +:10B230000C4606460188408881427DD8727B072AE9 +:10B24000FBD8B27B032AF8D8B279032AF5D87279F1 +:10B25000032AF2D820296FD3B0F5804FEDD87D4D69 +:10B2600009204FF0000955F824104FF00108496DEE +:10B27000887155F82410496D81F8079030790528B8 +:10B280005AD2DFE800F078036995080055F82400E9 +:10B29000406D80F8078055F82400222234300121C7 +:10B2A000FAF7F0F955F8240002213C30FCF7AEF82B +:10B2B00055F82400406D80F8068055F82400C76BCF +:10B2C000387968F303003871B88820F47F60C030A3 +:10B2D000B8800E2000F0BEFD0146787961F30410BD +:10B2E00020F0800040F02000787155F82400406D77 +:10B2F000007A0028F87902D040F0080001E020F040 +:10B30000080020F00400F871B179F01D00F04AFC4B +:10B31000002866D155F82410B079496D487255F867 +:10B320002400D6F80710406DC0F80A10B6F80B10CC +:10B33000C18155F8240000E08AE0406D417AF87937 +:10B3400061F38200F87155F82400406DD0F80A10BE +:10B35000F960C089388244E055F824002222343054 +:10B360000321FAF78FF955F8240002213C30FCF74D +:10B370004DF806202AE055F824002222343003211B +:10B38000FAF780F955F8240002213C30FCF73EF82A +:10B3900055F82410496D81F8069055F82400C76BC4 +:10B3A0000E2000F057FD797960F30411797118E0EF +:10B3B00055F82400222234300121FAF763F955F8B8 +:10B3C000240001213C30FCF721F8022055F824101C +:10B3D000496D887155F82400C06B417921F0100146 +:10B3E00041713079012826D0042824D055F8241042 +:10B3F000B07B496D48713079012822D055F824106E +:10B400007088496D4880308855F82410496D08804F +:10B4100055F824107079496D0872012106F10D006C +:10B4200000F008FCA0B155F82410707B496D08713C +:10B430000020BDE8F08755F82410496D81F805908B +:10B44000D9E755F824104FF40060496D4880DBE7D8 +:10B450001220EEE7487A002070B5022604460670F6 +:10B46000012060700D460846F7F706F984F82A00B7 +:10B470002879002100F00F00A07007280AD2DFE829 +:10B4800000F00B1A04090B0907000320A07003E069 +:10B49000A67001E001280ED0A888C0F30710801F15 +:10B4A000C2B2A2721F2A10D805F11E0104F10B00CE +:10B4B000E8F7CAFF00E0A172A8696060A88B20814C +:10B4C0006879C009E070012070BDA172002070BDD4 +:10B4D00070B5C86B14460D46007900F00F000128C6 +:10B4E00003D06078032805D101E0122070BDE07818 +:10B4F0001F2802D900200870F7E70846FFF72EFE44 +:10B50000E86CE278401C211DE8F79EFFE96CE078CA +:10B510000870002070BD70B5507814460D460328A1 +:10B5200002D1E0781F2803D900200870122070BDD6 +:10B530000846FFF713FEE86CE2782130211DE8F79A +:10B5400083FFE96CE07881F820000120287000205A +:10B5500070BD10B5807A1446C043800708D10846F4 +:10B56000FCF7E6FA2046BDE81040022101F0F4BFE6 +:10B5700010BD3EB51225DDE906148DE8320000F05D +:10B5800013F83EBD3EB51325DDE906148DE8320003 +:10B5900000F00AF83EBD3EB51425DDE906148DE83D +:10B5A000320000F001F83EBD2DE9F84308A98046BD +:10B5B000B1E881021E4951F82050B5B3FE2016189B +:10B5C00043F1000338462C6BFCF7C7FD396802468F +:10B5D000487920F080004871E77969F38607E771C0 +:10B5E000A86D877D207967F301002071AF6DBF7D65 +:10B5F00067F383002071607920F004006071207E81 +:10B6000020F0010020761078627E60F305026276F9 +:10B61000A1602846FBF7A6FFCDF80080286B3246D4 +:10B62000001DFAF7BFFABDE8F883FFE70020FAE74C +:10B63000487A002038B50546DDE90404A21843F134 +:10B6400000030095FAF7AEFA38BD0000F8B50646DB +:10B65000DDE906450649A068001DAA18256843F1E2 +:10B6600000030D6464684C640096FAF79BFAF8BD19 +:10B6700000000940F8B50446DDE90610FE25521920 +:10B68000054D0E6843F100032E6449686964009417 +:10B69000FAF788FAF8BD0000000009402DE9F843E8 +:10B6A0008146DDE90858FE201718686D2E6B43F1BE +:10B6B0000004361D0079FCF747FA08481FFA88F1A4 +:10B6C000C162A96A0164E96A41643A462346304688 +:10B6D000CDF80090FAF766FABDE8F883000009405B +:10B6E00038B5074C049954F82110FE240090121923 +:10B6F000086B43F10003001DFAF754FA38BD00004F +:10B70000487A00202DE9F8438146DDE908072549FC +:10B7100051F82050F5B32C6BFE201618E07943F158 +:10B72000000820F07C004830E071207E20F001000D +:10B730002076A889401E81B205F17200EBF7B1FABC +:10B74000617E324660F305016176A86D4346817DD6 +:10B75000207961F301002071607920F004006071AC +:10B76000207E40F040002076A889401E6083A760BC +:10B77000D5F869002061B5F86D00A08295F86F00DA +:10B78000A075787920F080007871CDF80090286B52 +:10B79000001D00E003E0FAF705FABDE8F883002099 +:10B7A000FBE70000487A002038B5074C049954F8AC +:10B7B0002110FE2400901219086B43F10003001DB4 +:10B7C000FAF7F0F938BD0000487A00202DE9F84377 +:10B7D0008146DDE90808304915461E4651F82040EB +:10B7E000F4B3A06D407AFCF7AFF9216BFE202D1861 +:10B7F000C87946F1000620F07C004030C871A06D89 +:10B80000027D087962F301000871487920F0040094 +:10B810004871606C8860087E20F0400040F00100B4 +:10B820000876487E20F03F0027304876676C606BD2 +:10B83000797921F08001797139684A7922F08002A2 +:10B840004A71396809684A7922F080024A7141795F +:10B8500021F0200141713868B84205D0012004E090 +:10B86000FFE70020BDE8F883002040F621120BA17D +:10B87000EAF7BAF839462046FBF774FE0A491FFA80 +:10B8800088F0C862CDF80090206B2A46001D334630 +:10B89000FAF788F9E6E70000487A0020626C65351F +:10B8A000305F6C6C6D2E6300000009402DE9F041A3 +:10B8B000074604460078012510F03F000E46087048 +:10B8C00021784FEA9111717000F1010186F82B1077 +:10B8D00053D06078B07004F10204C10709D0216828 +:10B8E000C6F80310A188A6F8071004F106044FF06B +:10B8F000070581070AD52168C6F80910A18805F156 +:10B900000605A6F80D1004F106042DB2410705D571 +:10B9100014F8011B05F10105F1732DB2010705D5DE +:10B9200034F8021B05F1020531822DB2C10608D59B +:10B9300021887182A17805F10305317504F10304B2 +:10B940002DB280060AD51222214606F11500E8F72D +:10B950007BFD05F1120504F112042DB2B07840060A +:10B9600005D514F8010B6D1C86F827002DB2307830 +:10B97000A84207DA0020BDE8F0810020B07086F808 +:10B98000280004E0401B06F8280FE01BB0700120DF +:10B99000F1E770B504460D461830FFF787FF002821 +:10B9A00007D0A18895F82B00C1F30711884201D870 +:10B9B000012070BD002070BD2DE9F041C7891646F9 +:10B9C0000C46002531462046FCF7EEFA6D1CF61BAE +:10B9D0002468EDB2032DF5D3BDE8F08100B50B4628 +:10B9E000FCF7F1FB0A498B42417804D221F0200197 +:10B9F00041701E2104E041F0200141704FF4967126 +:10BA0000B3FBF1F1028861F30C02028000BD00007B +:10BA1000C4BF030070B50546807801F10204C00779 +:10BA200007D0D5F803002060B5F80700A08004F126 +:10BA30000604A878800707D5D5F809002060B5F876 +:10BA40000D00A08004F10604A878400702D5E87B29 +:10BA500004F8010BA878000702D5288A24F8020B05 +:10BA6000A878C00605D5688A2080287DA07004F1DA +:10BA70000304A878800607D5122205F11501204697 +:10BA8000E8F7E2FC04F11204A878400602D595F824 +:10BA900027002070012070BD10B50121827800239D +:10BAA00042B3D40700D00721940702D501F1060163 +:10BAB00009B2540702D501F1010109B2140702D5F8 +:10BAC00001F1020109B2D40602D501F1030109B264 +:10BAD000940602D501F1120109B2520601D5491CA2 +:10BAE00009B290F82820114409B23F2909DD0370FA +:10BAF000002010BD0370012180F82B1080F8283041 +:10BB000006E00170491C80F82B10891A80F82A1071 +:10BB1000012010BD2DE9F041C76CC46B002F19D076 +:10BB200000264FF0FF088CB107EB46152A781F2A34 +:10BB30000CD8691C04F10C00E8F786FC2978A08871 +:10BB4000891D61F30B10A08085F800802468761CA5 +:10BB5000022EE8DBBDE8F08170B51446054631B130 +:10BB600001290DD0022902D003290DD108E00C488B +:10BB70000A49054605F063FB30B92246002107E07B +:10BB8000064905F05CFB08B1122070BD2246012178 +:10BB90002846FBF731F9002070BD0000054802007F +:10BBA0006476002010B5C3780268002463F31F6236 +:10BBB000838849B113F4404114D0B1F5804F21D0AE +:10BBC000B1F5404F2ED104E0184905F038FB04468A +:10BBD00027E0C3F30D00104324D0521C24D14FF6AC +:10BBE000FF701BE0C3F30D01114305D0521C04D1BB +:10BBF000A3F57C51FF3900D101240D4905F01FFB4D +:10BC000080B90EE002F07F40C3F30D01084309D074 +:10BC1000FF20B0EB126F07D147F6FF70834201D0CF +:10BC200002E00CB1122010BD002010BD054802003A +:10BC30006476002070B502780024D20801D0012972 +:10BC40001BD00023002907D817E0042B04D1027869 +:10BC5000520901D0262410E00578002225FA02F6C8 +:10BC600006F00106521C3444D2B2E4B2082AF5D3DD +:10BC70005B1C401CDBB28B42E7D3204670BD00004A +:10BC8000094991F8EC2062B1420901EB820100F010 +:10BC90001F02D1F8F01001209040014201D0012094 +:10BCA0007047002070470000307500208C2101484B +:10BCB000E8F7F1BB94760020134A10B5D17804461A +:10BCC00002291FD09078B8B10020907001B110887F +:10BCD0000221D170FFF79BFAFAF7E2F90B4850F80E +:10BCE0002400D0F89000FAF79DFF20022146BDE81D +:10BCF00010400122FCF7ACBA012903D1BDE8104085 +:10BD0000FFF73CBA10BD000046040020487A00202E +:10BD100070B50446E8F786FB1449C2B214488B7824 +:10BD2000C55C0B7865F31F1323708B780D78C35CAB +:10BD30001B0143EA151363708B78C35C104663F3F1 +:10BD40001F10A0700A4B48789B1C185C000140EA49 +:10BD50001210E07048780322401CB0FBF2F302FBA3 +:10BD6000130048700878401C087070BD29760020C8 +:10BD70000048020070B5002415460E4608280FD270 +:10BD8000DFE800F00E04060E08180A0CF02411E09B +:10BD9000AA240FE0FF240DE00F240BE0552409E056 +:10BDA000082801D2012000E0002040F20B2205A16A +:10BDB000E9F71AFE224631462846BDE87040E8F70A +:10BDC00063BB0000626C655F6C6C6D5F7574696C61 +:10BDD0002E63000070B51C461546064611B10129B8 +:10BDE00012D10DE00D490E4805F029FA60B9002086 +:10BDF00020700C48D0F834112960B0F838010AE0FE +:10BE0000064905F01CFA08B1122070BD012020700F +:10BE100030682860B088A880002070BD0548020006 +:10BE2000647600203075002002490A680260496883 +:10BE300041607047743E020005490122824091F83A +:10BE40004611114201D001207047002070470000C8 +:10BE500030750020064900F0070201EBD0010120F7 +:10BE600009789040014201D00120704700207047BE +:10BE7000743E020000EBD10001F0070200780121BE +:10BE80009140084000D0012070470000044991F81B +:10BE90004611884301D00020704701207047000000 +:10BEA000307500202DE9F041154C00250126804613 +:10BEB00016FA01F6C5EBC507E05D68B13919491CF2 +:10BEC000404605F0BCF9A8B1C5EBC500205C304286 +:10BED0000DD00020BDE8F081C5EBC5000119D8F8F0 +:10BEE000002041F8012FB8F804008880E05D30435D +:10BEF000E05503E06D1CEDB2142DDBD30120E9E722 +:10BF0000947600200021417181714FF400624280DB +:10BF1000028007220271034A92F84521027441749B +:10BF2000704700003075002005480021102200F8FD +:10BF3000011C4173428008228280417070470000DA +:10BF4000767500202DE9F0410D4D0F460646002480 +:10BF500055F8240048B190F82810B14205D13C3082 +:10BF600006223946E8F7A9FA38B1641CA4B2082CB5 +:10BF7000EED34FF6FF70BDE8F0812046FBE70000EE +:10BF8000EC7A00202DE9F041114E0D46174656F887 +:10BF90002540804694B16069F6F73FF880B10020F3 +:10BFA00046F825006069F5F7A5FD0021404601F03F +:10BFB000D3FA2046BDE8F04100F046BF002102E080 +:10BFC000277002214046BDE8F04101F0C5BA0000EB +:10BFD000EC7A00200649002051F82020002A05D0E4 +:10BFE000401C80B20828F7D34FF6FF70704700005E +:10BFF000EC7A002030B591F8284018320023022C4A +:10C0000025D391F82A4022441DE000BF12F8014BCD +:10C01000002C1CD023445B1CDBB29D4217D312F8CA +:10C02000015B282D0DD1156840F8425F9588858009 +:10C030009579857110F81E5C45F0010500F81E5CCD +:10C0400042382244521E91F828509D42DED830BD1D +:10C0500070B5064616480D4650F82500816E19B198 +:10C060003E224A70846E0FE00F20FFF709FEB8B140 +:10C070000323324605214FF0041001F08DF8102102 +:10C080000170A0F801500446012229463046FFF70E +:10C0900079FF002C0BD02046BDE8704001F0DCB9E0 +:10C0A00029463046BDE870400122FFF76BBF70BDE6 +:10C0B000EC7A002010B500220449042000F090FE24 +:10C0C000BDE8104020210248E8F7E5B984480200A5 +:10C0D000EC7A002070B504461A4D042000EB0426CB +:10C0E00055F8240018B30020382217A1E9F77CFC8A +:10C0F0000021702001F002FB45F8240000281FD029 +:10C100007021E8F7C8F955F82400124A1249C48092 +:10C1100055F824303046F5F795FC55F82410486161 +:10C1200038B13046BDE87040012101F015BA012058 +:10C13000DAE7E1B23046BDE870400122FFF722BFE6 +:10C1400070BD0000EC7A0020626C6535305F6C6C6D +:10C15000702E630065C30100A9C301002DE9F04101 +:10C16000884601781E461746C90702D00024174D9D +:10C1700026E041785A7CB1EB121F0AD18178B9428E +:10C1800007D1C11C404605F05AF810B10120BDE8A6 +:10C19000F0810020FBE700BF05EBC401727C91F841 +:10C1A000A400B0EB121F09D191F89D00B84205D14F +:10C1B0009E31404605F043F80028E7D1641CE4B204 +:10C1C00095F89C00A042E7D8E3E700003075002016 +:10C1D00070B51546114A002492F8D800430701D5DE +:10C1E0000C2411E040F0080082F8D80008880828E4 +:10C1F00012D20B4951F8201071B1C1B2042202EBE6 +:10C2000000200122FFF7BEFE224642F246012846E8 +:10C21000EEF72AF9002070BD4224F5E730750020C2 +:10C22000EC7A00202DE9F0410D461D49C2F30720AC +:10C23000904651F82040002724B314F1240621D061 +:10C24000A87810B36879022800D21227082800D9EC +:10C2500011276169496B11F8222F60F306020A70F9 +:10C2600060696A79A91D406B6C30E8F7EDF8606988 +:10C27000E978406B10F8202F61F34512027028799D +:10C2800018B901E0422701E0FF20B0702B883A4640 +:10C2900042F253014046EEF7F9F80020BDE8F08184 +:10C2A000EC7A002010B51346C2F30720897800F01D +:10C2B000B5F9024642F259011846EEF7D5F80020CA +:10C2C00010BD00001046C2F30721044A10B552F811 +:10C2D00021200AB1FFF7BCFE002010BDEC7A00203F +:10C2E0002DE9F0471948C2F30727914650F8274037 +:10C2F0000E4691F80880484600F0B0FE050022D0B6 +:10C300000CB3616930684A6B90421CD1B8F1170FC9 +:10C3100008D040F283320EA10020E9F765FB022D20 +:10C3200008D010E03046F5F7F1FC30466169F5F7CA +:10C330003FFDF4E7207808B1012200E000223946F1 +:10C340004846FFF71FFE0020BDE8F087EC7A00208A +:10C35000626C6535305F6C6C702E63000020704736 +:10C36000002070472DE9F041CD88042000EB05271F +:10C3700091F824000C46810702D594F8306000E063 +:10C38000012620F0020084F82400384600F066FE02 +:10C39000012807D1EAB2334621463846BDE8F041CC +:10C3A00000F022B8BDE8F08138B514460546927910 +:10C3B0000B46042000EB0221A88858B10020009011 +:10C3C000204600F03BFB00280CD12846BDE8384051 +:10C3D000F5F723BE009313460A462146284600F08F +:10C3E00093FBF0E738BD00002DE9FF4F48690C468C +:10C3F00001F12407466B474985B016F8040F4FF04A +:10C400000008C0F381001D4631F8100087F8038052 +:10C4100000F1EA09B87808B1012100E00021606963 +:10C42000383000F07BF8A089C246284480B2A08151 +:10C430002189DFF8E4B029442181E289216902FBE6 +:10C4400000112161D4E91423A0FB02C508FB0252AC +:10C4500000FB0325D4E916021CEB000804F11800C8 +:10C46000554104903878C1070DD02189B4F8472090 +:10C47000914208D320F00100387004F1420106F126 +:10C480001800FAF7C4FC94F82510307861F38300A3 +:10C49000307021890498EAF704FC717D012260F371 +:10C4A0000501717530462169FBF772F820696FF05C +:10C4B000E90109EB4002CDE9002BB8EB000265EB86 +:10C4C0000A00CDE90246521840F1FF336069F5F7E2 +:10C4D0008BFD6069406C18B1012009B0BDE8F08F98 +:10C4E000D4E9142012EB08084541E1892069084489 +:10C4F0002061A089401C80B2A0812189491C218132 +:10C50000F9898842AED907990598FFF7A1FD002067 +:10C51000E3E70000C63E02002DCC010070B50568BF +:10C520000E462C46204616B1F9F724FB01E0F9F738 +:10C5300013FB2468AC42F5D170BDF8B504460D4636 +:10C5400090F8270094F82610164688421AD2142034 +:10C55000FFF796FB002815D0E879000612D5A06BEE +:10C5600010B1297C8909417194F827002B46401CA1 +:10C5700084F82700009660692289E188406B001DDD +:10C5800000F064F8F8BD00002DE9F04788468C6B98 +:10C590008146998892F82B00C1F3071188422DD269 +:10C5A000091A1833CDB2C61826E0E079C0F1F701B8 +:10C5B000CFB2BD4224D904F1080108443A463146BD +:10C5C000E7F742FFF720E0710120A071E81BC5B238 +:10C5D0003E44FF234A4605210F4800F0DDFD074693 +:10C5E00020683860606878600020F871404600F08C +:10C5F00093F83C46C8F83870002DD6D1BDE8F087D6 +:10C60000C1B204F1080008442A463146E7F71CFF8E +:10C61000E0792844E071F1E70500040008280DD214 +:10C62000094A52F8200048B1243007D00029017887 +:10C6300006D021F0040101700020704742207047AD +:10C6400041F00401F7E70000EC7A00202DE9FC5FDF +:10C650000746007F0C9C1D4693468A46800601D4FF +:10C66000022600E00126B87F00F07F08287C8109BF +:10C6700008D002214FF00008B1EB901F01D1022633 +:10C6800000E0012600F01F00314605F0DAF981468E +:10C69000012000F0C1FB002837D10D2101EB490337 +:10C6A000224605211A4801F0ABF804002DD01520D0 +:10C6B0002070A4F801A0A4F80AB0A87900F03F0007 +:10C6C000E0702846F5F7D8FF00EB80004000A0801E +:10C6D00010486837334690F8FC02A071287C4A461F +:10C6E0008009E0712672287AC0F3C000607284F875 +:10C6F0000C90CDE90078696904F10D0005F0A8F906 +:10C700002046BDE8FC5F00F0A7BEBDE8FC9F00002E +:10C71000060004003075002070B50546846B0E20BD +:10C72000FFF7AEFA38B195F82400400703D420464D +:10C7300000F092FE03E0A4F1180000F041FC00209C +:10C74000A86370BD816B002903D002228A71FFF7B4 +:10C75000E3BF70472DE9F04F8DB00546DDE918A91C +:10C76000887D394FDDF858B00C4680064FF496733B +:10C7700001D41E2000E01846B4F815104FF6FF78DB +:10C78000C1F30C014143002689F80060607820BBAA +:10C79000A0785FEA806C20D55FEA007C1DD59942C5 +:10C7A0001BD3A978FF2915D1C00716D0507923468D +:10C7B000C009A870D4F80300C5F80300B4F8070056 +:10C7C000A5F807005079E11CC209D7F88800FFF7E7 +:10C7D000C5FC10B1AA78012A03D940460DB0BDE8C6 +:10C7E000F08FD7F88810B4F8177009314B88098892 +:10C7F000D800B0FBF7F00A2780B20A2900D23946E8 +:10C8000009390746884200D239460DF1680E89B2CF +:10C81000BEE880110DF1180ECDF814A0AEE8CB11D2 +:10C82000208A617CED1CCDF80090CDE90125C0F394 +:10C830000B000909CDE903105A4604F11500179BB6 +:10C8400000F004F8CAE70000407500202DE9F05F11 +:10C8500092469B460546DDF858800A9FFFF7BAFBD3 +:10C8600006464FF0010908283DD2FFF733FC4D483A +:10C8700050F8264087F80090A4B30420002200EB73 +:10C8800006293A701498207104F124000F99417020 +:10C890000B9901710C9904F1500C0B68E3638988C2 +:10C8A000A4F840100D9941710E99E185698840F214 +:10C8B000E24359434FEAE173ACE80A0C1099C18195 +:10C8C0001199818112990182297801721599C1F318 +:10C8D0004003017863F3820101706878800607D411 +:10C8E0001E2007E001E087F800903046BDE8F09F89 +:10C8F0004FF496702988C1F30C014143D4E91630F6 +:10C9000059185041C4E916106A78520606D54FF4FA +:10C910001612891840F10000C4E91610287A41095E +:10C920006888F9F7DDF9E081298A218161815FEA70 +:10C93000080100D0084620616069426B6868121DDA +:10C940009061287A117F60F304011177B5F80D002A +:10C950001082E87B9074D5F80900D060D5F80910F2 +:10C96000183204F11800EAF7BAF91398F2B2C3B218 +:10C9700021464846FFF738FD58B168880A2100EB88 +:10C98000400001EB4000C2084946074800F02EFE77 +:10C99000ABE7F1B201224846FFF7F4FA4FF6FF7019 +:10C9A000A4E70000EC7A0020080004002DE9F04F15 +:10C9B0008DB00446DDE9185AB4F80510B5F8030047 +:10C9C0009046C000B0FBF1F086B2B5F801200A2015 +:10C9D000DDF85CB0994631460A2A00D20246093A8F +:10C9E000914200D311468FB2E7F71CFD697901230C +:10C9F0008B4007219943CDE909B14FF0000CCDE9F7 +:10CA00000BCAB5F80310A27ECDE90771CDE9052662 +:10CA1000617E80B201F00F02CDE9032004F11B0317 +:10CA2000C1F30011CDE901131698009042464B4620 +:10CA3000E01CFFF70BFF0DB0BDE8F08F2DE9F041D2 +:10CA40008CB01D46129E88460446002706B13770FA +:10CA50006879800656D5287A10F02E0F52D1ECB3A3 +:10CA600069461846FEF795FFC0B342462946204660 +:10CA7000FFF763FD94F82B0068B19DF802000007F2 +:10CA800009D5BDF81000E18DC0F30B00884239D004 +:10CA9000E08584F82B700EB1012030702A4669467B +:10CAA0002046FFF7A7FAA66BC6B12846F5F7E4FDC6 +:10CAB00030719DF80200400602D59DF82700F07005 +:10CAC0002B466A4621464046FFF75EFD9DF8020070 +:10CAD000C0060CD4A06B8771204600E012E0FFF77F +:10CAE0001BFE14F8240F40F0020020700AE0BDF88D +:10CAF0001300C00403D001200CB0BDE8F081204633 +:10CB0000FFF720FE0020F7E72DE9FF4F83B04FF03D +:10CB10000005109E9A460C0083468DF8045009D0FB +:10CB20000846FFF70FFE7079800603D5307A10F0C3 +:10CB30002E0F03D0002007B0BDE8F08FA84606F105 +:10CB400018002561FBF725FB0546A06E4FF0010993 +:10CB5000E8B100271A2245B1297823794FEA911CC0 +:10CB600009FA0CF10B4203D104E02179090701D540 +:10CB700042700127A06E00F06FFCC4F8688037B1E6 +:10CB8000012251460598FFF7FDF90120D3E725481A +:10CB900090F8EC1019B1B0F8F000400405D431461B +:10CBA0002046059AFFF7C9FCC4E7012000F034F9DC +:10CBB00008B1002005E0FF2305211B48059A00F07D +:10CBC0001FFEA0630028B6D00F210170A16B7F204B +:10CBD000A1F801A0A16BC87015B12878800900E008 +:10CBE000FF20A16B33465246487184F82B9001A870 +:10CBF000009020460599FFF721FF05469DF80400A7 +:10CC000068B10948A28EC01C059900F0EFFCDBE971 +:10CC10001201C4E9160120896081A4F80C8028461D +:10CC200089E70000307500200500040038B5014692 +:10CC3000EA240598121943F100030091F8F7B2FFB6 +:10CC400038BD00000F4AD06FD2F8641180B201F4F1 +:10CC5000704140EA01100C490023B0F5702F0968BB +:10CC60000CD0B0F5804F00D80846D367D2F86411D5 +:10CC700021F47041C2F8641140680047C2F8643181 +:10CC80000846F9E700000440B44000000A460146A7 +:10CC90000148E8F75FB90000703D020070470000EE +:10CCA00010B50C46014604A0E8F74FF92046BDE850 +:10CCB0001040102101F06AB8252D367320000000C5 +:10CCC00008B572B64FF480410020E8F7CFF8154957 +:10CCD0000020087004F0F8FC00221349104604F00C +:10CCE00061FC00221149012004F05CFC114910484C +:10CCF00008600421684600F097FF0098E7F79CFB66 +:10CD0000EEF78BFCE9F72AFEFFF79CFF0A48007854 +:10CD1000800603D5082109A004F092FD00F0CCFFA5 +:10CD2000FEE700000E040020116E000095B6000022 +:10CD3000FF340200140400201C0000206C6F6164AA +:10CD40005F6170700000000010B50446E7F77AFEDE +:10CD500004480122A240016891430160BDE81040EF +:10CD6000E7F77ABEA47A00202DE9F041154D0E4672 +:10CD700007462C69002C23D00A4601462046EAF7D4 +:10CD80000BF805F1100178B10846E9F745FF2D6968 +:10CD9000284600F07DFB75B1E86800F0A3FC50B1B7 +:10CDA000032000F0ABFB06E033463A46064800F0AD +:10CDB00052FA040004D02046BDE8F04100F044B827 +:10CDC000BDE8F0816C7A0020996D0000C268C868E7 +:10CDD000101AB0F1004F01D30120704700207047B6 +:10CDE00070B516460C460546E7F72CFE002303E017 +:10CDF000A068C6545B1C9BB2E0899842F8D80549EC +:10CE000001EB850044600878401C0870E7F724FEB9 +:10CE1000002070BDC07A0020054901EB4000418D23 +:10CE2000008E814201D90120704700207047000028 +:10CE30006C7A002030B4A0F1180403B1A360C4E9F7 +:10CE4000031230BC00F008BB2DE9F0475FEA000890 +:10CE50004FF000066FD0A8F104056988A1F50340E2 +:10CE6000383801D1012000E0002040F2171250A113 +:10CE7000E8F7BAFD4FF20F0068802F880024E7F72B +:10CE8000E1FDDFF8389100BF09EB860209EB4601AE +:10CE90009269898C904508D31144414505D309EB2B +:10CEA000860084692CB1012004E0761CF6B2032EC2 +:10CEB000EAD300204FF49A723DA1E8F795FDA04512 +:10CEC00001D9012000E0002040F2351238A1E8F736 +:10CED0008BFD09EB4606708DB84201D3012000E0BE +:10CEE00000204FF49B7232A1E8F77EFD708D4AF26C +:10CEF0005A58C01B7085002640F23D1949E06189EF +:10CF0000414501D1012000E000204A4628A1E8F770 +:10CF10006BFD20892044A8421AD12089384480B270 +:10CF20002081256801198D423CD12989084420813E +:10CF300015B1012001E039E0002040F24B121CA1A4 +:10CF4000E8F752FD286820602868F8B1446029E0BD +:10CF5000A5421CD20EB1012000E000204FF4AC72BB +:10CF600013A1E8F741FD35606E60E819A5F80A8065 +:10CF7000A04208D120682860206800B1456020895F +:10CF8000384428810EE02C6065602F810AE0264637 +:10CF90002468002CB3D100203560C5E900062F813C +:10CFA000A5F80A80BDE8F047E7F756BDBDE8F08771 +:10CFB0006D73735F6D656D2E630000006C7A0020E9 +:10CFC000FFF742BF0148006870470000A47A0020C4 +:10CFD0002DE9F0410025CCB20746C1F30B26072C02 +:10CFE00001D2012000E00020932218A1E8F7FCFC08 +:10CFF000194800EB840044680CB1012000E00020D7 +:10D00000972212A1E8F7F0FCE089B04201D9012093 +:10D0100000E0002098220DA1E8F7E6FCE089B0428C +:10D0200010D9206840B1A168895D00EBC101384684 +:10D0300000F0F8F9050005D1616819B1384600F033 +:10D04000F1F905462846BDE8F08100006D73735F75 +:10D050007461736B2E630000C07A002070B5C4B297 +:10D06000C0F30B25072C01D2012000E0002040F284 +:10D0700035120FA1E8F7B8FC104800EB84004468B3 +:10D080000CB1012000E000204FF49D7208A1E8F7E8 +:10D09000ABFCE089A84201D9012000E0002040F269 +:10D0A0003B1203A1E8F7A0FCA068405D70BD000042 +:10D0B0006D73735F7461736B2E630000C07A002020 +:10D0C00010B5E7F7BFFC074C0120C4F8380300BFD8 +:10D0D000D4F8380310F0010FFAD1E7F7BDFCD4F80B +:10D0E0002C0310BD0000094010B538210548E7F7B2 +:10D0F000D2F900F009F800F00DF8BDE8104000F09A +:10D1000019B800006C7A00201C210148E7F7C3B968 +:10D11000A47A002010B50549022000F0CDF9BDE841 +:10D1200010402C210248E7F7B6B9000029D30100CE +:10D13000C07A00200149032000F0BEB9CDD3010020 +:10D140002DE9F041046890460D46074600263CB1A3 +:10D15000214628464246904718B926462468F6E7F5 +:10D160007D602C6016B13560BDE8F0813D60FBE765 +:10D1700030F8020CA0F50341383901D00120704786 +:10D180000020704710B500F0B9FA002802D1F9F775 +:10D1900046FE002010BD000010B500F031FB040079 +:10D1A00001D0012000E00020232202A1E8F71CFCAE +:10D1B000204610BD6D73735F6D73672E63000000B2 +:10D1C0002DE9F0410746DFF84C800E46C81C08EBFD +:10D1D000870420F003011546A161E7F733FC7019BD +:10D1E00020F00301A069091A0181A1694AF25A508D +:10D1F0004881A16900200860A169486008EB4700E8 +:10D20000A908858401EB41010186BDE8F041E7F7FB +:10D2100023BC00006C7A00202DE9F04190460E46B8 +:10D22000074600250C6811E041462046B84758B132 +:10D2300020680DB1286000E03060206810B1002047 +:10D24000206005E0756003E025462468002CEBD1E2 +:10D250002046BDE8F0812DE9F047984691460E46FC +:10D26000074600250C6812E0424649462046B8476A +:10D2700058B120680DB1286000E03060206810B11E +:10D280000020206005E0756003E025462468002C3E +:10D29000EAD12046BDE8F08770B50C4D064632460F +:10D2A00029460B48FFF7B8FF04000DD0E7F7CAFB8B +:10D2B0000648214608380022E9F77EFCE7F7CCFB58 +:10D2C000022000F01BF9EAE770BD0000747A00202C +:10D2D0005BB6000070B50F4C2068002819D0B0FA7A +:10D2E00080F0C0F11F00C5B2062D01D2012000E080 +:10D2F0000020A32208A1E8F777FB04EB8505686806 +:10D3000000B10120A42204A1E8F76EFB6868804701 +:10D31000E2E770BDA47A00206D73735F70726F6373 +:10D320006573732E6300000070B5E7F78BFB23482D +:10D33000E9F772FC0446E7F78FFB200025D0FFF7E2 +:10D3400017FF80F00100C8221DA1E8F74DFBD4E9CA +:10D350000201FFF73DFE050000D00120CD2218A1FB +:10D36000E8F742FBBDB104F1080004F118010DC853 +:10D37000A84710F0FF000ED0012806D002280ED0DA +:10D38000E2220FA10020E8F72FFBE7F75BFB0B4839 +:10D39000006858B10DE02046FFF712FEF5E7074898 +:10D3A000214608300022E9F707FCEEE70220FFF7EC +:10D3B000CBFCBDE87040E7F74FBB00006C7A002063 +:10D3C0006D73735F7461736B2E63000070B5144DE1 +:10D3D0000320FFF7B9FC2C692CB1E068401E00F077 +:10D3E00081F928B10CE0BDE87040002000F050B891 +:10D3F000204600F04DF8E06800F074F900280DD0E8 +:10D4000007481030E9F708FC0446FF22D4E901017F +:10D4100000F036F82046FFF717FDD9E770BD000091 +:10D420006C7A002030B58B88A3B100224FF6FF75CF +:10D430000EE00C6854F83240844201D0AC4205D171 +:10D440000868042101EBC201405830BD521C92B261 +:10D450009342EED8002030BD10B5A0F11804E7F7D4 +:10D46000F1FA064821460022E9F7A6FBE7F7F4FAAD +:10D47000BDE81040022000F041B800006C7A0020A6 +:10D4800010B50023FFF788FEBDE81040FFF7E4BFAA +:10D4900068B1C1680748C0F84013016DC1F380212D +:10D4A000002906D1C16D41F48061C165012001F000 +:10D4B000ABBC70470000094070B503250E4604461A +:10D4C000062802D20EB1012000E00020462206A16B +:10D4D000E8F78AFA062C04D20748002500EB8400FE +:10D4E0004660284670BD00006D73735F70726F6395 +:10D4F0006573732E63000000A47A002070B50546A2 +:10D500000F48006810F0FF0F01D0012400E0002454 +:10D51000062D01D2012000E000205C2209A1E8F7DD +:10D5200063FA0CB9E7F78EFA0A480122AA400168AB +:10D53000114301600CB9E7F78FFAE9F731F970BDD3 +:10D5400004ED00E06D73735F70726F636573732E2B +:10D5500063000000A47A00202DE9F041C4B20E4619 +:10D560000746C0F30B25072C01D2012000E0002064 +:10D5700040F2131219A1E8F737FA1B4800EB8400B8 +:10D580004468E089A84201D9012000E000204FF45E +:10D590008C7212A1E8F728FA0CB1012000E00020FB +:10D5A00040F219120DA1E8F71FFAE089A84213D939 +:10D5B000A068441901D0012000E0002040F22112AF +:10D5C00006A1E8F711FA2078B04205D02670384657 +:10D5D000BDE8F041FFF760BEBDE8F0816D73735F99 +:10D5E0007461736B2E630000C07A002010B51201C5 +:10D5F00000F018F807480069002809D00068401CAE +:10D6000000D00120BDE81040FC2203A1E8F7ECB9EE +:10D6100010BD00006C7A00206D73735F74696D65D6 +:10D62000722E63002DE9F04115000E4607460ED01C +:10D63000B5F1004F01D36FF000450B461649024685 +:10D6400088461648FFF707FE040002D008E00125CF +:10D65000F3E701211020FFF795FD0446C4E90176A8 +:10D66000FFF72EFD05440E4A21464046E560FFF7D0 +:10D6700067FD094810380069A04201D1FFF708FF93 +:10D68000284600F02FF8002804D0BDE8F041032020 +:10D69000FFF734BFBDE8F0817C7A0020996D00006F +:10D6A000CDCD010010B5FFF78DFC08B1002010BDF5 +:10D6B000012010BD0A4810B504696CB1FFF700FDE8 +:10D6C000E168814203D2401A401E4FF6FF71081AEA +:10D6D00040F27121484310BD4FF0FF3010BD0000F3 +:10D6E0006C7A002010B50446FFF7EAFC001BB0F18D +:10D6F000004F01D2012010BD002010BD2DE9F35FC5 +:10D70000C01C002420F00305083527460C2D00D24C +:10D710000C25E7F797F9DFF8D8B0019839180320FE +:10D72000B1FBF0F200FB12180BEB880086690EB11A +:10D73000012000E000208D222EA1E8F755F94AF2E1 +:10D740005A5A05F10C0916E07089504501D10120A3 +:10D7500000E00020922227A1E8F746F93089A8428C +:10D7600008D3484501D2716821B114B121898142A1 +:10D7700000D934463668002EE6D11CB120894845D0 +:10D7800000D205467F1CFFB2032F02D2002CC4D06A +:10D7900000E08CB12089A84213D1606800B101205B +:10D7A000BC2214A1E8F720F9D4E900010860206840 +:10D7B00058B16168416008E0E7F74EF90020BDE824 +:10D7C000FC9F401B80B22081044448F23830258001 +:10D7D00060800BEB4800241D418D29444185E7F70B +:10D7E0003BF90120EE2203A1E8F7FEF82046E6E728 +:10D7F0006C7A00206D73735F6D656D2E63000000A1 +:10D800002DE9F0410E4607461C461546012103F15D +:10D810001800FFF773FF00280CD000210160C0E959 +:10D820000454C0E9027600F1180521462846E6F7BF +:10D8300032FE2846BDE8F08170B50A4D686D40069D +:10D840000FD52C6E4020E9F79FFA286EA04328667A +:10D85000002C06D004480078400602D5204603F08C +:10D860008BFF70BD000009401C0000202DE9F04F27 +:10D870004FF00009DFF87CB15F4E8DB042F22C58BA +:10D88000CA46746D45462C4071D02046E9F77CFAB3 +:10D890000027A846A00602D50120E8F799FFA004BA +:10D8A00001D5F9F7E7F960077AD5D6F80C01002819 +:10D8B00076D040F080452D1F049595F882008DF8B4 +:10D8C000180095F826008DF81900A86F0590686F6C +:10D8D000B5F88220C3B28146D1B2032B02D0042B0B +:10D8E0002DD124E0052906D016291CD017291AD0DD +:10D8F000182924D117E0DBF838100291097901F0DA +:10D900000F0107291BD102994979890617D5C6F855 +:10D910000CA1DBF84000F9F785F936480299103080 +:10D92000F6F7AAF81CE0C6F80CA1E86F16E0334938 +:10D93000C9F30B2051F8200008B1172A0BD04A4632 +:10D9400004A94FF40030F9F715FA47B395F87400BD +:10D9500003280FD10CE0C6F80CA14069F4F746FA91 +:10D9600001274A4604A97804F9F704FAEEE73DE0F6 +:10D97000F6F7E6F89FB1E00512D4756D05EA0805E3 +:10D980002846E9F701FA42F2040084432C434FF49D +:10D9900098721BA1C4F30020E8F726F87AE7FFE7A6 +:10D9A000600502D50320FFF7A9FDE0057FF569AF0B +:10D9B000CFB10498B0F86800ADF81C000498B0F836 +:10D9C0006A10ADF81A109DF81900814203D2ADF823 +:10D9D0001A00ADF81CA04A4604A94FF00210F9F74E +:10D9E000C9F96006E2D5F8F793F94AE70DB0BDE84A +:10D9F000F08F00003075002000000940EC7A002014 +:10DA00006474626C652E630000210148EDF7C2BDAD +:10DA1000E804002001210148EDF7BCBDE804002026 +:10DA200002210148EDF7B6BDE804002003210148BA +:10DA3000EDF7B0BDE804002004210148EDF7AABDD0 +:10DA4000E804002005210148EDF7A4BDE80400200A +:10DA500006210148EDF79EBDE8040020072101489A +:10DA6000EDF798BDE804002008210148EDF792BDCC +:10DA7000E804002009210148EDF78CBDE8040020EE +:10DA80000348016841F0200101600120FFF736BD25 +:10DA9000000008400A210148EDF77CBDE8040020A1 +:10DAA000A0F13001092901D808467047A0F16101B1 +:10DAB000052901D857387047A0F14101052901D83F +:10DAC000373870474FF0FF3070470000064A00209B +:10DAD0000146126802EB81035B6903B1401C491CDB +:10DAE0000829F7DB70470000BC37020004480168D2 +:10DAF000044A11430160002211460620EDF754BD8F +:10DB0000040007400100200070B5154613460E467C +:10DB10000A4604460121ECF7A5FF022C07D0042C8D +:10DB20000BD129463046BDE87040E9F7FDBA2946D9 +:10DB30003046BDE87040E7F773BE70BD10B50446CF +:10DB4000EEF774FD0146E08A814203D2BDE8104041 +:10DB5000EEF76CBD10BD03F00DBD00000A46014696 +:10DB600021480B2910D2DFE801F0061013201728F6 +:10DB7000383033353B001D48016812B141F00101D6 +:10DB800001E021F0010101607047D0B203F0ECBC6C +:10DB90001749104603F0CCBD1648016812B121F0B8 +:10DBA0008051F0E741F08051EDE7016812B141F496 +:10DBB0000071E8E721F40071E5E7016812B141F472 +:10DBC0008061E0E721F48061DDE790B203F0E4BC1E +:10DBD000094800E00948026070471046EFF7E4BBCF +:10DBE000D0B2EFF7DBBB0000700104400000002062 +:10DBF0001D1802006C0004402404002028040020AA +:10DC000070470000034909680160034909684160E1 +:10DC1000704700009000002094000020F8F7E0B961 +:10DC200000487047F034020089B2F6F7EDBB0000FF +:10DC30000149086070470000140400200FB410B5BB +:10DC400003A90298E7F776F910BC5DF814FB000011 +:10DC5000034AC2E90001012201490520EDF7A4BCF5 +:10DC600014000020E6F7DEBB18B1012806D0002022 +:10DC700070470348006800F48000704703F06EBCF2 +:10DC80008800044002480068C0F303207047000089 +:10DC90006401044072B6BFF34F8F05480168054A1E +:10DCA00001F4E06111430160BFF34F8FFEE7000014 +:10DCB0000CED00E00400FA0510B5E9F777F8BDE8CF +:10DCC000104004F083BA0000034B43F8301003EB1C +:10DCD000C000426070470000A004002070B50C46F0 +:10DCE0000A490D560A4941F8304001EBC000426034 +:10DCF0002846E7F77BF828461CB1BDE87040E7F7F7 +:10DD00008DB8BDE87040E7F77DB80000F43402003C +:10DD1000E804002001490870704700000E0400204C +:10DD200001490860704700001004002001490860A4 +:10DD3000704700002004002003F03EBC084940EA80 +:10DD400001020849CA67D1F864214FF4704322F4F4 +:10DD5000704203EA10100243C1F86421FFF79AFFF2 +:10DD60000000FFFF00000440034A1278920602D52B +:10DD700089B203F065BD70471C00002002490A68A3 +:10DD800060F30B220A6070476401044070B50D1EF9 +:10DD900006460DDD002404E0315D06A0E7F7A6F895 +:10DDA000641CAC42F8DBBDE8704004A0E7F79EB805 +:10DDB00070BD000025303258200000000A0000002D +:10DDC00070B51D46144601280BD002280DD004283A +:10DDD00009D0FC2815D1BDE87040114609A0E7F72D +:10DDE00085B80BA005E00CA003E009B10CA000E091 +:10DDF0000DA0E7F77BF829462046BDE87040FFF705 +:10DE0000C5BF70BD4C4F47202D2D2025730A000043 +:10DE1000434D44203D3E2000455654203C3D2000CB +:10DE200041434C203C3D200041434C203D3E2000DE +:10DE300088B0EDF701F80021ECF752FFEEF7A0FAF9 +:10DE400001F01CFF002211460120EDF7ADFBEAF7BF +:10DE5000B5FD0120EDF73EF8064D4FF0FF342246A8 +:10DE60006946A86804F052FE0128F8D16846E6F732 +:10DE700051FEF4E700000020FEB50646082801D355 +:10DE80000020FEBDEBF71CFA0028FAD1E8F738FDB8 +:10DE90000400F6D07821E6F7FEFA1720A681E0828A +:10DEA00000250D482576257040F826400B4800785F +:10DEB00078B9A689EEF7BAFB02218DF80810ADF803 +:10DEC00009000095032302AA042130460195EEF7CC +:10DED000E3FE2046FEBD00005C690020E800002053 +:10DEE00070B5FFF7C9FF04001AD0A1890DA0E7F7AC +:10DEF0002DF804F1600024670546E8F7FBFD224693 +:10DF000013492846E8F72CFE47F2305240F281418F +:10DF10002846E8F70DFE2846E8F7DCFD204670BDF0 +:10DF2000002070BD4741545420636C69656E7420B5 +:10DF300074696D656F75742073746172742C2068D8 +:10DF4000616E646C65203078253032780000000006 +:10DF5000959000002DE9F041184C0F460546E66803 +:10DF60002068001D03F084FE38B9206890F82C105A +:10DF700001208840216981432161681C07D137B1A4 +:10DF80002168BDE8F041091D0D4803F0FCBE206882 +:10DF90003544B5424560216801F1040104D2A06B0B +:10DFA000BDE8F04103F0D7BE606B03F0D4FEA06A79 +:10DFB000854200D2A562BDE8F08100002400002067 +:10DFC000840B00202DE9F041054603F0E9FE2D4CBD +:10DFD000A068401CA06020682B4F10B1606930B36E +:10DFE0002BE02560A068012827D1002606EB8600DB +:10DFF00007EB800003F0A1FE761C0F2EF6D323481A +:10E0000003F09BFE2148143003F097FE1F48283090 +:10E0100003F093FE1D483C3003F08FFE1B48503048 +:10E0200003F08BFE194860631430A06305E020689C +:10E03000E96AC06A884200D82560606A401C606254 +:10E04000E96A0120226988401043206101EB8100C8 +:10E0500007EB8000291D03F096FE03F0C1FE606906 +:10E0600000280CD02068E96AC06A884207D20849B3 +:10E070004FF080500860BFF34F8FBFF36F8FBDE844 +:10E08000F081000024000020080A0020340B00204A +:10E0900004ED00E038B503F083FE0E4C2068A8B90B +:10E0A0000D4803F04AFE0C48143003F046FE0A48BF +:10E0B000E06014302061084B0020C43B009003F165 +:10E0C0004C020C210A2004F02FFA2060BDE83840F1 +:10E0D00003F086BE600000205C0C002030B4026CAF +:10E0E0000B46002A0BD0C1681144C1608468A1426C +:10E0F00001D30168C16030BC1846E6F7A5B930BC51 +:10E1000070472DE9F041856B174604460026026CE6 +:10E1100082B1C7B1E068E6F797F9E168206C091AA7 +:10E12000E1602268914202D2A168081AE060022FE1 +:10E1300016D017E02068A8B9A06804F0E9FF0646E9 +:10E140000020A0600EE06068E6F77EF9216C606850 +:10E1500008446060A168884204D32068606001E0E0 +:10E1600005B16D1E6D1CA5633046BDE8F081000051 +:10E1700010B5044690F8510050B101280BD0022888 +:10E180000ED0BDE8104040F61E7106A0FFF760BD3E +:10E19000206B03F03BFE2046BDE8104003F036BE86 +:10E1A00010BD00007461736B732E63000A48002178 +:10E1B0000269012A00D901210268D26A0AB100204D +:10E1C0007047064A1268012AF9D80029F7D1816AF6 +:10E1D000C068081A7047000024000020080A0020C8 +:10E1E0000A4902680A6042684A6082688A60C268B6 +:10E1F000CA6002690A6142694A6182698A61C069CA +:10E200000122C8610420EDF7CFB9000040050020CD +:10E2100010484FF4B041420706D0C01D0D4920F010 +:10E220000700411AC1F5B0410B4A00230144C2E97D +:10E2300000030839103A21F0070111604B600B60B0 +:10E240000B1AC0E9001393604FF000405360D06098 +:10E2500070470000840C00209C0000201F4C204EC2 +:10E2600012E000BF03F09CFDF068C568281D03F0B4 +:10E27000FFFCA068401EA0606068401E606003F064 +:10E28000AFFD2846FFF774FF60680028EAD1154803 +:10E290000068012807D914494FF080500860BFF387 +:10E2A0004F8FBFF36F8FFFF781FF0228D7D303F0A3 +:10E2B000EDFFA06AE168884204D240F65C510BA0F1 +:10E2C000FFF7C6FCFFF772FF03F000F9022801D345 +:10E2D00003F0E6FD04F0F0FFC1E700002400002099 +:10E2E000700B0020080A002004ED00E07461736BDD +:10E2F000732E6300002807D00021816001600B4667 +:10E300000A46C16004F08AB9704710B5029C49B151 +:10E310002260C4E90F010121204604F039F90020F0 +:10E32000A06410BD2460F4E72DE9F05F8846DDE9C4 +:10E330000B9483466FF00301206B01EB82010844CC +:10E340000A9E20F007079A46780704D040F2613110 +:10E350001CA0FFF77DFC0025B8F1000F0ED00020B7 +:10E36000221818F8001082F8341018F8001011B1B3 +:10E37000401C1028F4D384F8435001E084F8345052 +:10E380000F2E00D30E26E662C4E91165201D03F0AE +:10E39000DFFC04F1180003F0DBFCC6F10F00246180 +:10E3A000A0616462E56484F850505246594638468C +:10E3B00000F000FB2060B9F1000F01D0C9F8004067 +:10E3C000BDE8F09F7461736B732E63002DE9F04715 +:10E3D0001E46DDE9089417460D00804604D140F240 +:10E3E00065110CA0FFF734FC002C11D0FFF752FE92 +:10E3F00004F11801C4F80080A1E86002201D03F0B8 +:10E40000A7FC002F04D014F8240F40F00400207063 +:10E41000BDE8F08774696D6572732E6300000000BB +:10E4200030B5114900E011460A688242FBD34B68BF +:10E430005C18844203D14068184448600846436829 +:10E440001C18944209D1084C103C2468A24209D0FF +:10E4500052681A4442600A6812680260814200D021 +:10E46000086030BD0460F9E79C00002070B500240E +:10E470000B4D41609142006106D8D11A82699142E8 +:10E4800006D2011D286907E09A4203D2994201D3BE +:10E49000012403E0011DE86803F05DFC204670BD27 +:10E4A0006000002010B5044603F07AFCA06B28B190 +:10E4B0005FF0000403F094FC204610BD0124F9E74E +:10E4C0002DE9F3410F4600980026846C24B940F6EC +:10E4D000453115A0FFF7BCFBA06BE16B884204D36C +:10E4E00040F6463110A0FFF7B3FBA06BE16B88420A +:10E4F0000CD294F945503A4669462046FFF701FE92 +:10E500000646681C05D06D1C84F845503046BDE8B1 +:10E51000FC81606A0028F9D004F1240004F08CFE2C +:10E520000028F3D00126F1E771756575652E63004B +:10E53000F8B5054616480E46C068C068C468201D78 +:10E5400003F096FB94F82400410716D5A0692B46EA +:10E55000411932462046FFF789FF90B1002003465B +:10E56000014600902A46204604F076FF48B94FF451 +:10E57000FC7108A0FFF76CFB03E020F0010084F8B9 +:10E580002400216A01B02046BDE8F04008470000A1 +:10E590006000002074696D6572732E6300000000D6 +:10E5A00070B586B0384E65E00198002862DB039CA8 +:10E5B000606910B1201D03F05BFB04A800F0B2F805 +:10E5C000054601980A2855D2DFE800F00505052C1C +:10E5D000324805052C3294F824002A4640F0010008 +:10E5E00084F824000298A169034601442046FFF7FD +:10E5F0003DFF90B3216A2046884794F824004007E5 +:10E6000038D5002000900298A169002342181946CD +:10E61000204604F021FF00BB40F213311BA0FFF79E +:10E6200017FB27E014F8240F20F00100207021E0F0 +:10E6300094F8240040F0010084F824000298A061BE +:10E6400020B940F22B3111A0FFF702FBA0692B4645 +:10E6500041191A462046FFF709FF0BE094F8240001 +:10E66000810703D4204603F0D1FB03E020F0010032 +:10E6700084F82400002201A9306804F047FA002839 +:10E6800092D106B070BD00006000002074696D6515 +:10E6900072732E6300000000F8B50D46064603F0C5 +:10E6A000F5FD684600F03EF80446009810B104F00D +:10E6B00003FEF8BD1148ADB101690968D9B1002563 +:10E6C000311B2A46006803F097FC04F0F5FD002892 +:10E6D000EFD10B494FF080500860BFF34F8FBFF36D +:10E6E0006F8FF8BDA642EBD804F0E6FD2146304618 +:10E6F000FFF71EFFF8BD0125E2E7000060000020E3 +:10E7000004ED00E00648416B096829B1416BC96816 +:10E71000C9684968816270474FF0FF31FAE700002D +:10E720002400002070B5054604F07EFC064E044629 +:10E73000B068844203D200F009F8012000E0002014 +:10E7400028602046B46070BD60000020F8B5184D08 +:10E7500025E0C068C4680668201D03F089FA216AB4 +:10E760002046884794F82400400718D5A069304413 +:10E77000B04206D924616060211DE86803F0EBFA1D +:10E780000DE000200346014600903246204604F08A +:10E7900063FE20B94FF4617106A0FFF759FAE868EB +:10E7A00001680029D5D12969C5E90310F8BD000029 +:10E7B0006000002074696D6572732E6300000000B4 +:10E7C00007484068401C03D0CA2106A0FFF740FA62 +:10E7D000202080F31188BFF34F8FBFF36F8FFEE7C8 +:10E7E00074000020706F72742E630000074CE068A4 +:10E7F000016841B1C0680021D0F80000FFF74CFF6C +:10E80000FFF7CEFEF3E701210020F7E760000020CC +:10E810002DE9F041044603F0C3FA94F9455004F1A0 +:10E82000240610E0A06C20B100212046FFF748FE2E +:10E8300004E0606A48B1304604F0FEFC08B103F021 +:10E840002DFC6D1E6DB2002DECDC4FF0FF3684F810 +:10E85000456003F0C5FA03F0A3FA94F9445004F1BB +:10E86000100709E0206948B1384604F0E5FC08B11A +:10E8700003F014FC6D1E6DB2002DF3DC84F84460CF +:10E88000BDE8F04103F0ACBA2DE9F04105460026A1 +:10E8900003F0FCFC324F386808B9FFF7B9FCF868A0 +:10E8A000054212D18DB1083568070AD005F007007E +:10E8B000C0F108000544680703D0952129A0FFF79F +:10E8C000C7F915B17868854202D904F0F5FC3BE040 +:10E8D0002348103001460C6801E020460C46616870 +:10E8E000A94202D221680029F7D13968B8468C4282 +:10E8F000EBD006682168016060680836401B10286C +:10E900000DD96719780703D0C22116A0FFF7A0F927 +:10E910006068401B786038466560FFF781FD62687B +:10E92000D8F804104046891AC8F80410D8F80830FE +:10E93000994200D28160D8F80C0002430020C4E95B +:10E94000000204F0B9FC0EB903F0F2F9700704D02C +:10E950004FF4817103A0FFF77BF93046BDE8F081E9 +:10E960008C000020686561705F342E630000000039 +:10E970000449086818B10868826C521C82640868EF +:10E98000704700002400002010B5040004D140F2BC +:10E99000E53105A0FFF75CF903F002FAE46903F042 +:10E9A0001FFA204610BD000074696D6572732E63F6 +:10E9B0000000000010B5031F4FF080741C601B1F87 +:10E9C00021F001011960191F024B0B601439403806 +:10E9D0000A6010BDC1E7010000127F2801DD7F2021 +:10E9E00004E06FF07E01884200DC084640B27047C8 +:10E9F0008000B0F5004F02DB47F6FF7003E00349EB +:10EA0000884200DC084600B2704700000180FFFF2A +:10EA10000E4902460020096831F9103093420EDB9E +:10EA200000280BD031F9103001EB40019B1A31F96D +:10EA3000021C511A8B4201DB401EC0B27047401CC1 +:10EA4000C0B24028E8D33F207047000020040020D7 +:10EA50000248417A491C417270470000740100204D +:10EA600070B504461D46A52000F0DEF90246ED1CF7 +:10EA7000ABB2A189A068BDE87040E8F7A1BA2DE962 +:10EA8000F74F91F8019086B0A9F105008A4600F091 +:10EA9000FF0B022639E00AEB06053AF8067095F8F6 +:10EAA0000280B5F803000090781E81B20698E8F75E +:10EAB00033F9009804970590069C681D0027BBF168 +:10EAC000020F0DD0694600F065F894F8500068B167 +:10EAD0001022694604F11C00E5F7EFFCA0B905E03F +:10EAE00007886846394603F0A5F8EEE784F83480D5 +:10EAF0000498E0860598208794F8500020B9678331 +:10EB00009DE80F001C340FC44E4408988642C2DBB7 +:10EB100009B0BDE8F08F00002DE9FF5F4D78834616 +:10EB2000281F90460E46C7B2022411E0301936F86D +:10EB300004A0B0F80290022F14D0001D694600F026 +:10EB400029F86B464A4651465846E8F797FA2C444E +:10EB50004445EBDBBBF80C1004B005A0BDE8F05F4A +:10EB6000E6F7F4B98188684603F064F8E9E7000045 +:10EB70007265706F72745F676174745F73657276CB +:10EB80006963657320666F72202530325820646F88 +:10EB90006E650000102200F00FB8032200F00CB8E0 +:10EBA000062200F009B8072200F006B8082200F09B +:10EBB00003B80622AFF3008030B5002305E0D51A74 +:10EBC000C45C0D445B1C05F8014C9342F7DB30BD7F +:10EBD0001CB5044601A841F63952904701236A4604 +:10EBE00001A92046E5F75AFBBDF90000FFF700FF39 +:10EBF0002080BDF90200FFF7FBFE60801CBD000015 +:10EC000070B51E4D4A426B0C00280EDD002903DD55 +:10EC1000BDE8704000F036B82CDAA94200D11A469F +:10EC200011B200F02FF8404218E01BDAA84201D1DF +:10EC3000184600E0404200B243F6FF74002903DDAD +:10EC400000F020F8201A09E00ADAA94200D11A4699 +:10EC500011B200F017F8A0F57C50FF3800B270BD7B +:10EC6000204670BD002902DD4FF4005070BD01DA6E +:10EC7000034870BD4FF0000070BD00000080FFFF32 +:10EC800000E0FFFF10B50A46904203DBBDE81040EC +:10EC900000F008B80146104600F004F8C0F5005036 +:10ECA00000B210BDCA03884202D14FF480507047B1 +:10ECB00092FBF0F000B240F64521884203DC42F6B8 +:10ECC000A90148430AE0064942F68B4200FB0211C3 +:10ECD0004043044A40F3CF3000FB02100014704759 +:10ECE000B634D3FFD1F3FFFF401804D510F5004030 +:10ECF0000AD5002008E04FF40041884204DBA0F56B +:10ED00000040884200DB481E00B27047C11700EB8C +:10ED10005141C913002800DA491E494200EBC130B5 +:10ED200000B27047818900221820E6F7E3BF08B5DA +:10ED3000C18D0091838D828942F603010820E7F797 +:10ED400036FA08BD818901221820E6F7D3BF2DE9E4 +:10ED5000FF4104468789068F458F03F0E1FA216C55 +:10ED600016228DF80820ADF80960ADF80B50294443 +:10ED7000CDE90010052302AA04213846EDF78CFFE7 +:10ED8000BDE8FF811FB58489018F408F0C228DF86B +:10ED90000820ADF80910ADF80B000020009001909C +:10EDA000052302AA04212046EDF776FF1FBD08B512 +:10EDB000C18D0091838D828942F602110820E7F708 +:10EDC000F6F908BD08B5016C0091838F028F818927 +:10EDD0001220E7F74FFC08BD02490A6860F34512AC +:10EDE0000A6070470000094002490A6860F3041293 +:10EDF0000A6070470000094002490A6860F3000297 +:10EE00000A6070472004094002490A6D60F38A22B3 +:10EE10000A6570470000094002490A6D60F34D32EF +:10EE20000A657047000009400346D01E037022F8AF +:10EE3000021C704710B501240470417042800371B8 +:10EE4000052010BD10B50446581F047023F8041C9B +:10EE500023F8022C10BD000001460148E7F7F3BC7F +:10EE6000900100202DE9F047804686B03548EEF746 +:10EE7000C1F8344F8146643F0026B87B7C6C354630 +:10EE8000BE73012832D0022830D1268841462EA0F8 +:10EE9000E6F760F84FF0370AB8F1000F03D0B8F189 +:10EEA000010F23D116E0032060732648EEF7A4F883 +:10EEB00001B2A18429A0E6F74DF8A07830BBE57037 +:10EEC0002571B9F82A0010B1342020731EE084F8AF +:10EED0000CA01BE004206073A07838B9207908B931 +:10EEE000E07818B1E570257184F80CA0B8F1000F36 +:10EEF0000CD0B8F1010F22D17A7B06B03146BDE8C3 +:10EF0000F047104B9B1FD72001F083B80D4D4FF0F9 +:10EF1000D808AD1F7C7BA81DEEF76EF80746334678 +:10EF200042460D2102A8CDE9004501F0E3FFADF80E +:10EF300013700D2302AA0021042000F0F3FA06B09A +:10EF4000BDE8F087D80100207375636565642065AE +:10EF500076656E742069733A25780A0041444452FC +:10EF60004553535F5245534F4C5554494F4E5F5391 +:10EF7000554345454445442C20696E6465782025F9 +:10EF8000640000003EB50D46044615496846E7F7A3 +:10EF900082FC0BE06846E7F784FC817AA14205D148 +:10EFA00006222946001DE5F788FAA0B16846E7F772 +:10EFB00063FC0028EED1E7F761FD01000DD08C72F3 +:10EFC00028684860A88808810548E7F731FC01F007 +:10EFD00097FA00203EBD55203EBD56203EBD0000A4 +:10EFE000BC0100202DE9F047104C0646DDF82080DA +:10EFF0001068C4F85E009088A4F862001F461546A9 +:10F000008946667304F16400EDF7F8FF04F16400CB +:10F01000EDF7F8FFA7732B4632464946C4F8448003 +:10F02000BDE8F047D62000F0F4BF000074010020D6 +:10F0300030B4034B0124DC73DA6430BCE8F748BB1E +:10F040007401002070B50C4605460D212046E5F7F9 +:10F0500022FA2888A4F80D00A878E07370BD10B5D6 +:10F0600000F052FC002800D0C07B10BD08B500F0B5 +:10F070004BFC002809D00221017600210091427941 +:10F080000188831DDA2000F0AFFF08BD08B500F04D +:10F090003BFC002809D0032101760121009142792F +:10F0A0000188831DDA2000F09FFF08BD10B500F035 +:10F0B0002BFC002804D0817B19B1C17B09B1007EF3 +:10F0C00010BD002010BD000070B500F01DFC040054 +:10F0D00011D0094D0420296A4876207B032806D1E7 +:10F0E000208800F04DFA296A012008762073BDE8D7 +:10F0F000704001F005BA70BD740100202DE9FF4792 +:10F100008946DDE90C8605461F4669461046FFF72D +:10F110004AFD6C46E11D4846FFF745FD8DF80E801F +:10F120008DF80F700020295C225C51403154401C46 +:10F130001028F8DBBDE8FF873FB500240094019458 +:10F14000029403940C6801948988ADF80810116842 +:10F15000CDF80A109188ADF80E1000216C46455C80 +:10F16000625C55405D54491C1029F8DB3FBD00002E +:10F170002DE9FF411D4DA97A01290AD01C4E032912 +:10F180000DD0052919D004B01AA0BDE8F041E5F76B +:10F19000E1BE002000900190029003901BE000244B +:10F1A0006F46E87A04EB001000F0DAF8315D484071 +:10F1B0003855641C102CF4DB0AE00D4A0020694627 +:10F1C000103A335C145C63400B54401C1028F8DB8D +:10F1D000E87A401CE87200F003F90548002269460D +:10F1E0002038FFF725FFBDE8FF81000074010020F3 +:10F1F000BC730020736D5F636D61635F68616E64F3 +:10F200006C655F6165735F656E67696E655F72658A +:10F210006164792063616C6C656420696E2073742D +:10F2200061746520257500002DE9F0413D4D0026F3 +:10F2300088B0A97A0446022909D0042964D0062995 +:10F2400069D008B038A0BDE8F041E5F783BE0146BB +:10F2500010226846E5F7F8F86946102001F0ACFE88 +:10F260002078000605D59DF80F0080F087008DF806 +:10F270000F009DE80F0004AC0FC404A9102001F09A +:10F280009BFE9DF80000000605D59DF81F0080F04C +:10F2900087008DF81F00688A304E08B1010710D032 +:10F2A00000F00F0700240DF11008BC4217DA688A3D +:10F2B00020F00F00204400F053F818F804104840E4 +:10F2C00012E000246F46688A2044103800F048F8A5 +:10F2D000395D48403055641C102CF4DB08E018F808 +:10F2E000040001D180F080003055641C102CDCDB60 +:10F2F000287BE97A401E814201DA032000E00520E4 +:10F30000A87208B0BDE8F081014614481022103000 +:10F31000E5F79AF8ECE70146D5E90E209047AE7282 +:10F32000EFE7000074010020736D5F636D61635F40 +:10F3300068616E646C655F656E6372797074696F25 +:10F340006E5F726573756C742063616C6C656420AC +:10F35000696E20737461746520257500AC7300209C +:10F360000F4910B54A8A904205DB01460DA0E5F72A +:10F37000F1FD002010BD101A401E032802DA0849D2 +:10F3800016310AE0121F904204DA096B084410F8A3 +:10F39000030C10BD0249801A3431085C10BD000016 +:10F3A00074010020736D5F636D61635F6D657373DE +:10F3B0006167655F6765745F627974652E206F753C +:10F3C00074206F6620626F756E64732C20616363B6 +:10F3D0006573732025752C206C656E2025750000E3 +:10F3E0000248817A491C8172704700007401002034 +:10F3F0000348807A08B10020704701207047000060 +:10F40000740100202DE9F0470F4608A91646B1E81F +:10F41000200701461C4610221548E5F715F8154847 +:10F42000E41D00F11E010770A0F80160C1F8008022 +:10F43000A1B2A0F116040E4A61822563C4E90E9AB6 +:10F440000020203AE072106450649064D06401F1AE +:10F450000F00C0F307102073012500B92573227B2C +:10F4600005A0E5F777FDA572BDE8F04701F048B8C3 +:10F470009C7300208A010020736D5F636D61635F80 +:10F4800073746172743A206C656E2025752C20624D +:10F490006C6F636B20636F756E74202575000000C0 +:10F4A000024B5870DA6299707047000074010020B6 +:10F4B00010B5114C0A2804D11078072801D110206A +:10F4C000E071084600F020FA002813D00021817373 +:10F4D000C1730176491E818401214173817800291D +:10F4E00008D0017B002905D1A17809B1242100E0D1 +:10F4F0002321017310BD00007401002070B50C467B +:10F500000546164610211046E4F7C5FF22460C2199 +:10F510003046E7F7F1F82A463046BDE870400E2144 +:10F52000E7F7EAB8FEB506460E481C461546876A58 +:10F5300017B100210420B8470A4968461C31E7F793 +:10F54000AAF908E06846E7F7ACF9476823462A4677 +:10F5500000213046B8476846E7F78EF90028F1D118 +:10F56000FEBD00007401002070B50C460546102158 +:10F570002046E4F790FF2868A0606868E06070BDEE +:10F5800070B5084D0446A88AA0420AD101F0BEFD1C +:10F590004FF6FF70A8822146BDE870400248E5F7AB +:10F5A000D9BC70BD740100207C3D020010B500F094 +:10F5B000ABF9002802D0817B09B1007C10BD00208E +:10F5C00010BD00002DE9F047144604282CD1217805 +:10F5D0001727974E4FF000094FF033084FF0220ADB +:10F5E000302971D006DC05296FD008296ED00E298C +:10F5F000ECD105E18E484FF0010A3E2990F9010057 +:10F6000013D06029E2D191780229DFD1401C03D0C8 +:10F61000F07818B1032002E0052000E001203072EC +:10F6200086F809A000F06CFFFBE0A178012903D067 +:10F63000052938D00A29F7D1E178002978D1401C72 +:10F6400076D0A788384600F05FF90500ECD02F800F +:10F65000A079A870E0796871A91D04F10800FFF78E +:10F66000A8FAA87808B173A100E074A175A0E5F725 +:10F6700071FC85F80E9085F80F9085F818904FF082 +:10F68000FF30A88485F80DA0A87848B1287B002811 +:10F69000CAD1B07808B1242000E023202873C0E04C +:10F6A00085F80C80BDE0B4F8030000F02DF90500EA +:10F6B000BAD0297B69A0E5F74DFC287B2C2806D021 +:10F6C000B4F80D0088B114E05BE07AE026E0142085 +:10F6D0002873306A90F8241001B10121E97390F881 +:10F6E000242064A0E5F736FC9BE0611D00200A5C45 +:10F6F00062B105F11C01601DFFF758FAB4F80D0066 +:10F700006883252028734FF6FF7005E0401C082809 +:10F71000EDDB262028732888B08282E0B4F803004D +:10F7200000F0F2F805007CD06179A9732A7C00E032 +:10F730007BE056A0E5F70EFC297B5FA0E5F70AFC0D +:10F74000A87B00286DD0306A90F8240000B1012019 +:10F75000E873287B162805D0362862D185F80C80FE +:10F76000288824E0A87808B12F735AE0284600F0D2 +:10F770001BFB18B1284600F05BFBF5E785F80CA0F1 +:10F780004FE0B2F8030000F0BFF8040049D0217C3C +:10F790004FA0E5F7DFFB217B47A0E5F7DBFB207BF4 +:10F7A000162807D036283CD184F80C802088FFF733 +:10F7B000E7FE36E0A07808B1277332E084F80CA0A9 +:10F7C0002FE0B4F803502846FFF7DAFE284600F091 +:10F7D0009BF8050025D0B5F9240000280BDBA9789B +:10F7E00039B9297B362904D1A178052901D1EDF752 +:10F7F0001CFCECF757F885F80C90A5F8009010E089 +:10F800003F49B4F803000988884203D1A01D00F0E5 +:10F8100083F806E03B490988884202D1A01D00F028 +:10F82000A1F9BDE8F04700F06BBEBDE8F08700002D +:10F8300074010020736C6176650000006D61737463 +:10F84000657200004E657720736D5F636F6E6E2C7E +:10F8500020726F6C65202573000000004C544B2013 +:10F86000526571756573743A2073746174652025EF +:10F870007500000061757468656E74696361746415 +:10F88000203078257820307825780A00456E63721C +:10F89000797074696F6E2073746174652063686138 +:10F8A0006E67653A2025752C206B65792073697A1F +:10F8B00065202575000000006576656E742068611E +:10F8C0006E646C65722C20737461746520257500FC +:10F8D000456E6372797074696F6E206B6579207202 +:10F8E00065667265736820636F6D706C6574652CF6 +:10F8F000206B65792073697A65202575000000000A +:10F90000E03A0200E83A020010B5EBF72FF80028C1 +:10F9100000D05A3010BD00002DE9FF41884D064649 +:10F920000020E873296CA9B1286469463046FFF7C6 +:10F9300034F90322694605F16100E4F7BEFD28B100 +:10F9400005F16400EDF75EFBBDE8FF810020FFF7E5 +:10F9500089FAF9E7287A022823D0042823D0687A84 +:10F96000052829D0A87A02282FD004282DD00628CF +:10F970002BD0EC6C002CE7D07148227B016A1C2A4A +:10F9800001F193007BD03DDC0F2A4ED025DC0B2A01 +:10F990004BD00D2AD8D163313046FFF7FBF8122047 +:10F9A00078E0684901E0674910393046FFF7F2F81E +:10F9B000BDE8FF41E7F74EBA614930465B31FFF7DA +:10F9C000ECF8BDE8FF41FFF743B869463046FFF762 +:10F9D000E1F86846FFF728FCB6E7112A42D0152A5D +:10F9E000B2D101463046FFF7D5F8217C56A0E5F7A5 +:10F9F000B1FA286A217C933001F0C4FBA078E8B307 +:10FA00002D2047E01E2A7FD0202A7CD02F2A5FD0CD +:10FA1000312A99D101463046FFF7BCF8286A217C8B +:10FA2000933001F0AFFB322034E02088EAF79EFFEC +:10FA3000074669463046FFF7ADF82B6AA07803F118 +:10FA4000350318B107F10902394602E03A4607F1D9 +:10FA500009016846FFF770FB04B02046BDE8F0419D +:10FA600000F0BEBA69463046FFF794F8286A1022C3 +:10FA700069468330E4F721FD38B101E00CE00DE088 +:10FA8000296A04200876012004E0A07808B1132038 +:10FA900000E01420207357E73C20FBE7694630461E +:10FAA000FFF778F80E216846E6F718FE81B2286A5B +:10FAB000A0F8C41028A0FDF7E9F8286A30F8C41FA0 +:10FAC00042885140818025A0FDF7E0F81D20E1E744 +:10FAD00069463046FFF75EF80E216846E6F7FEFD00 +:10FAE00081B2286AA0F8C4101BA0FDF7CFF8286ADD +:10FAF00030F8C42F81884A40428018A0FDF7C6F82C +:10FB00003020C7E700E005E001463046FFF742F845 +:10FB10001F20BFE7E2313046FFF73CF8286AC06992 +:10FB200008B12120B6E7A07808B12220B2E733203F +:10FB30002073208804B0BDE8F041FFF721BD00002C +:10FB4000740100208C7300206B65795F73697A659E +:10FB50002025640A000000007900000065646976D1 +:10FB6000000000002DE9F041414D0626697A032985 +:10FB700013D02C6D002C1FD02946227B096A092A3C +:10FB80005BD02ADC052A38D0072A15D1026841F853 +:10FB9000532F40684860082042E035492A7C58319C +:10FBA000022A0BD00268AA658088A5F85C00087854 +:10FBB00000F03F0008706E72BDE8F0810288A5F881 +:10FBC0005820807885F85A00087800F03F0040F00F +:10FBD0004000087004206872EEE7182A34D01A2A10 +:10FBE000EAD10021E6F77AFD81B2286AA0F8C610B2 +:10FBF00020A0FDF74BF81B2012E00068C0F31307AC +:10FC00001D48874201D34042074400F06BFC286A3C +:10FC10003A460C212530E6F775FDA07810B1292071 +:10FC20002073C9E703202073204601F075FA286A83 +:10FC3000407E0028C0D12673BEE7026841F85B2FE2 +:10FC4000406848600A20EBE7CA31FEF7AFFF286A38 +:10FC5000227C10F8D11F01F0F001491E11440170FF +:10FC6000E27B01F0EF0101EB021101701920D7E7EF +:10FC700074010020646976003F420F0070B5164C95 +:10FC8000072010216071A171E0710025A572257215 +:10FC90006572E57304F16400EDF7B0F92564A573AE +:10FCA0000E48A56460654FF6FF70A08204F16C01F8 +:10FCB00025710B4848600846EAF734FD06210948DB +:10FCC000ECF70CFD04F1740107484860BDE8704092 +:10FCD0000846EBF743BE000074010020A0BB0D00F6 +:10FCE000C5F50100A1000200B1F4010070B50446A1 +:10FCF000002600F0F7FB134D60792A6A82F8400174 +:10FD0000D4F80600C2F841016089A2F845016B6A87 +:10FD100023B125326079A11D98470646A0782C6A48 +:10FD200008B14C3406E0453400F05CF8296A4531EE +:10FD30004871887168786070A6702878E070A8793A +:10FD4000207170BD7401002010B5EAF70FFE002885 +:10FD500004D090F86700022801D0002010BD0120D7 +:10FD600010BD0000044890F90100401C01D00020A3 +:10FD700070470120704700007401002010B5FFF7A4 +:10FD8000C3FD00280CD0074A0221126A5176017B7C +:10FD9000032901D106210173BDE8104000F0B0BB7A +:10FDA00010BD00007401002070B50C4D8178286AE8 +:10FDB0004C3009B1807900E0407900F01DF804462C +:10FDC000286A2246016A0648E5F7C4F8286A006AEC +:10FDD000A04201D1012070BD002070BD740100203F +:10FDE000A83D0200034906200978C90700D0072072 +:10FDF000704700007401002010B50024C10700D036 +:10FE00000324810701D544F00C04400701D544F0D8 +:10FE10001004214602A0E5F79DF8204610BD000021 +:10FE20006B65792073656E743A25780A00000000CE +:10FE3000FEB5064600244A4D601E0290286A90F8DE +:10FE40002000400713D56846EDF7D8F80AE0684669 +:10FE5000EDF7D0F8296A0A30102201F59071E4F725 +:10FE60002CFB90B16846EDF7CDF80028EFD1286A59 +:10FE700000F24110E6F716FC0246286A90F840119D +:10FE800038A0E5F767F84CB120E06846EDF7B2F826 +:10FE900004466846EDF7B0F80290E8E7296A91F861 +:10FEA000400138B902AA01F241110020EDF788F8AB +:10FEB00004000BD1296A02AB01F5907291F8400160 +:10FEC00001F24111EDF70CF8040044D0287928B173 +:10FED000286ACC221021E230E4F7D6FA296A1022EF +:10FEE000E23104F14800E4F7AFFA0027A765296A78 +:10FEF00091F82000C00607D5102201F5987104F191 +:10FF00003400E4F7A1FA6764286A006AC10720D0C8 +:10FF100080071ED5F27B317C1CA0E5F71BF8296A0F +:10FF20001022B1F806016085D1F80801E062D1F82D +:10FF30000C01206301F5887104F11A00E4F784FADA +:10FF4000307C6070F07BA070307E032806D00020EB +:10FF5000E070EBF7A7FC0298B084FEBD0120F7E744 +:10FF600074010020736D2070656572206164647295 +:10FF700020747970652025752C207065657220616C +:10FF8000646472657320257300000000736D3A206D +:10FF900073657420656E6372797074696F6E206921 +:10FFA0006E666F726D6174696F6E20286B65792063 +:10FFB00073697A652025752C2061757468656E7487 +:10FFC00069636174642025752900000010B5FFF78E +:10FFD0009BFC10B1B0F9240010BD4FF0FF3010BDF4 +:10FFE000017B491C0173704710B588B00A9CCDE9AC +:10FFF00000230B460246122102A800F07BFF8DF879 +:020000040002F8 +:100000001340122302AA00210420FFF78BFA08B044 +:1000100010BD00B585B0CDE900230B4602460B218B +:1000200002A800F067FF0B2302AA00210420FFF7BB +:1000300079FA05B000BD10B586B0CDE900230B46B6 +:100040000246089C0F2102A800F054FFCDF813408F +:100050000F2302AA00210420FFF764FA06B010BDA6 +:100060007047000070B50D46FFF74EFC040014D039 +:1000700000F038FA2A46094D0C21286A2530E6F7A7 +:1000800041FB296A03204876207B032801D1062002 +:100090002073BDE8704000F033BA70BD74010020D9 +:1000A0002DE9F0471546042820D0092821D108461B +:1000B000FFF72AFC04001CD02A78052A1BD0217BDC +:1000C00096A0E4F747FF227B0126DFF878824FF005 +:1000D00003094FF0060A2A2A77D018DC232A15D004 +:1000E00010DC022A05D0222A1ED1B9E01078782827 +:1000F0001ED0BDE8F087A07808B1232000E03320AF +:100100002073F6E7242A77D0272A0DD174E00E2732 +:10011000392A32D004DC2B2A7BD0332A04D10BE0DD +:100120003A2A55D03B2A74D0297887A0E4F712FFE9 +:10013000BDE8F04700F0E4B928780B2801D1A07899 +:1001400018B1204600F044F9F2E7607B3725042817 +:1001500011D0032801D0E670EAE7B4F92400ECF7E7 +:1001600045FF40B1408D30B1B4F924107EA0E4F7D2 +:10017000F1FE3420CFE02573DAE728780228E0D1B9 +:10018000D8F82000296840F84C1FA9888180A979F7 +:100190008171204600F01CFF18B1D8F820100876B5 +:1001A00058E0D8F8200090F8240001280ED084F8F8 +:1001B0000C90204600F0B0FFD8F82000407E0028C8 +:1001C000B6D100BF84F80CA0B2E723E00420A2E07F +:1001D00028780328B5D1D8F82010681C8331FEF7A1 +:1001E000D9FC132097E000BFD8F82010681C7331A9 +:1001F000FEF7D0FC27739BE728780128A1D1286857 +:10020000C4F81100A888A4F81500A879E075282082 +:1002100081E021E02878032893D1D8F82010681CC9 +:100220008331FEF7B7FCD8F8200090F824000228AC +:1002300005D162792188A31DD320FFF7EAFED8F803 +:100240002000417E042904D00129BBD184F80C9000 +:100250006EE7067626736BE728780428C4D070E72B +:1002600028780146801F052841D2DFE800F0030C02 +:100270001C283700D8F82010086A40F001000862F6 +:1002800001F5887117E0D8F82010086A40F00200E4 +:100290000862B5F80100A1F8060101F58471E81CB7 +:1002A000FEF784FC26E0D8F82010086A40F004002D +:1002B000086201F59071681CFEF76CFC1AE0D8F832 +:1002C0002010086A40F008000862687881F8400150 +:1002D00001F24111A81CFEF76CFC0BE0D8F82010CD +:1002E000086A40F01000086201F59871E3E72DA05C +:1002F000E4F730FE2046FFF757FD0028A8D020463F +:10030000FFF796FDA07828B1232020732088FFF7FF +:1003100037F90DE7172020730AE70000736D5F704F +:1003200064755F68616E646C65723A2073746174A1 +:10033000652025752C207064752030782530327842 +:100340000000000074010020556E657870656374CC +:1003500065642050445520257520696E20737461B2 +:100360007465202575000000736D3A205365747420 +:10037000696E672075702070726576696F7573207D +:100380006C746B2F656469762F72616E6420666F82 +:10039000722064657669636520696E6465782025DE +:1003A00075000000556E6578706563746564205053 +:1003B000445520257520696E20534D5F5048335FAA +:1003C000524543454956455F4B455953000000008F +:1003D000064A0821126A1176817809B1232100E0CA +:1003E000332101730088FFF7CBB8000074010020AF +:1003F00000487047CC0100200148007C7047000095 +:100400007401002010B504460648E6F773FB064861 +:10041000002C047405D0E7F737FBBDE81040E7F780 +:1004200013BB10BDCC73002074010020064910B529 +:100430004865087C002806D00448E6F75BFBBDE869 +:100440001040E7F721BB10BD74010020CC730020E1 +:10045000024908650248EAF7DBBB0000740100208E +:10046000E83A020001494862704700007401002028 +:1004700010B5FFF749FA040016D0637B227BA17800 +:100480000AA0E4F767FD04206073A07818B1204645 +:1004900000F015FD04E0207B332801D137202073C4 +:1004A000BDE8104000F02CB810BD0000736D5F7205 +:1004B0006571756573745F70616972696E672069D3 +:1004C0006E20726F6C652025752C207374617465C5 +:1004D0002025752069726B207374617475732025F3 +:1004E00075000000054900200246096A0B18401CEF +:1004F00083F825201028F9DB7047000074010020E4 +:100500002DE9F04F8DB0EAF73FF900285AD0F94CA9 +:10051000207A012802D0032808D105E0E07B28B921 +:1005200000216A4601200EE0E07B48B1607A022893 +:1005300012D04FF0010A042812D0062812D124E06C +:100540006A4600210320FEF7D9FFE6F783FCE06A44 +:1005500000226946103085E3FEF77AFA0020E1E2D6 +:10056000E07B38B1A07A01282FD003282DD00528B0 +:1005700031D12AE0DF4869465830FEF763FDFEF7C7 +:1005800067FA00226946DC486CE3DA485830E6F73F +:1005900089F80146D9A0E4F7DDFC84F809A0DB2046 +:1005A0008DF8000006208DF80100A06DCDF8020046 +:1005B000B4F85C00ADF8060008236A460021042068 +:1005C000FEF7B0FF0DB0BDE8F08FE07B012802D050 +:1005D000FEF7CEFDF6E7A07B0026002866D106A830 +:1005E000EAF7EEF907E006A8EAF710FA00F15A0573 +:1005F000687B012807D006A8EAF7E8F90028F2D1BD +:10060000A07B50B152E00095298868790223AA1D89 +:10061000FEF7E8FC02206873F2E7B6484830E6F7D8 +:100620001CF978B9A56CB34829464830E6F752F969 +:100630000096A87A01232A1D0021FEF7D3FC284644 +:10064000E6F716FAA07B88BB3EE0AA486430ECF7D8 +:10065000D1FC0546001DE6F725F802462978ADA035 +:10066000E4F778FC2878617B884206D1A14906220C +:100670005E31281DE3F721FF80B1607B90B1E07B04 +:10068000012819D09B4869465E30FEF7DBFCC4F8B0 +:1006900040A0694605F10A00626CE3E20020FEF723 +:1006A000E1FB09E093486430ECF7ACFC914864301E +:1006B000ECF7A0FC0028C8D18E486430ECF79AFC17 +:1006C00010B90120FEF7CEFB4FF0230B4FF6FF775A +:1006D00006A8EAF775F9A1E006A8EAF797F900F18C +:1006E0005A05287B28281BD004DC242807D025287D +:1006F000F1D16FE034283CD03728ECD182E000966D +:100700000196288802238A4A0621ECF7C5FA20B10F +:1007100028880621ECF76AF880E0272028737DE01E +:100720002846FFF7E3FA206AD5F8111040F8451F74 +:10073000B5F815108180E97D8171284600F048FCEC +:1007400020B1216A087685F80CA009E0284600F05F +:10075000BDFC206A90F82400022808D029202873C4 +:100760002988A182A878002854D072A253E00420DE +:10077000F5E7B5F92400ECF739FC236A8046408D93 +:10078000A3F80601D8F82C10C3F80811D8F83000E7 +:10079000C3F80C01102208F11A0103F58870E3F781 +:1007A00053FE98F80300009098F8023098F8012062 +:1007B000B5F9241062A0E4F7CDFB98F80100287485 +:1007C00098F80200E87398F8030000B10320287637 +:1007D0003520C4E7206AE96940F8CA1F296A4160E8 +:1007E000698B20F8021CC17901F00F01491C2974A2 +:1007F000C079C9B2C0F30012EA735FA0E4F7AAFBA4 +:100800002E20ACE72846FFF771FA284600F05EFC80 +:100810003820A4E767A26AA0E4F79CFBA08AB8424C +:1008200005D106A8EAF7D2F800287FF455AFA08AD0 +:10083000B8423FF4CFAE0621A046EBF795F8F0B1F1 +:10084000B8F81400FFF760F80500F2D0297B69A022 +:10085000E4F780FB287B1B2842D015DC1A2840D205 +:10086000DFE800F03F313F3FEF3FEF3FEF3FEE3F2C +:10087000ED3FEC3FED3FEBEAE93F3FEF3FEF062175 +:10088000A08AEBF7B3FF9DE62E282BD00EDC26289E +:1008900029D006DC1D2827D01F2826D0212820D1CA +:1008A00028E2292822D02D28F9D1F2E135281ED0BE +:1008B00004DC302818D03228F1D103E2382817D0D0 +:1008C0003C28ECD1EDE105208DF81C00D8F8200083 +:1008D000007E8DF81D00A87808B1232095E093E0F4 +:1008E000B1E117E2FBE1D3E02CE135E1D7E096E09E +:1008F000C2E00000740100208C7300204E65772058 +:1009000072616E646F6D20616464726573733A2006 +:1009100025730000646576696365207479706520CD +:1009200025752C20616464723A2025730000000054 +:10093000543D0200726573706F6E64657200000052 +:100940006462206B65792025752C206B6579207396 +:10095000697A652025752C2061757468656E7469E7 +:1009600063617465642025752C20617574686F72ED +:10097000697A656420257500736D3A207265636538 +:1009800069766564206C746B20726571756573742B +:100990002077697468206B65792073697A652025F2 +:1009A000752C2061757468656E7469636174656423 +:1009B00020257500696E69746961746F72000000AA +:1009C000736D3A20636F6E6E656374696F6E20306D +:1009D0007825303478206C6F636B656420736574A0 +:1009E000757020636F6E7465787420617320257351 +:1009F00000000000736D5F72756E3A20737461744D +:100A000065202575000000003320287300960196AC +:100A10002888022307AA0621ECF73EF9EEE1206AB6 +:100A200007A900F58870FEF7B5F836202873206A0C +:100A3000B0F8061106E0EBE054E016E19EE074E049 +:100A4000C6E06BE0F5A0E4F785FA206A002100F526 +:100A50008470E5F747FE0646206A042100F584709D +:100A6000E5F740FE0246206A07A93346B0F80601C2 +:100A7000CDE90001298821E1D8F82020012002F8E1 +:100A8000450F3920287300960196288807233EE0F9 +:100A900085F80CB02988EB48EAF7BAF892E5206AA5 +:100AA000022180F84C10FFF79DF90146206A237857 +:100AB00000F14C024530D37043790B40537180797B +:100AC0000723084090712A202873009601962888F1 +:100AD0000621ECF7E1F8284600F0EEFA284600F08F +:100AE0001BFB6FE504208DF81C00D8F820000DF1E9 +:100AF0001D015330FEF74EF8A87808B12C2000E015 +:100B00003B202873009601962888112307AA062106 +:100B1000ECF7C2F8284600F0CFFA75E12846FFF757 +:100B20005FFA2846FFF794FC4CE598F80F0001287F +:100B3000F3D02846FFF754FA216A2A460846353191 +:100B400025308FE098F80F000028E6D1206A07AA28 +:100B50000021B0F8C60008E098F80F000028DCD1AA +:100B6000206A07AA0121B0F8C600FEF7C7FC284694 +:100B7000FFF736FA2A4607A9E06A73E098F80F00F3 +:100B80000128CAD02888E9F7F1FEA97802AA21B184 +:100B9000C17BCDE90012037A03E0017ACDE90012AE +:100BA000C37BD8F8200000F14C02D11F7330FEF750 +:100BB000A5FA2846FFF714FAD8F82010C146A33149 +:100BC00002A8FDF7E7FF2A4602A9D9F820001BE09A +:100BD00098F80F000128A0D02888E9F7C7FEA97867 +:100BE00002AA21B1C17BCDE90012037A03E0017AA8 +:100BF000CDE90012C37BD8F8200000F14C02D11FD0 +:100C00005330FEF77BFA16E02530FEF711FAFBE0D1 +:100C100098F80F0001287DD0A87802AA0028D8F8FB +:100C2000200003D000F17301533002E000F15301C2 +:100C3000733000F031F92846FFF7D2F92A4602A9AD +:100C4000D8F82000E0E798F80F00012862D0206A69 +:100C500002A9CA30FEF788FC2846FFF7C1F92A46E8 +:100C600002A97948FEF7E4F9ACE403208DF81C00F2 +:100C7000206A0DF11D016330FDF78CFFA87808B1E3 +:100C80002B2000E03A202873009601962888112333 +:100C900089E0206A07A99330FDF77CFF16202873AE +:100CA00017E0206A07A99330FDF774FF1620287318 +:100CB00007A8CDE90060298800231A466348E9F7B0 +:100CC000A7FF7FE4206A07A99330FDF763FF85F84B +:100CD0000CB0298807AA5E48E9F79AFF72E498F8F1 +:100CE0000F00012816D0206AB0F8C81059A0E4F708 +:100CF00031F9ACE7D8F82000C16961A0E4F72AF91E +:100D0000D8F82000C169CA070ED0216AC96921F04C +:100D1000010100E078E0C16106218DF81C100DF1A1 +:100D20001D0100F193005BE08A0715D5216AC969AE +:100D300021F00201C16107218DF81C10B0F8C81024 +:100D4000ADF81D100DF11F01CA30FDF72FFF009601 +:100D5000019628880B2326E04A070CD5216AC96929 +:100D600021F00401C16108208DF81C0036480DF106 +:100D70001D01103034E00A071DD5216AC96921F030 +:100D80000801C16109208DF81C00E06A90F8261066 +:100D90008DF81D100DF11E012030FDF70AFF0096A1 +:100DA00001962888082307AA0621EBF775FF284635 +:100DB00000F082F906E4C90615D50A218DF81C1049 +:100DC000216AC96921F01001C161217921B1CC22C8 +:100DD0001021E230E3F758FB206A0DF11D01E230EB +:100DE000FDF7D8FE50E7A878A0B12846FEF7DCFF53 +:100DF00040B12846FFF71CF885F80CB02888FEF7AC +:100E0000BFFB01E022202873B8F81400B8423FF479 +:100E10005FAC38E533202873F0E70000736D3A20AB +:100E20006863695F6C655F73746172745F656E633C +:100E300072797074696F6E206564697620307825E8 +:100E400030347800003B02007C730020F03A02004E +:100E5000F83A02004C544B20526571756573743A30 +:100E600020726563616C63756C6174696E6720776D +:100E7000697468206564697620307825303478009C +:100E80006B657920746F206469737472696275741C +:100E9000653A25780A0000008B689360C968D160C4 +:100EA00081681160C0685060704710B5FEF72CFD76 +:100EB000002803D0BDE8104000F001B810BD017B50 +:100EC00009B1232903D124210173FFF719BB70470E +:100ED0000149487170470000740100200149087001 +:100EE0007047000074010020014AD0719171704771 +:100EF0007401002030B4891EDDE9024502704170A2 +:100F000043800471411D284630BCFDF752BE0000ED +:100F100010B5174C0021206A80F824104721095C85 +:100F200031B14E21095C19B1042180F8241010BDA3 +:100F3000FFF7D8FA206A00F14501CA78520703D4B6 +:100F40004F22125C5207F2D549780429EFD84D227E +:100F5000125C042AEBD8074C02EB820323445B5C4F +:100F600080F82430BDE8104003A0E3F7F3BF000091 +:100F700074010020563D0200736D5F7365747570D7 +:100F80005F746B3A206D617374657220696F2063C2 +:100F900061703A2025752C20736C61766520696F2D +:100FA000206361703A202575202D3E206D657468A0 +:100FB0006F6420257500000010B50022401E06D485 +:100FC0000B5C42EA4302DC090A542246F6E710BDF4 +:100FD00070B5254C05468178206A21B100F14501A4 +:100FE00090F84B2003E090F8512000F14C01097972 +:100FF000102923D8072921D3E379994202DBA37969 +:10100000994200DB19462974C1B1002101621046E2 +:10101000FEF7F2FE216AC861FFF77AFF206A90F8B6 +:10102000241012A0E3F796FF206A90F82400052808 +:1010300017D2DFE800F0050909090D00062070BD90 +:10104000617901F0010106E06179C1F3800102E0FC +:101050006179C1F3400121B100B10120E8730020A2 +:1010600070BD032070BD000074010020534D503A44 +:101070002067656E65726174696F6E206D65746856 +:101080006F64202575000000014610220148E3F737 +:10109000DBB900008C730020014901200871704702 +:1010A0007401002010B5022101730088FEF768FA70 +:1010B000BDE81040FFF724BA10B5044600F026F84A +:1010C0002046BDE8104000F001B8000070B50D4C9E +:1010D0000546206A0561E5F70DFD2946206AE5F71A +:1010E0003DFD2A460849206AE5F73AFD47F23052AD +:1010F00040F28121206AE5F71BFD206ABDE87040BF +:10110000E5F7E8BC74010020A51002000148006A60 +:10111000E5F7F0BC7401002038B5044618480021FA +:10112000006A00F12502417690F824500121042D37 +:1011300016D2DFE805F01A021604A3782BB1417627 +:10114000A31D62792188D42014E00C211046E5F714 +:10115000C9FA009062792188A31DD220FEF76BFFA7 +:1011600038BDA378002BF0D1E9E741766279218878 +:10117000A31DD02001B0BDE83040FEF74ABF0000FB +:1011800074010020002203E0C1F10F03491CC25486 +:101190001029F9DB7047000070B50F49012208687B +:1011A00062F3020008600D4D0D4C0A1520462968B7 +:1011B000E3F74AF92868A0F54051CC390BD16968AA +:1011C000002908D04FF6FF7202E08B782354C91C27 +:1011D00008889042F9D170BD040409401004002031 +:1011E00000000A40FCB500250C4602462B4610784C +:1011F000571CFCF755FC06463878FCF751FC002ECE +:101200001BDB002819DB50EA061016D4921CE054B0 +:10121000052B08D012F8010B3A280BD02D2809D045 +:1012200020280AD106E000982060BDF804000125BE +:10123000A08002E05B1C062BD9DB2846FCBD10B564 +:101240000622E3F73AF908B1002010BD012010BDD5 +:1012500001480068704700004C04002002494A68B9 +:1012600002600989818070474C0400200248018A8D +:10127000016000F015BA00002C04002070B5284869 +:10128000D0F80413274C627D002A47D0E368D0F8D9 +:101290008050D9439D4211D0234B5D68C5F303159F +:1012A000022DFAD1C0F88010416D8906FCD5022AC2 +:1012B0000FD0032A23D0042A21D114E0C0F88010D3 +:1012C000032A01D0042A29D1BDE870400020E5F7A7 +:1012D0007FBA1648816821F480118160816841F4E9 +:1012E000801181600BE0D0F80C13114802691144A1 +:1012F00021F07F424FF0E0218A6180680861F4F7B5 +:101300006FFE000D40EA01302168814206D2218A39 +:1013100008442060BDE8704000F0C2B970BD000014 +:10132000000009402C040020000004400000074099 +:10133000A87800202DE9F0475D4CC8274FF0000841 +:101340005C4D064684F81580A4F10809022838D3BC +:10135000E07CB0B3207DA0BBA07C90BBD5F814038B +:10136000C0072ED100F0D4F8032E01D8022000E0EF +:1013700003206075192E0AD94F4802683AB14168B6 +:101380000120904718B104206075D9F8047006EB6D +:101390004600C0EBC610C7EBC000A16800F0D2F851 +:1013A00005F54075401EA860686820F440706860CC +:1013B000617D286861F302002860A5F54075E5F7B6 +:1013C000BFF93E4E306B40F020003063607D042852 +:1013D0001BD0C6F88C8088B1D5F88010A246C943CE +:1013E000E160C5F88010042813D238B105F54175C5 +:1013F00033486861286840F001002860BFF34F8FD0 +:1014000030BFBFF36F8FBDE8F0872E49C6F88C1050 +:10141000E2E706F5B276306840F001003060D9F8B6 +:101420000000C5F81803284F3968DFF88C90DFF802 +:10143000988009F1080908F11808C9F80010D8F8CF +:1014400000104FF0E024C9F804102169C9F8081011 +:101450006169C9F80C10A169C9F81010E2F790FE93 +:10146000306820F001003060D5F88010DAF80C0008 +:101470008142C8D0D9F800103960D9F80420C8F8E2 +:101480000020D9F8081021F001012161D9F80C00E1 +:101490006061A9F11000D0E90021002090470020F0 +:1014A000E3F7C8FCBDE8F0470120E3F7C3BC000048 +:1014B0002C04002000000940A07800200000044017 +:1014C00000FF6000C0FF3F0008ED00E010B50446DB +:1014D000E5F78EF9094900228A7458B104EB4401FA +:1014E000C1EBC411B0EBC10F06D24FF47A71B0FB5F +:1014F000F1F010BD01208874204610BD2C0400209E +:10150000024902684A608088088170474C040020C4 +:1015100010B50A4C0A48616811B1C0F8101310BD2B +:10152000D0F810230023581E01466260E2F748FFFE +:10153000000C40EA0140A06010BD00002C04002017 +:101540000000094010B5A0FB0134002202FB01415C +:1015500000FB0210190100D5401C10BD0148406875 +:10156000704700002C0400200149C8747047000037 +:101570002C04002010B500F093F80548D0F814139F +:10158000C907FBD1FFF7C4FF0248406810BD000047 +:10159000000009402C040020014908827047000027 +:1015A0002C040020034B43F8301003EBC0004260D2 +:1015B00070470000987800202DE9F04116460D464E +:1015C0000746B0F54E7F61D9314C00BFD4F8140303 +:1015D000C007FBD1FFF79CFFE3F734FA04F5407432 +:1015E000A760606820F440706060206820F0070009 +:1015F000001D206027480068A061274BA4F54074B7 +:1016000086B3304600262A18DF02DFF890C0521E4B +:1016100030464FF0010E00BF3CF810103944A9428B +:1016200005D9BA4203D30EFA00F73743FEB2401C85 +:10163000C0B20F460528EFD3186B40F020001863A6 +:1016400050330020D863988F66F3CF2098871F20EF +:10165000D98FB04360F3CF21D987D88F40F4F86099 +:10166000D88704E0FFE7186B20F020001863D4F857 +:10167000040340F00100C4F80403BFF34F8F30BFF0 +:10168000BFF36F8FBDE8F041E3F7E6B9BDE8F08145 +:10169000000009402404002000000440CC3E020069 +:1016A0000749002048600748D0F81413C90705D13E +:1016B000D0F8141341F00101C0F814137047000072 +:1016C0002C0400200000094018484168C1F30311B0 +:1016D0000229FAD1416E5C2262F3D0114166016D9C +:1016E000532262F31A410165016D21F0F0012031AE +:1016F0000165016D21F4706101F500710165016DF5 +:1017000021F4704101F580510165416D21F0FF0127 +:10171000891C4165416841F400014160016B41F061 +:10172000200101630021C0F88C10704700000440C4 +:10173000014AC2E9000170471C0000207FB5144631 +:101740000B4A0D46064607CA8DE80700E3F7ACFBD7 +:101750008DF80C608DF80D508DF80E40054C019001 +:101760000323646803AA09216846A0477FBD0000DF +:10177000203502001C0000201FB5084A044607CA95 +:101780008DE80700E3F790FB0394054C01900423D8 +:10179000646803AA09216846A0471FBD2C350200D2 +:1017A0001C000020FEB514460B4A0D46064607CA2B +:1017B0008DE80700E21CADF80220E3F775FB01900D +:1017C000ADF809608DF80B402346044C2A460C21E5 +:1017D00064686846A047FEBD383502001C00002042 +:1017E000FEB514460B4A0D46064607CA8DE80700AB +:1017F000A21CADF80220E3F757FB8DF809608DF8C5 +:101800000A402346044C01902A4664680B2168462E +:10181000A047FEBD443502001C0000203EB5074D28 +:101820002C68002C08D0CDE90002ADF80810ADF806 +:101830000A3068466968A0473EBD0000E004002009 +:101840003EB5094A0C46054607CA8DE80700ADF8C3 +:101850000240E3F729FB2346044C01902A466468C2 +:1018600009216846A0473EBD5C3502001C000020EF +:101870002DE9FE4316460E4A0D46074607CA0A9C46 +:101880008DE80700601C9846ADF80200E3F70CFBFA +:101890002346084C8DF8087066F35F0501908DF8BB +:1018A0000950646842460A216846A047BDE8FE83A5 +:1018B000503502001C00002070B515460E46044647 +:1018C000FCF73CF9401E80B2854208D22046E7F77B +:1018D00047F82046BDE870400021E5F79BBB608FCC +:1018E00028446087267070BD70B50C46C18D0546D2 +:1018F000A14201D8E5F710FA21462846BDE870401C +:10190000052200F011B870B515460E46044600F0E9 +:1019100007FD618F08446087204600F001FD08B193 +:10192000267070BD257070BD10B50446C08D88420C +:1019300008D82046E7F714F82046BDE810400021FB +:10194000E5F768BB491CA185227010BD2DE9F04761 +:10195000824619488946014602701D4614460027F2 +:101960005046EBF7D5FBF0B9781EBDE8F087A888A4 +:10197000D5F80080083586B2B44201D3012000E0DA +:1019800000208D220DA1E4F72FF8B44201D272B6E7 +:10199000FEE73346424639460748EBF727FDA01BD2 +:1019A00084B2B81987B2002CE1D1034A49465046A7 +:1019B000EBF78EFC0020D8E774040020636F6E7490 +:1019C000726F6C6C65727461736B2E630000000043 +:1019D0000249096831F91000704700002004002016 +:1019E00071B101290FD0A0F5BC706FF01A0101EBA5 +:1019F000E000091101EBE000002807DB80B270472E +:101A00005038C010F8E72C388010F5E700207047F8 +:101A100061B101290ED0C000012A0FD0C00000F52D +:101A2000AC7000BF00F5BC7080B27047502101EB74 +:101A3000C000F9E72C2101EB8000F5E740005630AB +:101A4000F0E7C0000C3880B2C8400830C0B2704720 +:101A50002DE9F05F81465006050E9B463C20164658 +:101A60000C460023DDF82C800BE000BF31F9132079 +:101A7000002A00DA5242B2FA82F2824200D21046C2 +:101A80005B1CAB42F2DB12280AD31138002205E0BE +:101A900031F81230834021F81230521CAA42F7DB91 +:101AA0004848407890B100200CE000BF34F8201086 +:101AB0000A1209EB40010A7004EB800252881212EC +:101AC0004A70401CB042F1DBBDE8F09F0846082296 +:101AD0000121E5F7F1FAFDF719F90746B4F902100B +:101AE000B4F90000FDF78CF8404201B20020FDF788 +:101AF000FBF8824601462046FDF76AF80125394683 +:101B00005046FDF7F1F8824604EB85005146FDF79B +:101B10005FF86D1C082DF2DB39460846FDF7E4F846 +:101B20000746BBF1020F10D139460846FDF7DCF835 +:101B300007460AE039465046FDF7D6F8824604EBE0 +:101B400085005146FDF744F86D1CB542F2DBB8F153 +:101B5000000022DD00270546042800DA450005F1D3 +:101B600008018E4219DBF21F294604F11C00E5F73B +:101B7000A3FA90FBF5F0FDF7C9F8804608250AE0C6 +:101B800041463846FDF7B0F8074604EB8500394674 +:101B9000FDF71EF86D1CB542F2DB00220FE000BF1E +:101BA00034F92200FCF718FF09EB4203187004EB2C +:101BB0008200B0F90200FCF70FFF5870521CB242CD +:101BC000EEDB81E7F401002038B5049C00940C465C +:101BD0000146204642F60544A04738BD10B58EB0F8 +:101BE000017B0DF1280CC47B837B427BACE81E009B +:101BF000017A0DF1180CC47A837A427AACE81E009F +:101C000001790DF1080CC47983794279ACE81E00A2 +:101C1000C2788178CDE900124378027803490448FC +:101C2000E3F774F90EB0024810BD00002837020037 +:101C30002469002070B50C46054610220449E2F7DD +:101C400003FC22462846BDE870400021E4F75ABD57 +:101C50001837020010B50C220449001DE2F72DFCD4 +:101C600008B1002010BD012010BD00001C3702008B +:101C7000D0E9013201699A60D0E901235A604A68CB +:101C8000824201D182684A60002202610868401ED7 +:101C9000086008687047000010B5040004D140F2E5 +:101CA0008A7105A0FBF7D4FF00F07AF8A46B00F06E +:101CB00097F8204610BD000071756575652E6300AC +:101CC00010B5040004D140F2AC7102A0FBF7C0FFD4 +:101CD000A06B10BD71756575652E630010B50400AD +:101CE00004D140F29B7106A0FBF7B2FF00F058F858 +:101CF000D4E90E10441A00F073F8204610BD00001D +:101D000071756575652E6300034B036003F1540024 +:101D1000086080201060704760050020034B03605E +:101D200003F154000860802010607047B407002061 +:101D3000012200210720E9F737BC00F108014FF02C +:101D4000FF32C0E90112C1600161002101607047EA +:101D500000210161704730B50B685A1C02D000F1B8 +:101D6000080202E0026904E02246546825689D42A8 +:101D7000FAD953684B6099608A60516008610168C4 +:101D8000491C016030BD42684A6093688B6093686B +:101D90005960916008610168491C0160704700004A +:101DA000202080F31188BFF34F8FBFF36F8F084956 +:101DB0004868401C4860012809D10648006810F0B6 +:101DC000FF0F04D04FF4B37103A0FBF741BF70477E +:101DD0007400002004ED00E0706F72742E63000048 +:101DE00010B5074C606820B940F26D1105A0FBF7F3 +:101DF0002FFF6068401E606001D180F3118810BD24 +:101E000074000020706F72742E63000070B500289B +:101E100028D0154DA0F108046068E968084204D193 +:101E20004FF48B7111A0FBF713FF206820B140F233 +:101E300017110EA0FBF70CFF6168E868014211D092 +:101E40002268002A0ED18143616000F01FFA6068A9 +:101E50006968084468602046FCF7E2FABDE8704013 +:101E600001F02ABA70BD00008C0000206865617026 +:101E70005F342E630000000007482021816007497D +:101E8000C160002101614FF0E020016181611F21EB +:101E9000416103210161704774000020FFFF0700CA +:101EA0002DE9F041334E0546F068854200D90546DC +:101EB0004FF0E024206920F001002061A169B268A0 +:101EC000681E02FB00173069874200D93F1A72B6BC +:101ED000BFF34F8FBFF36F8FE5F75AF858B36761C1 +:101EE0004FF00008C4F81880206940F0010020611C +:101EF0002846FFF71FFA4046FFF7C0F962B6BFF366 +:101F00004F8FBFF36F8F72B6BFF34F8FBFF36F8FDB +:101F1000022020612069C00314D5A069B168381A75 +:101F2000081A3269401E904201D3884200D9481EE7 +:101F30006061681E10E0A0696061206940F00100E6 +:101F4000206111E0B168A0694D432A1AB2FBF1F09B +:101F5000431C4B43991A6161C4F81880216941F010 +:101F60000101216100F07AF9B068401E606162B63B +:101F7000BDE8F0817400002010B5E2F7FDF80F4CC9 +:101F800010280CD34FF0E021084490F8F00321789A +:101F9000884204D240F2A52109A0FBF759FE0A4865 +:101FA0000068616900F4E060884206D9BDE810402D +:101FB00040F2B52102A0FBF74BBE10BD740000201B +:101FC000706F72742E6300000CED00E010B5040019 +:101FD00004D140F2B77106A0FBF73AFE94F8460030 +:101FE000002804D12046BDE81040FFF70FBF10BD08 +:101FF00071756575652E630070B515460E4604460D +:10200000FFF7CEFE94F944104FF00000491C01D1B7 +:1020100084F8440094F94510491C01D184F8450026 +:10202000FFF7DEFEA06B28B92A46314604F12400F2 +:1020300000F056F82046BDE87040FCF7E9BB000010 +:1020400010B5040011D00D48006B20B140F23C5196 +:102050000BA0FBF7FDFD00F019F900212046FBF76E +:1020600079FF01F029F9002807D107494FF0805086 +:102070000860BFF34F8FBFF36F8F10BD24000020A7 +:102080007461736B732E630004ED00E002490A6A09 +:102090000260C968416070472400002001490120A6 +:1020A000C86170472400002070B50D46040004D1BB +:1020B00040F6CE3107A0FBF7CBFD0848016820466B +:1020C0001831FFF748FE2846BDE870400121FBF7B4 +:1020D00041BF00007461736B732E63002400002005 +:1020E00070B514460D46060004D140F6F93109A03A +:1020F000FBF7AEFD0948016830461831FFF743FE93 +:102100000CB14FF0FF3521462846BDE87040FBF783 +:1021100021BF00007461736B732E630024000020E4 +:1021200070B50D46040047D0A06C20B94FF4815122 +:1021300022A0FBF78DFD606CA84200D30546E06A43 +:10214000A84239D0A06C012836D11E4E3068844296 +:1021500004D141F23B0119A0FBF77AFDE06AE56288 +:10216000A169002902DBC5F10F01A161164D00EB49 +:102170008000616905EB800081421DD1201DFFF7C1 +:1021800077FD012150B9E06A00EB800255F822206A +:1021900022B9326901FA00F082433261E06A3269A1 +:1021A00081401143316100EB800005EB8000211D6F +:1021B000BDE87040FFF7E7BD70BD00007461736B50 +:1021C000732E630024000020080A002030B587B079 +:1021D0000024039405AA04A903A80494FFF794FD1E +:1021E000DDE903010094CDE90110002315A1174892 +:1021F000059A00F0CDFE164D0028E8621FD001F0D0 +:10220000F5F8012809D0401C19D107B04FF402613C +:10221000BDE830400FA0FBF71BBD202080F31188E4 +:10222000BFF34F8FBFF36F8F4FF0FF30A8620120D5 +:102230006861EC6007B0BDE8304000F083B807B0DB +:1022400030BD000049444C45000000005DE2010043 +:10225000240000207461736B732E630070B5084C0A +:102260000546E068A16A2844884204D940F6152151 +:1022700004A0FBF7EDFCE0682844E06070BD0000BE +:10228000240000207461736B732E63000248016B9D +:10229000491C0163704700002400002070B5134CF6 +:1022A000206B10B10120E06170BD0020E061206969 +:1022B0000F4EB0FA80F0C0F11F0000EB800556F819 +:1022C000250020B940F6B7310AA0FBF7C1FC06EBA8 +:1022D000850000F10802416849684160914201D1DE +:1022E00049684160C868206070BD0000240000207B +:1022F000080A00207461736B732E630080B2020AB7 +:10230000C3B2891CC8B21946FFF718BA401E042888 +:1023100004D20122196882401143196000207047DD +:1023200010B50446FBF70AFC401F618FA28F80B2F4 +:10233000914201D3002010BD511A89B28842FAD9C6 +:10234000084610BD7CB5294D28780190FF202870E3 +:1023500028788DF800009DF800009DF8001000F02E +:10236000E000884204D04FF48A7121A0FBF770FC92 +:102370009DF80000204C00F02000207007206061D4 +:1023800008E000BF9DF80010A0F101004FEA4101F4 +:102390008DF800109DF800100906F3D46061042840 +:1023A0000CD040F2271112A0FBF752FC6069042800 +:1023B00004D04FF498710EA0FBF74AFC207D000278 +:1023C00000F4E0606061019828700C48016841F4F5 +:1023D00060010160016841F060410160FFF74CFD60 +:1023E00000206060E1F792FE00207CBD00E400E088 +:1023F000706F72742E6300007400002020ED00E006 +:1024000070B50D460446FFF7CBFCA06C08B9A06B75 +:1024100008B1002401E0A5640124FFF7E1FC204697 +:1024200070BD000070B50C46050004D140F2D52106 +:1024300009A0FBF70DFCAC4204D940F2D62106A05E +:10244000FBF706FC02220021284600F047F800288E +:1024500000D0846370BD000071756575652E6300E2 +:10246000F8B516460C46050004D140F2B9210BA080 +:10247000FBF7EEFBAC4204D940F2BA2107A0FBF710 +:10248000E7FB02200022009033461146284600F068 +:102490004BF8002800D08463F8BD000071756575A5 +:1024A000652E630010B502460021012000F016F8E9 +:1024B0000446FBF71FFF204610BD38B50B4600222F +:1024C00000901146012000F02FF80446FBF712FFA0 +:1024D000204638BD00220421AFF30080F8B517462E +:1024E0000E46050004D14FF4BB710DA0FBF7B0FB05 +:1024F0009EB105FB06F04C30FCF7C6F904000AD08B +:10250000002084F8460004F14C023B463146284640 +:102510000094FBF7FAFE2046F8BD0020EBE7000030 +:1025200071756575652E63002DE9F8431C46DDF86D +:10253000208016460D46070004D14FF49D7112A06D +:10254000FBF786FB24B94FF49F710FA0FBF780FBCC +:102550001EB145B94FF4A17102E025B140F243111B +:1025600009A0FBF775FB4C2000904CB1012084F8CA +:10257000460043463246294638460094FBF7C5FEDE +:102580002046BDE8F883000071756575652E63000F +:1025900070B50D46040004D140F203111CA0FBF7F6 +:1025A00057FBFFF7FDFBD4E90F20216802FB001168 +:1025B000A1600021A163216861600A46E06B216C83 +:1025C000401E00FB0121E16004F144014FF0FF30A7 +:1025D0000870487004F1100055B1FFF7AEFB04F12C +:1025E0002400FFF7AAFB00BFFFF7FAFB012070BD34 +:1025F00021690029F8D000F01FFE0028F4D0064918 +:102600004FF080500860BFF34F8FBFF36F8FEBE741 +:1026100071756575652E630004ED00E02DE9FF47D7 +:1026200082B01D468A464FF00008040004D140F2F3 +:10263000F12152A0FBF70CFBBAF1000F06D1206C80 +:1026400020B140F2F2214DA0FBF702FB022D07D191 +:10265000E06B012804D040F2F32148A0FBF7F8FA20 +:1026600000F0D4FC30B9049820B140F2F62143A028 +:10267000FBF7EEFA434F4FF000094FF0805600BFD2 +:10268000FFF78EFBA06BE16B884207D3022D05D0CC +:10269000049840B3B8F1000F28D02CE0D4F838806B +:1026A0002A4651462046FBF72CFDA16C49B1022D6C +:1026B00002D1B8F1000F10D129462046FBF700FFE8 +:1026C00005E0616A19B104F1240000F0B5FD20B104 +:1026D0003E60BFF34F8FBFF36F8FFFF781FB012089 +:1026E00006B0BDE8F087FFF77BFB22E06846FFF706 +:1026F000CDFC4FF00108FFF773FBFFF7C7FDFFF7B5 +:102700004FFB94F94400401C01D184F8449094F9A3 +:102710004500401C01D184F84590FFF761FB04A9F6 +:10272000684600F0CFFB30B12046FCF771F800F0AE +:10273000C3FD0020D4E7FFF733FBA06BE16B8842B9 +:1027400013D1FFF74DFB04F110000499FFF7ACFC27 +:102750002046FCF75DF800F0AFFD002890D13E6008 +:10276000BFF34F8FBFF36F8F8AE7FFF739FB204628 +:10277000FCF74EF800F0A0FD82E70000717565756A +:10278000652E630004ED00E02DE9F04798461746FA +:102790008946040004D140F2C33129A0FBF758FA5E +:1027A000B9F1000F06D1206C20B14FF4717124A053 +:1027B000FBF74EFAB8F1020F07D1E06B012804D005 +:1027C00040F2C5311EA0FBF743FAFFF7D5FB2020EE +:1027D000EFF3118680F31188BFF34F8FBFF36F8F34 +:1027E000A06BE16B884207D3B8F1020F04D0002040 +:1027F00086F31188BDE8F08794F945504246494672 +:102800002046FBF77EFC681C04D06D1C84F8455004 +:102810000120EDE7A06C012520B141462046FBF7E1 +:102820004FFE06E0606A0028F2D004F1240000F0B8 +:1028300003FD0028ECD0002FEAD03D60E8E700005F +:1028400071756575652E63002DE9F0410E46040033 +:1028500004D14FF48C6123A0FBF7FAF9206C20B16E +:1028600040F264411FA0FBF7F3F9206830B9A0687B +:1028700020B140F269411BA0FBF7EAF9FFF77CFBAE +:102880002020EFF3118580F31188BFF34F8FBFF342 +:102890006F8FA16BE06B88421FD994F94500491CEA +:1028A000A163411C04D0401C84F84500012015E0C0 +:1028B000A06C012720B100212046FBF701FE06E0B5 +:1028C000606A0028F2D004F1240000F0B5FC002872 +:1028D000ECD0002EEAD03760E8E7002085F31188BD +:1028E000BDE8F08171756575652E630010B5040053 +:1028F00004D140F259210BA0FBF7AAF900F080FBAC +:10290000A16888420BD1E068401EE06005D1002339 +:102910001A4619462046FFF781FE012010BD00200F +:1029200010BD000071756575652E630010B504005B +:1029300004D140F6091104A0FBF78AF9A06B08B195 +:10294000002010BD012010BD71756575652E6300F6 +:1029500010B5040004D140F6311105A0FBF778F959 +:10296000A06BE16B884201D1012010BD002010BD99 +:1029700071756575652E63002DE9F743002582B0FA +:102980008946040004D14FF4CD6142A0FBF760F901 +:10299000B9F1000F06D1206C20B140F26C613DA06E +:1029A000FBF756F900F032FB30B9049820B140F241 +:1029B000716138A0FBF74CF9384F4FF000084FF029 +:1029C000805600BFFFF7ECF9A06BB8B1494620462E +:1029D000E568FBF783FBE560606A48B104F1240019 +:1029E00000F02AFC20B13E60BFF34F8FBFF36F8F22 +:1029F000FFF7F6F9012005B0BDE8F083049808B1AF +:102A00001DB106E0FFF7ECF927E06846FFF73EFB53 +:102A10000125FFF7E5F9FFF739FCFFF7C1F994F954 +:102A20004400401C01D184F8448094F94500401CC6 +:102A300001D184F84580FFF7D3F904A9684600F076 +:102A400041FA002820460AD0FBF7E2FE00F034FCF1 +:102A50002046FBF727FD0028B4D00020CBE7FBF78A +:102A600021FD88B104F124000499FFF71DFB2046E5 +:102A7000FBF7CEFE00F020FC0028A3D13E60BFF3A0 +:102A80004F8FBFF36F8F9DE72046FBF7C1FE00F02D +:102A900013FC97E771756575652E630004ED00E022 +:102AA0002DE9F0410E46040004D140F2577115A003 +:102AB000FBF7CEF836B9206C30B14FF4EB6111A0C2 +:102AC000FBF7C6F8206C20B940F259710DA0FBF756 +:102AD000BFF8FFF751FA2020EFF3118580F311883A +:102AE000BFF34F8FBFF36F8FA06B30B131462046DD +:102AF000E768FBF7F3FA0120E76085F31188BDE88A +:102B0000F081000071756575652E63002DE9F7474A +:102B1000002683B08A46040004D14FF4A06143A08C +:102B2000FBF796F8BAF1000F06D1206C20B140F205 +:102B300004513EA0FBF78CF800F068FA30B9059814 +:102B400020B140F2095139A0FBF782F84FF000099B +:102B50004FF08057DFF8DC80FFF722F9A56BC5B195 +:102B600051462046FBF7BAFA6D1EA563206950B1A5 +:102B700004F1100000F060FB28B1C8F80070BFF34A +:102B80004F8FBFF36F8FFFF72BF9012006B0BDE821 +:102B9000F087059808B11EB106E0FFF721F927E09C +:102BA0006846FFF773FA0126FFF71AF9FFF76EFB85 +:102BB000FFF7F6F894F94400401C01D184F84490E2 +:102BC00094F94500401C01D184F84590FFF708F9BD +:102BD00005A9684600F076F9002820460AD0FBF7E0 +:102BE00017FE00F069FB2046FBF75CFC0028B3D021 +:102BF0000020CBE7FBF756FC90B104F124000599C7 +:102C0000FFF752FA2046FBF703FE00F055FB0028C1 +:102C1000A2D1C8F80070BFF34F8FBFF36F8F9BE74F +:102C20002046FBF7F5FD00F047FB95E771756575EC +:102C3000652E630004ED00E02DE9F04790468946DB +:102C4000040004D140F2FB611EA0FBF701F8B9F1CA +:102C5000000F06D1206C20B140F2FC6119A0FAF7F8 +:102C6000F7FFFFF789F92020EFF3118680F3118831 +:102C7000BFF34F8FBFF36F8FA76BF7B194F9445039 +:102C800049462046FBF72AFA7F1EA763681C04D03A +:102C90006D1C84F84450012010E020690028FAD00F +:102CA00004F1100000F0C8FA0028F4D0B8F1000FC9 +:102CB000F1D00121C8F80010EDE7002086F311885B +:102CC000BDE8F08771756575652E630010B5044623 +:102CD000806C884201D1A06B08B1002010BDFFF7C5 +:102CE0005FF80020A064FFF77BF8012010BD08B555 +:102CF000002200920A466946FFF708FF009808BDC7 +:102D000008B500210A4600916946FFF795FF009833 +:102D100008BD00002DE9F343002683B004003546CA +:102D200004D140F2915153A0FAF792FF206C20B1E8 +:102D300040F295514FA0FAF78BFF00F067F930B9D8 +:102D4000049820B140F29A514AA0FAF781FFDFF8C7 +:102D50002C814FF000094FF0805700BFFFF720F89B +:102D6000A06BC8B1401EA063206810B9FBF700FE3D +:102D7000A060206950B104F1100000F05DFA28B1A4 +:102D8000C8F80070BFF34F8FBFF36F8FFFF728F8BD +:102D9000012005B0BDE8F083049808B14EB10CE005 +:102DA00025B140F2E15133A0FAF752FFFFF718F8CE +:102DB0005EE06846FFF76AF90126FFF711F8FFF7B2 +:102DC00065FAFEF7EDFF94F94400401C01D184F848 +:102DD000449094F94500401C01D184F84590FEF7D9 +:102DE000FFFF04A9684600F06DF80028204612D0C5 +:102DF000FBF70EFD00F060FA2046FBF753FB0028BE +:102E0000ACD075B3FEF7CCFF606A58B3206B006896 +:102E1000C0F10F0128E0FBF745FBE0B1206838B9AD +:102E2000FEF7BEFFA06800F0BDF90546FEF7D8FF2B +:102E300004F124000499FFF737F92046FBF7E8FC7A +:102E400000F03AFA002889D1C8F80070BFF34F8F1C +:102E5000BFF36F8F82E72046FBF7DAFC00F02CFA15 +:102E60007CE705E0FFE70021A068FFF759F99DE73F +:102E700000208EE771756575652E630004ED00E036 +:102E800070B50D46040004D14FF424710BA0FAF77D +:102E9000DFFE00F0B5F8A168884204D1E068401C6C +:102EA000E060012070BD29462046FFF733FF00286F +:102EB000F8D0E168491CE16070BD0000717565756E +:102EC000652E63002DE9F0410C46050004D140F663 +:102ED000944115A0FAF7BCFE24B940F6954112A022 +:102EE000FAF7B6FEFEF75CFF114EF2686B682068D9 +:102EF000D11A471C07D02F68366AB74209D09342CF +:102F000007D8012400E00024FEF76AFF2046BDE850 +:102F1000F081884205D9401A20602846FFF7B6F8AC +:102F2000F1E700202060ECE77461736B732E63009F +:102F3000240000202DE9FF5F8346DDE90E879946D6 +:102F400016468A469000FBF79FFC05001CD05420D3 +:102F5000FBF79AFC040014D00020256384F851008C +:102F6000CDE90240CDE900874B46324651465846EE +:102F7000FBF7DAF92046FBF725F8012004B0BDE89D +:102F8000F09F2846FEF742FF4FF0FF30F6E70000C3 +:102F90002DE9F04786B01F46DDE90F540E9E90469E +:102FA0008946824625B940F24D2113A0FAF750FE1A +:102FB00024B940F24E2110A0FAF74AFE54200090A6 +:102FC0000020B4B1ADB10221256384F85110039003 +:102FD00004A90096CDE901143B46424649465046B5 +:102FE000FBF7A2F92046FAF7EDFF049806B0BDE81A +:102FF000F0870490FAE700007461736B732E63002E +:10300000014800687047000024000020054841691D +:1030100019B1006B18B100207047012070470220E1 +:1030200070470000240000200148C068704700007D +:103030002400002010B5FEF79FFF0148C06810BDB6 +:10304000240000202DE9F0412D4C0027206B40B1D9 +:10305000A069401CA061E06900B101273846BDE8C5 +:10306000F081E668761CE66010D1606B006820B1E4 +:1030700040F67F2123A0FAF7EBFD606BA16B616343 +:10308000A063206A401C2062FBF73CFBA06ADFF8CB +:103090007C80864209D3606B006880B1606BC06839 +:1030A000C568686886420DD2A0622068C06A00EBDD +:1030B000800158F821000128CDD90127CBE74FF036 +:1030C000FF30F1E7281DFEF7D3FDA86A18B105F11E +:1030D0001800FEF7CDFDE86A012122698140114305 +:1030E000216100EB800108EB8100291DFEF74BFEFA +:1030F000E86A2168C96A8842CDD30127CBE700007E +:10310000240000207461736B732E6300080A002092 +:1031100070B504004FF000063AD01E4D2868844276 +:1031200004D040F6D1711CA0FAF792FDA06C20B932 +:1031300040F6D27118A0FAF78BFDA06C401EA06477 +:10314000626CE16A914223D010BB201DFEF790FD16 +:10315000134A012150B9E06A00EB800352F8233092 +:1031600023B92B6901FA00F083432B61606CE062A4 +:10317000C0F10F00A061E06A2B6981401943296109 +:1031800000EB800002EB8000211DFEF7FCFD012614 +:10319000304670BD240000207461736B732E630091 +:1031A000080A002070B504004FF0000038D0204D10 +:1031B000E16A2A68D26A914233D2A069002804DB0E +:1031C0002868C06AC0F10F00A0611A4E01EB8101AE +:1031D000606906EB810188421ED1201DFEF748FD83 +:1031E000012150B9E06A00EB800256F8222022B992 +:1031F0002A6901FA00F082432A612868C06AE06205 +:103200002A6981401143296100EB800006EB8000B0 +:10321000211DFEF7B8FD02E02868C06AE0620120C7 +:1032200070BD616C2A68D26A9142F8D370BD00000B +:1032300024000020080A00202DE9F041C068C4687D +:1032400024B940F6294117A0FAF702FD04F118004D +:103250000746FEF70DFD154D286B012660B1394676 +:103260001348FEF790FDE06A2968C96A884217D9B9 +:103270000120EE61BDE8F081201DFEF7F9FCE16A56 +:103280002A6906FA01F01043286101EB810009491F +:1032900001EB8000211DFEF776FDFBF733FAE2E734 +:1032A0000020E7E77461736B732E63002400002035 +:1032B0005C0B0020080A00202DE9F0472B4C00256C +:1032C0002E46206B20B940F6850129A0FAF7C0FCF4 +:1032D000FEF766FD206B401E2063206BE8BBA168F3 +:1032E000254F0120C9B3A7F5AA7980463868E8B10F +:1032F000F868C56805F11800FEF7BAFC281DFEF74E +:10330000B7FCE86A226908FA00F11143216100EB79 +:10331000800109EB8100291DFEF735FDE86A21686F +:10332000C96A8842E2D3C4F81C80DFE70DB1FBF71D +:10333000E9F9A56945B14746FFF784FE00B1E761A9 +:103340006D1EF9D10020A061E06930B10B49012662 +:1033500030070860BFF34F8F00E001E0BFF36F8FCD +:10336000FEF73EFD3046BDE8F08700002400002057 +:103370007461736B732E63005C0B002004ED00E03E +:103380002DE9FC4781461E461746884628200A9D9F +:10339000FBF77AFA04000AD0002084F82400CDE973 +:1033A000005433463A4641464846FBF70FF820465C +:1033B000BDE8FC877CB52826DDE90654009644B1BB +:1033C000022684F82460CDE90054FAF7FFFF204676 +:1033D0007CBD4FF4A57102A0FAF73AFCF7E70000B4 +:1033E00074696D6572732E630000000030B587B09C +:1033F0000024FAF74FFE114D2868B0B10020039069 +:10340000049005AA04A903A8FEF788FCDDE90321BE +:103410000E208DE80700002309A10B48059AFFF74D +:10342000B7FD686008B1012404E040F2131107A061 +:10343000FAF70EFC07B0204630BD00006000002007 +:10344000546D722053766300EDE7010074696D6579 +:1034500072732E63000000002DE9FE4F9946DDF8DF +:1034600030A090460E4607004FF0000404D14FF400 +:10347000C17111A0FAF7ECFB124D286880B1CDE9BB +:1034800000680297062E10DAFFF7C0FD02284FF001 +:10349000000308D0002269462868FFF7BFF80446F9 +:1034A0002046BDE8FE8F5246F5E700234A466946AE +:1034B000FFF76AF9F3E7000074696D6572732E63B4 +:1034C000000000006000002010B5040004D140F2AC +:1034D000D31102A0FAF7BCFB606810BD74696D657A +:1034E00072732E6300000000FDB40000E9B4000018 +:1034F0000100000802040506090E0F1011121A1827 +:1035000001735C0173A00174DE0100E8016A22020C +:10351000002C026A660210700260FFFF00000000CB +:10352000EFBE03000000000000000000EFBE04003A +:103530000000000006000000EFBE000000000000D8 +:1035400001000000EFBE00000000000002000000CB +:10355000EFBE00000000000000000000EFBE000011 +:103560000000000005000000FB349B5F800000802D +:1035700000100000000000006174745F76616C69E7 +:10358000646174655F73656375726974792E206612 +:103590006C61677320307825303478202D20726577 +:1035A0007120656E632073697A652025752C206112 +:1035B0007574686F72697A65642025752C20617551 +:1035C0007468656E746963617465642025752C2068 +:1035D000656E6372797074696F6E5F6B65795F7326 +:1035E000697A6520257500004154545F46494E4470 +:1035F0005F42595F545950455F56414C55455F52A3 +:103600004551554553543A2066726F6D202530342C +:103610005820746F20253034582C20747970652020 +:10362000253034582C2076616C75653A20000000F6 +:103630004154545F524541445F42595F47524F5590 +:10364000505F545950455F524551554553543A20A7 +:1036500066726F6D202530345820746F2025303409 +:10366000582C206275666665722073697A6520251C +:10367000752C20747970653A200000006174745FC5 +:103680007061636B65745F68616E646C65723A202B +:1036900064726F7070696E672061747420706475F5 +:1036A000203078253032782061732073697A652064 +:1036B0002575203E206174745F7265717565737441 +:1036C0005F62756666657220257500006174745FBF +:1036D0007061636B65745F68616E646C65723A20DB +:1036E000736B697070696E672061747420706475A3 +:1036F00020307825303278206173207365727665CA +:1037000072206E6F742069646C6520287374617414 +:103710006520257529000000000000000000100051 +:10372000800000805F9B34FB253032782530327872 +:1037300025303278253032782D25303278253032D8 +:10374000782D25303278253032782D253032782585 +:103750003032782D25303278253032782530327865 +:10376000253032782530327825303278000000005C +:103770005065726970686572616C206D747520693E +:1037800073206E6F7420696E697469616C697A6503 +:10379000640000004741545420636C69656E7420D6 +:1037A00074696D656F75742073746F702C20686117 +:1037B0006E646C6520307825303278007C6900209A +:1037C00051200000224E020052200000D24D020083 +:1037D00053200000C04D020054200000C64D0200DE +:1037E00055200000D14D020056200000CB4D0200B4 +:1037F00057200000DF4D020058200000044E020058 +:1038000059200000DF4D02005A200000ED4D02005B +:103810005B200000DB4D02005C200000D54D020063 +:103820005D200000D64D020001FC0000E24D0200C8 +:103830006863692E633A2061636C5F68616E646CD3 +:1038400065722063616C6C656420776974682041DF +:10385000434C207061636B6574206F662077726FD4 +:103860006E672073697A652025752C2065787065F0 +:1038700063746564202575203D3E2064726F70700E +:10388000696E67207061636B6574000041434C2072 +:10389000436F6E7420467261676D656E7420746F3D +:1038A000206C617267653A20636F6D62696E656452 +:1038B000207061636B6574202575203E20627566FB +:1038C0006665722073697A6520257520666F72209F +:1038D00068616E646C6520307825303278000000B5 +:1038E00041434C20466972737420467261676D656E +:1038F0006E7420627574206461746120696E206248 +:10390000756666657220666F722068616E646C65AC +:10391000203078253032782C2064726F7070696E98 +:1039200067207374616C6520667261676D656E7483 +:103930007300000041434C20466972737420467244 +:1039400061676D656E7420746F206C617267653A93 +:1039500020667261676D656E74202575203E206259 +:1039600075666665722073697A6520257520666FB5 +:10397000722068616E646C65203078253032780082 +:103980004254535441434B5F4556454E545F504F4C +:103990005745524F4E5F4641494C45440000000098 +:1039A0006863692E633A206576656E745F68616E40 +:1039B000646C65722063616C6C65642077697468FF +:1039C000206576656E74207061636B6574206F6628 +:1039D0002077726F6E672073697A652025752C20B9 +:1039E0006578706563746564202575203D3E2064AC +:1039F000726F7070696E67207061636B6574000030 +:103A00004843495F4556454E545F524541445F52D5 +:103A1000454D4F54455F535550504F525445445FA8 +:103A200046454154555245535F434F4D504C4554C4 +:103A3000452C20626F6E64696E6720666C616773E7 +:103A40002025782C206553434F2025750000000069 +:103A500006040000DF4D020011040000EF4D0200DB +:103A600013040000DF4D02001B040000EF4D0200B4 +:103A70001D040000EF4D0200030C000000000000D8 +:103A80007C0C0000F14D020005140000EF4D020017 +:103A900005200000F54D0200072000000000000096 +:103AA0000E200000000000001020000000000000B8 +:103AB00011200000F44D020012200000F44D02001D +:103AC00013200000F74D020014200000FF4D0200FB +:103AD00015200000EF4D020016200000EF4D0200FF +:103AE00017200000024E0200182000000000000015 +:103AF00019200000054E02001A2000000B4E0200A3 +:103B00001B200000EF4D020020200000F74D0200B6 +:103B1000222000000E4E020030200000F24D020074 +:103B200031200000C74D020032200000124E02007A +:103B300035200000F44D020036200000184E02002F +:103B400037200000284E020038200000284E0200D6 +:103B500039200000D24D02003C200000E04D020060 +:103B60003D200000E04D02003E2000002E4E0200ED +:103B70003F200000294E020040200000D24D0200EC +:103B800041200000C74D020042200000334E0200D9 +:103B900043200000384E0200442000003E4E020048 +:103BA000452000000000000046200000EF4D02000C +:103BB000472000003A4E0200482000003A4E020022 +:103BC00049200000000000004A2000000000000022 +:103BD000FF000000000000000000000000000000E6 +:103BE0004C324341505F4556454E545F4348414E29 +:103BF0004E454C5F4F50454E45442073746174757B +:103C000073203078257820616464722025732068E1 +:103C1000616E646C6520307825782070736D20307B +:103C2000782578206C6F63616C5F636964203078FD +:103C300025782072656D6F74655F636964203078E4 +:103C40002578206C6F63616C5F6D74752025752C11 +:103C50002072656D6F74655F6D74752025752C20FD +:103C6000666C7573685F74696D656F757420257512 +:103C7000000000006C326361705F73746F705F727C +:103C8000747820666F72206C6F63616C2063696466 +:103C900020307825303278004C324341505F455611 +:103CA000454E545F494E434F4D494E475F434F4E3B +:103CB0004E454354494F4E20616464722025732061 +:103CC00068616E646C6520307825782070736D2093 +:103CD00030782578206C6F63616C5F636964203095 +:103CE0007825782072656D6F74655F636964203034 +:103CF000782578006C32636170207265636569763F +:103D000065642072656D6F746520737570706F7275 +:103D10007465642066656174757265732C207365C3 +:103D2000635F6C6576656C5F305F616C6C6F776547 +:103D30006420666F722070736D202575203D2025EC +:103D4000750000000000000000000000FFFFFFFF02 +:103D5000000000000B01000002000200000200024F +:103D60000101030001000000000001010200010048 +:103D7000252D36732030782530347800736D3A2045 +:103D8000636F6E6E656374696F6E2030782578207E +:103D900072656C656173656420736574757020630A +:103DA0006F6E746578740000736D5F6B65795F6426 +:103DB0006973747269627574696F6E5F616C6C5F50 +:103DC00072656365697665643A20726563656976D4 +:103DD0006564203078253032782C206578706563F2 +:103DE00074696E6720307825303278006761705FC3 +:103DF00072616E646F6D5F616464726573735F742A +:103E000072696767657200000000000091B50000EC +:103E10008DB5000081B5000000000000A5D00000B5 +:103E20005BD000002DB500004D190200000000001D +:103E3000000000002000800000C00000000004001E +:103E400000002822000000000000000000F7FFFF33 +:103E50007F00000000F001F8FFFFFF0300000000FA +:103E60000000000000000000000000000000000052 +:103E7000000000003FF9FF0700000000FFFFFFFF08 +:103E8000FF01000000000000E84702004404002099 +:103E900003000100F401FA00960064004B003200B8 +:103EA0001E001400000000000000000000000000E0 +:103EB00000000000626C6535305F6C6C645F6563A8 +:103EC00070742E63000048082804904200200020EF +:103ED000004000400040000000000000A448020034 +:103EE0005E0400200100010006040304000001003C +:103EF0007D9D00001D040202010001007D9D000067 +:103F0000010C08080000030059D40100030C000054 +:103F100002000300000000002D0C03040200010059 +:103F20007D9D0000310C01010300030059D4010004 +:103F3000330C070804000300DD9F0000350CFD2250 +:103F400005000300ED9F0000630C0808010003005A +:103F500059D401007B0C02020400010059D4010075 +:103F60007C0C04040500010059D40100011000007C +:103F7000060003000000000002100000070003001C +:103F80000000000003100000080003000000000013 +:103F900005100000090003000000000009100000E7 +:103FA0000A000300000000000514020203000100E3 +:103FB0007D9D0000012008080B00030059D401007A +:103FC000022000000C00030000000000032000009D +:103FD0000D00030000000000052006060E0003008F +:103FE00059D4010006200F100000000059D4010030 +:103FF000072000000F000300000000000820202020 +:104000000100000059D40100092020200200000016 +:1040100059D401000A2001010300000059D4010015 +:104020000B2007071700030059D401000C200202DF +:104030001800030059D401000D20191904000000D4 +:1040400059D401000E20000005000000000000000F +:104050000F200000100003000000000010200000EE +:104060000600000000000000112007070700000004 +:1040700059D40100122007070800000059D401009C +:1040800013200E0E060001007D9D00001420050582 +:104090000900000059D401001520020207000100A8 +:1040A0007D9D000016200202080001007D9D000099 +:1040B000172020201100030059D40100182000000F +:1040C000120003000000000019201C1C0900010060 +:1040D0007D9D00001A2012120A0001007D9D000043 +:1040E0001B2002020B0001007D9D00001C2000002F +:1040F00013000300000000001D20010F0B00000052 +:10410000E59D00001E20030F0C000000FB9D000039 +:104110001F2000000A0000000000000020200E0EFA +:104120000D0001007D9D0000212003040E00010010 +:104130007D9D0000222006060C0001007D9D0000F0 +:1041400023200000150003000000000024200404C8 +:104150001600030059D401002F20000014000300B2 +:104160000000000030200202100001007D9D0000D0 +:10417000312003031A00030059D40100322007073D +:10418000110001007D9D00003320030F0B00000093 +:10419000CD9D00003420040F0C000000D99D0000CC +:1041A000352007070D000000719D00003620191909 +:1041B0000E000000719D00003720FFFF0F0000007F +:1041C000719D00003820FFFF10000000719D00006D +:1041D000392022221100000059D401003A200000A9 +:1041E0001B000300000000003B2000001C00030037 +:1041F000000000003C20010112000000719D000041 +:104200003D20000013000000000000003E200707D2 +:1042100014000000719D00003F20FFFF150000000A +:10422000719D0000402002021600000059D40100D8 +:1042300041200E0E2400030081A500004220060646 +:104240002500030059D4010043203C3C1700000026 +:10425000779E000044200E0E2600030059D4010072 +:104260004520000027000300000000004620020255 +:1042700001000400F19D0000472008081E00030013 +:1042800059D40100482008081F00030059D4010038 +:104290004920000020000300000000004A20000028 +:1042A00021000300000000004B2000001D0003005F +:1042B000000000004C20000022000300000000006D +:1042C0004D2004042300030059D401004F200F0F98 +:1042D0000B00000059D4010050200F0F0C0000000B +:1042E00059D4010051200D0D18000000719D0000EF +:1042F0005220020219000000719D000053200E0E92 +:1043000002000400F19D000054200D0D1200010078 +:104310007D9D000055200C0C130001007D9D0000C8 +:1043200056200707140001007D9D0000572003035D +:10433000150001007D9D00005820000028000300AA +:10434000000000005920030303000400F19D000059 +:104350005A200606160001007D9D00005B20050521 +:10436000170001007D9D00005C2008081800010076 +:104370007D9D00005D2006062900030059D4010040 +:104380005F2001012A00030059D4010001FC1E1E18 +:104390001900030059D40100FB010000DD9B00005F +:1043A000FE01000015A00000FB010620DD9B0000BF +:1043B000FB010820DD9B0000FB010920DD9B0000C4 +:1043C000FB010A20DD9B0000FB010E20DD9B0000AD +:1043D000FB011020DD9B0000FB011120DD9B000094 +:1043E000FB011220DD9B0000FB011420DD9B00007F +:1043F000FB031F2073A20000FB023620DD9B0000A0 +:10440000FE000000A9A10000FA000D20859C00001C +:10441000FE00000037A10000FE00000091A0000097 +:10442000FE000000D5A10000FE000000A3A10000D6 +:10443000FE00000023A20000FB010000DD9B000045 +:10444000FB01010CDD9B0000FB01310CDD9B00003A +:10445000FB01330CDD9B0000FB01350CDD9B0000F4 +:10446000FB09011091A30000FB410210DD9B00003D +:10447000FB090310DD9B0000FB0805107DA3000075 +:10448000FB070910DD9B0000FB033A20DD9B0000C9 +:10449000FB023B20DD9B0000FB034B20DD9B00006B +:1044A000FB024A20DD9B0000FB054C20DD9B000049 +:1044B000FE00000029A20000FE000000DBA10000B9 +:1044C000FE000000FDA10000FB055820DD9B000060 +:1044D000FB010120DD9B0000FB0402202FA2000055 +:1044E000FB090320DD9B0000FB010520DD9B000094 +:1044F000FB020720DD9B0000FB020F20DD9B00007C +:10450000FB111720DD9B0000FB0F01FCDD9B000071 +:10451000FB091820DD9B0000FB091C20DD9B00002F +:10452000FB092F20DD9B0000FB052320DD9B000005 +:10453000FB012420DD9B0000FA000604859C00009E +:10454000FA001D04859C0000FB042D0CD1A3000083 +:10455000FB040514C3A30000FE0000005B9D0000E7 +:10456000FE001D04A5A30000FE00000001A3000042 +:10457000FE0100002D9D0000FE041920459E000054 +:10458000FE0019205B9E0000FB0000001FA1000040 +:10459000FB057B0CDD9B0000FA001320859C0000CE +:1045A000FB0815203FA20000FA001620859C0000A1 +:1045B000FA001920859C0000FE00132043A1000092 +:1045C000FE0C162067A20000FE0D00006BA100008B +:1045D000FE0000001DA20000FB0B22204FA10000E6 +:1045E000FB010000F9A60000FB053020DD9B000068 +:1045F000FE000000F1A10000FE000000BFA10000CD +:10460000FE000000CFA10000FE000000F7A10000A6 +:104610000000000000000000FB000000259F0000DB +:10462000FB0000007D9F0000FB0000004D9F00008C +:10463000FE00000003A20000FE00000009A200002E +:10464000FE000000AFA10000504C0200704C0200C0 +:104650005F040020040008000F000300BD320100C9 +:104660000B000300313401000C000300153301007E +:104670000D0003003D3301000E000300593401001A +:10468000100003000D340100110003004D2B010048 +:10469000120003009132010013000300DD3301001A +:1046A000140003006D33010015000300A93301005D +:1046B00016000300453501000A0003004D3B0100D0 +:1046C000060003000D3C010007000300A93B0100A8 +:1046D000030003006142010008000300D93B010010 +:1046E00000000300A542010001000300D9420100BF +:1046F00002000300212F010004000300F527010040 +:10470000050003002128010009000300813B01008E +:10471000170003000935010018000300B934010037 +:10472000240003008931010025000300C930010085 +:10473000190003004D2B01001B000300952D010003 +:104740001C000300E12D01001A00030049300100A4 +:1047500020000300E92B010021000300292E0100A5 +:104760001D000300B12E010022000300712E010084 +:104770001E000300792B01001F0003003D2F0100E4 +:10478000230003004132010026000300752C0100C4 +:10479000270003002D2D010028000300F52E010045 +:1047A00029000300A53001002A000300312C01007C +:1047B0004C000300AD2F01004D0003000930010043 +:1047C0004E0003001D3201004F000300252C0100A4 +:1047D00000000200853601000100020015370100CB +:1047E000020002007135010058460200320000004C +:1047F000904D0200B84D02000C7B0020050009001E +:104800000C0002040600000000000000000400008C +:104810001000000000000000000000000000000088 +:10482000000000000000000000000000080004007C +:10483000C5C2010001000400D1C101000200040052 +:1048400025C2010003000400A5C20100000002000F +:104850005DC301000100020061C30100020002000B +:10486000E1C20100000000000000000000000000A4 +:104870000000000000000000000000002C480200C2 +:1048800007000000644802007C4802005604002033 +:1048900003000800FFFF0000D9A40000010005008C +:1048A00039A300009448020002000000E1E2000089 +:1048B0003C0001000C0C0000E1E200003D000100A2 +:1048C00008080000E1E200003E00010002020000D2 +:1048D000E1E200003F00010017170000E1E20000E4 +:1048E000400001000D0D0000E1E200004100010068 +:1048F00001010000E1E200004200010001010000AE +:10490000E1E200004300010002020000E1E20000D9 +:104910004400010009090000E1E200004500010037 +:1049200009090000E1E20000460001000101000069 +:10493000E1E200004700010001010000E1E20000A7 +:104940004800010006060000E1E200004900010005 +:1049500002020000E1E200004A0001000909000033 +:10496000E1E200004B00010018180000E1E2000045 +:104970004C00010018180000E1E200004D000100A9 +:1049800003030000E1E200004E000100010100000D +:10499000E1E200004F00010001010000E1E200003F +:1049A0005000010009090000E1E20000510001008F +:1049B00009090000E1E200005200010003030000C9 +:1049C000E1E200005300010003030000E1E2000007 +:1049D0005400010005050000E1E20000550001005F +:1049E00003030000E1E200005600010002020000A3 +:1049F000E1E200005700010001010000E1E20000D7 +:104A00005800010023230000E1E2000059000100EA +:104A100002020000E1E200005A0001000202000070 +:104A20000000020045000100010002007D000100BD +:104A30000200020041FE000000000100BDE700008E +:104A4000010001005107010002000100C10801003E +:104A50000400010021EC000005000100850E0100AA +:104A6000030001006108010006000100DDEE000006 +:104A700007000100ADF800000800010005F9000082 +:104A800009000100D5FA00000A000100D5F7000076 +:104A90000B0001007DF700000C00010041FA00004E +:104AA0000D000100A9F900000E00010061F90000ED +:104AB0000F000100A9E600001000010095F40000BD +:104AC00011000100F5F5000012000100E1F4000002 +:104AD0001300010081F5000014000100DDF000006A +:104AE0001500010071F10000160001002DF3000017 +:104AF00017000100D9F100001800010029F700009B +:104B000037000100D5E3000000000200450001006D +:104B1000010002007D0001000200020041FE0000D1 +:104B2000380001000DD70000390001004DD700000A +:104B30003A00010085FB00003B000100B9180100AC +:104B40002D000100F10A01003C000100AD4501000B +:104B50003D000100494501003F00010049470100B7 +:104B600040000100C547010041000100555301000C +:104B700042000100BD530100430001004D540100FB +:104B8000440001000D480100450001006548010096 +:104B900046000100E55001004700010059510100A5 +:104BA0004800010041550100490001000552010083 +:104BB0004A000100CD5201004B0001004D4E0100A2 +:104BC0004C000100854F01004D0001009151010092 +:104BD0004E000100415001004F000100A5500100AE +:104BE0005000010045460100510001002947010025 +:104BF00052000100354C010053000100054D010039 +:104C000054000100A94D010055000100454A010072 +:104C1000560001006D49010057000100094A0100DA +:104C200058000100914A010059000100B9480100F3 +:104C30005A000100214901004400030019F000005E +:104C400031000000010F010032000000B9800100B6 +:104C5000204A0200030000000000000000000000E5 +:104C60000000000000000000000000000000000044 +:104C7000384A020043000000051314151A293B00AE +:104C8000000002007999010001000200AD990100C5 +:104C9000020002006196010000000000F193010093 +:104CA00001000000E5920100030000007193010083 +:104CB00002000000CD9401000D0000005D8801009D +:104CC0000E000000DD8C01000F000000058A0100CD +:104CD00010000000398F0100110000007D8B0100E1 +:104CE000120000000D880100130000006986010019 +:104CF00014000000A1910100150000003590010092 +:104D000016000000FD90010004000000C5850100B0 +:104D100005000000A1850100090000004D9401007C +:104D2000170000007D870100330000005D85010051 +:104D300006000000618501000700000019850100E0 +:104D400008000000A59201000A0000008195010002 +:104D50000B000000C18601000C0000001F8701004D +:104D60001800000069890100190000002589010070 +:104D70002F0000003D94010000000200799901001D +:104D800001000200AD9901000200020061960100DD +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000804C02000300000032 +:104DB0000000000000000000984C02001F000000EE +:104DC00048313131310048313131004831323131EF +:104DD0000048313100483132323100483231004828 +:104DE00031003131323234343434343400483248D2 +:104DF000004832003142004832323232323200341E +:104E0000310050500048343432500048500048328D +:104E100032004831313132003132333331313142B5 +:104E200031313131313131003131313141003132C3 +:104E300032320031313232003131314231003131E0 +:104E40003142323231003232324400006C4E0200C4 +:104E50000000002074040000AE490000CC4E0200A7 +:104E600074040020A47A0000664F000001781AAA9A +:104E70000101801AFF0132016904416908091734F0 +:104E800011124014484E021A0F0414FA4D021A4728 +:104E9000085A461029045A49045AF21C2924290C9C +:104EA0005AF90429241945011D13E473025C2002F8 +:104EB000FF0501FF011B1201E3CC302A4C1013FF48 +:0C4EC000A003122003E3201C02277F0047 +:020000040008F2 +:107FEC000000000000000000000000000000000085 +:047FFC000040000041 +:00000001FF diff --git a/bundles/typical/ING9188xx/platform_entry_lock.hex b/bundles/typical/ING9188xx/platform_entry_lock.hex new file mode 100644 index 000000000..d6c3077b9 --- /dev/null +++ b/bundles/typical/ING9188xx/platform_entry_lock.hex @@ -0,0 +1,8436 @@ +:020000040000FA +:10400000187F00205D4200007B420000CD40000090 +:104010007F42000081420000834200000000000057 +:10402000000000000000000000000000E940000067 +:1040300087420000000000002D410000C14E00003A +:1040400039D801006DD8010009DA01008D42000065 +:1040500015DA010021DA01002DDA01008D4200009D +:104060008D42000039DA01008D4200008D420000CF +:104070008D4200008D42000045DA010051DA010056 +:104080005DDA010069DA010075DA010081DA010008 +:104090008D4200008D4200008D4200008D420000E4 +:1040A0008D4200008D42000095DA01008D42000033 +:1040B0008D42000000600200DFF80CD000F0F4FB3D +:1040C00000480047C1CC0100187F00201EF0040FFB +:1040D0000CBFEFF30880EFF3098081694EF2E11223 +:1040E000C0F2010210470000224B19680868B0E8CE +:1040F000F00F80F30988BFF36F8F4FF0000080F35B +:1041000011884EF00D0E7047000000000648006850 +:10411000006880F3088862B661B6BFF34F8FBFF3C3 +:104120006F8F00DF00BF00BF08ED00E0EFF30980F4 +:10413000BFF36F8F0F4B1A6820E9F00F106008B5BE +:104140004FF0200080F31188BFF34F8FBFF36F8FC4 +:104150001EF0A4F84FF0000080F31188BDE808407D +:1041600019680868B0E8F00F80F30988BFF36F8F13 +:10417000704700BF24000020EFF305807047000067 +:104180002DE9FF5FEFF31080EFF31181EFF312825F +:10419000EFF313830FB447F6BC00C2F200001A49D4 +:1041A0000160EFF30881EFF30982EFF31483EFF37B +:1041B000038441608260C36004611448016841F077 +:1041C00001010160BFF34F8F30BFBFF36F8F104805 +:1041D00041688268C368046981F3088882F30988AA +:1041E00083F3148884F30388BFF34F8FBFF36F8F7B +:1041F0000FBC80F3108881F3118882F3128883F357 +:104200001388BDE8FF5F7047CB41000004030940FD +:10421000BC78002040BA704740BA704740BA704737 +:1042200040BA704740BA704740BA704740BA7047CA +:1042300040BA704740BA7047C0BA7047C0BA7047BA +:10424000C0BA7047C0BA7047C0BA7047C0BA7047AA +:10425000C0BA7047C0BA7047C0BA70470C4801680E +:1042600011F0010F07D04FF0010221EA02010160B5 +:1042700008480068004708480047FEE7FEE7FEE7F9 +:10428000FEE7FEE7FEE7FEE7FEE7FEE7FEE70000EB +:1042900064010440BC780020B94000002DE9F0031F +:1042A0005FEA930C67D000BF30F9024B31F9026B23 +:1042B00030F9025B31F9027B04FB06F805FB07F9D4 +:1042C0004FEA6848A8EB69487C4322F8028B6414E3 +:1042D000754304EB654422F8024B30F9024B31F987 +:1042E000026B30F9025B31F9027B04FB06F805FB37 +:1042F00007F94FEA6848A8EB69487C4322F8028B2B +:104300006414754304EB654422F8024B30F9024B08 +:1043100031F9026B30F9025B31F9027B04FB06F8DC +:1043200005FB07F94FEA6848A8EB69487C4322F887 +:10433000028B6414754304EB654422F8024B30F998 +:10434000024B31F9026B30F9025B31F9027B04FB5D +:1043500006F805FB07F94FEA68487C43A8EB694873 +:104360006414754322F8028B04EB654422F8024B77 +:10437000BCF1010C98D113F0030304BFBDE8F003B6 +:10438000704700BF30F9024B31F902CB30F9025BC4 +:1043900031F9026B04FB0CF77F1405FB06F874433C +:1043A000A7EB6847641422F8027B05FB0CFC04EBC6 +:1043B0006C4C22F802CB5B1EE4D1BDE8F0037047E1 +:1043C0002DE9F05F0546002092469B46884606464A +:1043D000814640241BE0284641464746224600F0DD +:1043E0009EF853465A46C01A914110D311461846BA +:1043F000224600F085F82D1A67EB01084F46224649 +:104400000120002100F07CF817EB00094E41201E2E +:10441000A4F10104DFDC484631462A464346BDE8A4 +:10442000F09F00000649074A0868504343F23902EA +:104430001044086040087047014908607047000058 +:104440006C0400206D4EC64110B5431A934209D248 +:104450008318881803E010F8011D03F8011D521E8F +:10446000F9D210BD40EA01039B0703D009E008C957 +:10447000121F08C0042AFAD203E011F8013B00F829 +:10448000013B521EF9D210BDD2B201E000F8012B5F +:10449000491EFBD270470022F6E710B513460A46C4 +:1044A00004461946FFF7F0FF204610BD421C10F8E5 +:1044B000011B0029FBD1801A704730B5044600204B +:1044C000034600E05B1C934203D2E05CCD5C401BE2 +:1044D000F8D030BD30B50B46014600202022012423 +:1044E00009E021FA02F59D4205D303FA02F5491BC2 +:1044F00004FA02F52844151EA2F10102F1DC30BDD8 +:10450000202A04DB203A00FA02F100207047914093 +:10451000C2F1200320FA03F3194390407047202A88 +:1045200004DB203A21FA02F00021704721FA02F35D +:10453000D040C2F1200291400843194670472DE94E +:10454000FE4F804681EA0300C00F0C46009021F028 +:10455000004123F00045B8EB0200A94105D24046D6 +:10456000214690461C460B46024623F0004010436D +:1045700004D14046214603B0BDE8F08F270DC7F3B4 +:104580000A00C3F30A510290401A0190402866DAEB +:10459000C3F3130040F4801B0098924620B100231F +:1045A000D2EB030A63EB0B0B01985946C0F14002B2 +:1045B0005046FFF7A5FF06460D4650465946019A5C +:1045C00000F084F910EB08006141002487EA1152E1 +:1045D00084EAE7731A433BD0009A3AB3019A012A5E +:1045E0004FEA075210DC001B61EB02014FF0004262 +:1045F00002EA0752CDE90042001C41F58011324623 +:104600002B4600F082F9B6E7001B61EB0201001CAB +:1046100041F5801300185B412018A2F5001747EB05 +:10462000030140EAD570B6196D4111E06D084FEAFB +:10463000360645EAC0754FEA0752001B61EB0201DE +:10464000001C41F5801149084FEA30000019514122 +:1046500032462B4603B0BDE8F04F00F049B9009850 +:10466000012240000023D0EB020263EBE0730098CC +:1046700021464FEAE074B8EB000061EB0401E9E782 +:1046800083F000435BE781F0004158E72DE9FE4FDE +:1046900081EA030404F0004421F0004100944FF04B +:1046A000000B23F0004350EA010402D052EA030455 +:1046B00004D10020014603B0BDE8F08FC3F30A54D3 +:1046C000C1F30A552C44A4F2F3340194A0FB025424 +:1046D000C1F3130141F48011C3F3130343F48013B6 +:1046E00001FB024400FB034E840A970A44EA81540A +:1046F00047EA8357A4FB076802958D0A05FB0785E7 +:104700004FEA932C04FB0C542705029D4FEA0658F0 +:1047100047EA1637B5EB08056EEB070C870E920ECD +:1047200047EA811742EA8312A7FB0201B6EB0B01AD +:1047300064EB00042B0D43EA0C335E1844EB1C5071 +:10474000DA465146E7FB0201C5F313044FEA0B3387 +:1047500043EA14534FEA0432019C43EA0603A4F1EE +:104760000C040294009CCDE900B400F0CEF8A2E75E +:104770002DE9F04D81EA030404F0004B21F00045DF +:1047800014464FF0000A23F0004150EA050220D001 +:1047900054EA01021DD0C5F30A570246C5F31303BC +:1047A000C1F31300C1F30A5640F4801543F480139B +:1047B000A7EB0608101BD64608F2FD3873EB050080 +:1047C00002D308F1010801E092185B41B8F1000F33 +:1047D00003DA00200146BDE8F08D00204FF480117F +:1047E000064684460EE0171B73EB050705D3121B24 +:1047F00063EB050306434CEA010C49084FEA30001D +:1048000092185B4150EA0107EDD152EA030012D041 +:1048100082EA040083EA0501084303D100224FF035 +:10482000004308E0101BAB4102D20122002302E04A +:104830006FF0010253101AEB06004CEB085110EB1D +:104840000A0041EB0B01BDE8F04D00F051B8C1F397 +:104850000A52C1F3130140F2FF3341F480119A422E +:1048600002DA00200146704740F233439A42A2F236 +:10487000334202DC5242FFF752BEFFF741BE000056 +:1048800030B5002904DB4FF00044404264EB0101E5 +:10489000002B04DB4FF00044524264EB03039942C7 +:1048A00008BF904230BD0000064C074D06E0E068AE +:1048B00040F0010394E8070098471034AC42F6D367 +:1048C000FFF7FEFB4C4E02006C4E0200202A06DB76 +:1048D000CB17203A41FA02F043EAE07306E041FACE +:1048E00002F3D040C2F120029140084319467047BC +:1048F00010B5002B08DA401C41F1000192185B4111 +:104900001A4301D120F0010010BD2DE9F04D92466F +:104910009B4611B1B1FA81F202E0B0FA80F2203286 +:104920009046FFF7EDFD04460F4640EA0A0041EAD3 +:104930000B0153465A46084303D120463946BDE889 +:10494000F08D114653EA010015D0C8F140025046DF +:10495000FFF7E5FD05460E46504659464246FFF72D +:10496000CFFD084301D0012000E00020054346EAC6 +:10497000E0762C4337430A984FEA4453A0EB0800F3 +:104980004FEAD4240A304FF0000244EA47544FEA79 +:10499000D72502D500200146D1E70105101969414C +:1049A000DDE9084500196941BDE8F04DA0E770B5A3 +:1049B00001EB020410F8015B15F0070301D110F8B8 +:1049C000013B2A1106D110F8012B03E010F8016B0E +:1049D00001F8016B5B1EF9D12B0705D40023521E91 +:1049E0000FD401F8013BFAE710F8013B02F1020293 +:1049F000A1EB030303E013F8015B01F8015B521E16 +:104A0000F9D5A142D6D3002070BD000070B50B4986 +:104A1000D1E9000105F0FCFD002001F099FE4FF006 +:104A2000FF34074D02E000BF01F0B0FE21462868C8 +:104A30001EF070F90028F7D170BD0000E8340200C4 +:104A4000040000200348006810F0FF0F01D11DF0A2 +:104A5000A7B9704704ED00E00348006810F0FF0FAD +:104A600001D11DF0BDB9704704ED00E010B50C4652 +:104A7000091D8AB2FB2A00D9FB22014644F2902389 +:104A8000024806F0C5F8E0B210BD0000103B02007D +:104A900010B5C368D9B280290FD98468E06800B125 +:104AA00001204F2213A100F09FFFE16819B1206996 +:104AB000BDE81040084772B6FEE70446008A616907 +:104AC00082B2D8B2124B1B68984706F0B9F9002899 +:104AD0000FD1E068022806D004280AD1A069BDE8F9 +:104AE000104006F0A7B9A08BA169BDE8104006F000 +:104AF0009FB910BD4863695F696E7465726E616CC1 +:104B00005F7472616E73706F72742E6300000000C8 +:104B1000F00100201FB5416899B1052911D00A297B +:104B20000ED10A4C1ECC8DE81E00C168019141696E +:104B30000291008AADF80C001021684605F0C4FF10 +:104B40001FBD04B0BDE81040FFF7A2BFD03B02007C +:104B50002DE9FE4F044606F09DF908B1002000E063 +:104B60000220494E00278346B8464FF00109A6F1BE +:104B7000EC0A7CBB5920BDE8FE8FE38F03B351B331 +:104B8000431AA08E834200DC184685B202EBC200B5 +:104B900000EB02120AEB82000144208E7080B4F810 +:104BA0004A0040B3358004208DE82300284482B2B7 +:104BB0005946608D334606F063FB47B2D7BB25E00C +:104BC00032496FF0050081F8018081F8009081F88A +:104BD0000380D0E724E0FFE7A18E8B1E984201DD21 +:104BE000891E00E001468DB202EBC20000EB02110B +:104BF0000AEB8101D1E7A81C308094F8430004EB54 +:104C00004000B0F84600B0800620CDE7B4F84A0076 +:104C100001222844A4F84A001146204600F054F826 +:104C200094F84320B4F84A1004EB4200B0F8460070 +:104C30008142A2D394F84300B4F84A1004EB400038 +:104C4000B0F8462091421CD14334A4F80780A0F864 +:104C50004680207800EBC00101EB00110AEB8100D7 +:104C60006421FFF718FC21786078433C814204D12D +:104C7000FF2043346070207003E029EA010084F8CB +:104C80004300384677E70000606F002010010020E5 +:104C900010B590F820200B2A11D090F8451001296A +:104CA00001D0002010BD0749002301244B700C7077 +:104CB000CB700A2A03D1C08D002106F0CFFF01205E +:104CC00010BD00001001002000290ED022B1C28FBB +:104CD0008A420BD3511A0AE0B0F840208A4201D32D +:104CE000511A00E00021A0F8401070470021C18750 +:104CF000704730B500290FD000234FF6FF7462B122 +:104D0000C28F1144B1FBF4F504FB1514944213D87F +:104D1000C387012180F8451030BDB0F84020114410 +:104D2000B1FBF4F504FB1514944202D8A0F840300E +:104D300030BDA0F8401030BDC18730BD2DE9F04135 +:104D40001E4613460D4602284AD1B5F84000254CB0 +:104D50004FF00108002730B322462178224892F90B +:104D60000120012910442DD032461946FFF76CFB73 +:104D7000607830446070B5F84000401EA5F84000EF +:104D800094F90100E178884227D183B26E68E98DF9 +:104D9000154A0B20B047677084F80080E7702846FA +:104DA000FFF776FF0BE0677084F80080E77095F8F6 +:104DB00020000A2803D1E88D002106F04FFF0120D2 +:104DC000BDE8F0811978E1702770B21E991CFFF7D9 +:104DD0003BFB60783044801ECCE72846FFF758FF45 +:104DE0000020EDE7100100205B70002000F01F02A2 +:104DF0000121914040094FF0E02202EB8000C0F811 +:104E00008012704700F01F020121914040094FF0CD +:104E1000E02202EB8000C0F88011704700F01F0212 +:104E20000121914040094FF0E02202EB8000C0F8E0 +:104E30000011704700F01F020121914040094FF01E +:104E4000E02202EB8000C0F8001170474907090E0C +:104E5000002803DA00F00F00024A00E0024A815401 +:104E60007047000014ED00E000E400E0024A114049 +:104E7000014302480160704780FFFF1F08ED00E01A +:104E800000B589B019F080FD816803910021CDE95A +:104E9000011004480B464A1E694600681DF0BEFB1F +:104EA00009B000BD080000200148006870470000FC +:104EB0006801044001490872704700007401002035 +:104EC00010B5202080F31188BFF34F8FBFF36F8F91 +:104ED0001EF0B8F818B104494FF080500860002067 +:104EE00080F3118810BD000004ED00E00FB4054B05 +:104EF00010B503A9044A029800F0EAF810BC5DF866 +:104F000014FB000099760000700400200FB4084BD9 +:104F100010B504A902AA039800F0DAF8044602A921 +:104F2000002000F078FC204610BC5DF814FB000067 +:104F300017580000014B024A00F0CAB899760000E9 +:104F40007004002070477047704770477047704783 +:104F500070477047704702E008C8121F08C1002A56 +:104F6000FAD170477047002001E001C1121F002AEA +:104F7000FBD170472DE9FF5FDDE90220010DDDF86F +:104F800038B0024310D10F9801244CA2012808D058 +:104F9000002100980F9BC0E90021C0E90243BDE851 +:104FA000FF9F6FEA0B01F4E7A1F2FF3144F61050C6 +:104FB00041430D140F9801280ED0A5EB0B00401CA7 +:104FC0004FF000043E4EDFF8FC90B0F1000AA0461E +:104FD00005DACAF1000717E0CBF10000F0E7074659 +:104FE00012E0F80707D02246334640464946FFF70D +:104FF0004DFB804689462246334610461946FFF748 +:1050000045FB04460E467F10002FEAD1DDE9020180 +:10501000BAF1000F42464B4602DAFFF737FB01E0D8 +:10502000FFF7A6FB04460E460022274BFFF728FC9D +:1050300003D84FF0FF30014607E00022234B204603 +:105040003146FFF77CFAFFF702FC102409E0002C40 +:105050000ADB0A220023FFF7B3F9019B30321A550D +:10506000641E50EA0102F2D1641C019AC4F11103DA +:1050700014440F9A012A09D00122084301D15B454B +:105080000FDD4FF0000205F101050DE0084303D1EB +:10509000A3EB0B056D1E09E000204FF0110B0F90E4 +:1050A00088E701DA00226D1E002A83D000980F994C +:1050B000C0E90231C0E9004571E70000300000009E +:1050C000000024400000F03F0000F0430000E03FFB +:1050D0002DE9FF4F95B09B4689460646002512E212 +:1050E000252878D10024761CF94A27460121059409 +:1050F0003378203B01FA03F0104202D00443761CBF +:10510000F6E730782A2811D06FF02F033078A0F11D +:105110003002092A16D8059A44F0020402EB8202F2 +:1051200003EB42021044761C0590EFE759F8042B7C +:105130000592002A03DA504244F40054059044F0EA +:105140000204761C30782E2816D116F8010F44F090 +:1051500004042A280DD06FF02F023078A0F130031C +:10516000092B09D807EB870302EB4303C718761C0A +:10517000F3E759F8047B761C30786C280FD006DCF6 +:105180004C2817D068280DD06A2814D104E0742860 +:1051900010D07A280FD10DE044F400140AE044F452 +:1051A000801401E044F440147278824202D1761CEB +:1051B00004F58014761C307866280BD013DC582850 +:1051C00077D009DC002875D04528F6D04628F4D0E1 +:1051D00047281AD19FE118E0632835D0642879D098 +:1051E000652812D197E1702873D008DC6728F1D0C8 +:1051F00069286FD06E280DD06F2806D1B5E07328CE +:105200002CD0752875D0782874D05A4617999047B5 +:105210006D1C76E1C4F30250022809D003280DD09A +:10522000D9F8001004280DD00D6009F1040968E1D7 +:10523000D9F80010EA17C1E90052F6E7D9F80010D2 +:105240000D80F2E70D70F0E719F8041B8DF80010DF +:1052500000208DF80100EA46012003E059F804AB74 +:105260004FF0FF3061074FF0000102D40DE008F16C +:1052700001018846B9420FDA8045F8DB1AF80810B8 +:105280000029F4D108E008F1010188468142FADBE7 +:105290001AF808100029F6D105985B46A0EB08071C +:1052A00021463846179A00F09EFA284400EB08057C +:1052B00007E04DE02BE10DE01AF8010B5A46179973 +:1052C0009047B8F10108F7D25B4621463846179A55 +:1052D00014E142E00A220092C4F302524FF0000AA5 +:1052E000022A08D059F804CB032A4FEAEC710AD0FD +:1052F0000DE029E02AE009F1070121F00702F2E8B8 +:1053000002C1914609E00FFA8CFC4FEAEC71042AC5 +:1053100003D14FFA8CFC4FEAEC71002907DA0A46F8 +:105320000021DCF1000C61EB02012D2202E02205DC +:1053300004D52B228DF80420012203E0E20701D0DE +:105340002022F7E7904653E00A2102E010220DE008 +:1053500010214FF0000A00910BE010224FF0000ADC +:1053600044F004040827009203E008224FF0000AEA +:105370000092C4F30252022A05D059F804CB00214E +:10538000032A08D009E009F1070121F00702F2E839 +:1053900002C1914605E01FFA8CFC042A01D10CF0F1 +:1053A000FF0C4FF00008220722D5702827D0009B61 +:1053B00083F0100353EA0A0309D15CEA010206D024 +:1053C00030228DF804208DF8050002229046009BC3 +:1053D00083F0080353EA0A030AD15CEA010201D10F +:1053E000620705D530228DF804204FF001087F1E9A +:1053F000582809D037A003900EA8029013E040224D +:105400008DF804200122E1E737A0F4E75346604617 +:10541000009AFEF7D5FF84460398825C0298A0F1BB +:105420000100029002705CEA0100EFD1029806A927 +:10543000A1EB000000F1200A600702D524F48034BB +:1054400000E00127574502DDA7EB0A0000E000203D +:1054500000EB0A01009005984144A0EB0100059083 +:10546000E00306D45B462146179A059800F0BBF985 +:105470000544002706E001A85A46C05D17999047E9 +:105480006D1C7F1C4745F6DBE0030CD55B462146CF +:10549000179A059800F0A7F9054404E030205A4611 +:1054A000179990476D1C0099481E00900029F5DC63 +:1054B00008E0029802995A460078491C029117990F +:1054C00090476D1CBAF10001AAF1010AF1DC6BE111 +:1054D00009280100303132333435363738396162CA +:1054E000636465660000000030313233343536378E +:1054F00038394142434445460000000000F060F95D +:10550000054406F10106307800287FF4E9AD19B0B2 +:105510002846BDE8F08F620700D4062709F107028C +:1055200022F0070CFCE80223E14603F000485FEAA2 +:10553000080C02D00FF27C2C0DE05FEA045C02D56F +:105540000FF2742C07E05FEAC47C02D00FF26C2CDF +:1055500001E0AFF2700C4FF0FF3823F00043CDF8BC +:1055600050C065280CD006DC452809D046281DD03F +:1055700047283ED13EE0662818D0672839D139E067 +:105580000021112F01DB112000E0781CCDE9000182 +:1055900006A90EA8FFF7EEFCDDE90F010E9A0391B4 +:1055A0000021009207F1010A04914EE04FF0004003 +:1055B0000097CDE9011006A90EA8FFF7DBFCDDE995 +:1055C0000F0203920E9B11990022DDF80CA00093AC +:1055D000049219B907F1010100EB010AB7EB0A00C7 +:1055E00004D4C0F1FF3007F1010A0490AAEB0700D0 +:1055F000019046E0012F00DA01270021112F01DD83 +:10560000112000E03846CDE9000106A90EA8FFF7F9 +:10561000B1FCDDE90F010E9A039100210491009283 +:10562000BA4621070CD40399514500DA8A46BAF1EB +:10563000010F05DD009AAAF10101515C302908D063 +:10564000B84202DA10F1040F06DA0121CDE90110A7 +:1056500017E0AAF10101E9E7002805DC04990144FB +:105660000491AAEB000102E0411C514500DD8A468D +:105670000499A0EB010000F1010001904FF00040FF +:105680000290200704D40198504501DBCDF8048036 +:1056900000208DF84F0002980DF14F07B0F1004F38 +:1056A00025D02B200E9002984FF0020800280CDA2B +:1056B000404202902D200E9007E00A210298FEF74A +:1056C00009FF3031029007F8011DB8F10001A8F17F +:1056D0000108F2DC02980028EFD1791E0E980870BC +:1056E000307800F0200040F0450007F8020D12A8C5 +:1056F000A0EB070000F107081498007800B1012022 +:1057000000EB0A01019801EBE07105984144A0EB20 +:105710000100A0F101000590E00306D45B4621469C +:10572000179A059800F05FF805441498007820B1A6 +:105730005A461799904705F10105E00323D55B46CA +:105740002146179A059800F04EF805441BE004988E +:10575000002807DBDDE90301884203DD0098405C97 +:10576000179901E0179930205A46904704986D1C0C +:10577000401C04900198401E019004D12E205A46EE +:10578000179990476D1CBAF10001AAF1010ADEDCFD +:1057900005E017F8010B5A46179990476D1CB8F1B0 +:1057A0000001A8F10108F4DC5B462146179A059830 +:1057B000A4E600002D0000002B00000020000000E7 +:1057C0002DE9F041044600251E461746880405D4FD +:1057D00006E039462020B04705F10105641EF8D5E2 +:1057E0002846BDE8F0812DE9F041044600251E461B +:1057F0009046C80301D5302700E02027880405D54E +:1058000006E041463846B04705F10105641EF8D56B +:105810002846BDE8F0810A68531C0B601070704781 +:105820002DE9F05F064600880B46C0F30B00834667 +:1058300005F09CF80400707875884FEA10170AD0BC +:1058400005F10408984509D02A1DBDE8F05F194606 +:105850003548FFF77CBB594634A01EE001F048F9FB +:1058600007F00301002740F2031A6063012903D007 +:1058700002292CD03CA010E0A08F60B14119B1F5F5 +:10588000827F0ED328485B4652465C30FFF75FFBB1 +:10589000A787BDE8F09F594643A0BDE8F05FFFF73A +:1058A00056BBA16B2A4608440E30311DFEF7CCFDD5 +:1058B000A08F284481B2A187E08F083081422FD386 +:1058C000A06B0E3005F0DAF8E787A78728E0A08FF5 +:1058D00028B115485946B030FFF739FBA787B7887C +:1058E000381D8146854205D31FFA88F1304605F000 +:1058F000C5F815E0FF2D07D95B465246291DBDE8C6 +:10590000F05F3848FFF723BBA06B2A1D0E303146ED +:10591000FEF79AFDA4F83C80E787A16BA1F81090F0 +:10592000BDE8F05F05F0DABB303802006863692E2D +:10593000633A2061636C5F68616E646C65722063BA +:10594000616C6C65642077697468206E6F6E2D726F +:105950006567697374657265642068616E646C65FF +:1059600020257521000000006863692E633A2061DC +:10597000636C5F68616E646C65722063616C6C65FA +:1059800064207769746820696E76616C6964207040 +:1059900061636B657420626F756E646172792066F5 +:1059A0006C6167732025750041434C20436F6E7412 +:1059B00020467261676D656E7420627574206E6F2B +:1059C00020666972737420667261676D656E7420FB +:1059D000666F722068616E646C65203078253032A5 +:1059E000780000003439020010B50B46002803D1BE +:1059F0001146184607F0EEFB10BD70471CB506496E +:105A00008C68002C07D0002100910191B0F80601AC +:105A10000B460322A0471CBDA400002070B50D4614 +:105A2000002824D1082D22D2114C4FF4947654F83A +:105A3000250020B9304600F05DFF44F82500040041 +:105A400015D031462046FEF726FDA4F80651172052 +:105A5000A4F8000106F0EAFDA4F80201FB2802D92F +:105A6000FB20A4F802014FF0FF30A4F8080170BD3C +:105A700084640020F8B51646028A069FA2EB010254 +:105A800094B2C288D2050AD50A4A55683DB100933E +:105A900000890A46014633463846A847F8BD9C426D +:105AA00000D91C464069224601443046FEF7CCFC32 +:105AB0002046F8BDA4000020042105F055BF0421B4 +:105AC00006F094BE024908600421024806F006BEB2 +:105AD000B0000020396000000249486004210248FB +:105AE00006F0FCBDB000002039600000042105F084 +:105AF0003BBF042106F07ABE00B58BB0D0F824017C +:105B0000009028E0684600F033FABDF8081000293C +:105B100023D0BDF8062012A0FFF714FABDF8060046 +:105B20008005039808D506A919F034F806A81CF0DA +:105B300055F8014614A001E0018814A0FFF702FA0D +:105B4000BDF8101013A0FFF7FDF9BDF8101005986F +:105B500017F0A4F800980028D4D10BB000BD0000C5 +:105B600048616E646C653A203078253034782C209A +:105B7000666C6167733A203078253034782C207554 +:105B80007569643A200000002573000025303478E0 +:105B9000000000002C2076616C75655F6C656E3AC4 +:105BA0002025752C2076616C75653A200000000078 +:105BB000064A30B41468002C06D00B46A4460246B0 +:105BC000002130BC0420604730BC7047B800002082 +:105BD0007CB51446042819D120783E283FD016DC25 +:105BE000052846D0082801D030280FD1B2F803503C +:105BF000284600F0BDF8040008D0284619F0D6FC6D +:105C000004F8FD0F284619F02AFA60707CBDD728E9 +:105C10004CD0D8283BD0DA28F8D1608800F0A8F81A +:105C20000500F3D0B5F8060104F0A0FE0600EDD0A3 +:105C30002079317A8842E9D16946601D18F0B9FFB0 +:105C4000062231466846FEF738FC0028DED1E07AAD +:105C500085F8FF00B5F80601FFF74BFF7CBDA07883 +:105C6000012801D00A28F9D19188D078FFF7D6FE13 +:105C70007CBDB2F80340204600F07AF80028F7D047 +:105C800000F03AFE0F49002041F824007CBD6088F6 +:105C900000F06EF80500F9D0B4F80B0001B2A5F8D9 +:105CA000081109A0FFF74FF9284608E0508800F0D6 +:105CB0005FF80028EAD04FF0FF31A0F8081100F09B +:105CC0009BFA7CBD84640020534D5F4556454E547D +:105CD0005F4944454E544954595F5245534F4C56C1 +:105CE000494E475F53554343454544454420696405 +:105CF000202575003EB50C468DF8080000208DF873 +:105D0000092000900190022302AA0421204606F0F7 +:105D1000C3FF3EBD7FB50DF1200C1446BCE8640006 +:105D20008DF80800ADF80930ADF80B20ADF80D1076 +:105D3000CDE90056072302AA0421204606F0ACFF55 +:105D40007FBD70B515000C4603D0D0F8240120604B +:105D500008E0002070BD204600F00AF92089A84222 +:105D600003D020680028F6D170BD012070BD00006E +:105D7000082803D2024951F82000704700207047DC +:105D8000846400202DE9FF410C4616460978002561 +:105D9000B0F800211F4604F1050C0E2976D00CDC6A +:105DA000A1F1020EBEF10B0F15D2DFE80EF02114A7 +:105DB0003814401450146014660018296FD006DCA3 +:105DC000102970D012297ED0162904D181E05229E1 +:105DD00068D0D22966D048A0FFF7B4F8A6F109012F +:105DE00004F1090016F05AFF04B02846BDE8F0811E +:105DF000B4F80110B0F802218A4202D9A0F80011CB +:105E000001E0A0F80021032500F580703D700188B5 +:105E1000A7F801100188C088FEF728FEE4E7641C9B +:105E2000394663880093238803F024FB0DE0E31DCB +:105E3000641CF61F3946B5B2A7886688CDE90253BF +:105E4000CDE90067238803F07DFA0546CCE7072EED +:105E500001D8022100E01021641C6388CDE90031E3 +:105E6000CDF808C02388394603F0E0FCEDE7394659 +:105E7000B4F8013003F0ECFDE7E7641C39466388B1 +:105E80000093238803F0CCFBDFE7FFE71946761E7B +:105E9000641CC6F34F03009403F070FDD5E71EE0C9 +:105EA00001E010E021E0072E01D8022100E01021DE +:105EB000641C6388CDE90031CDF808C023883946D9 +:105EC00003F016FCC1E700923246214603F046FE7D +:105ED000BBE700923246214603F044FBB5E700924F +:105EE0003246214603F0FCF9AFE7009232462146E4 +:105EF00003F004FE78E70000556E68616E646C651F +:105F0000642041545420436F6D6D616E643A2025C6 +:105F10003032582C20444154413A20001CB50B4BE0 +:105F20001C68002C10D0B6238DF8003005238DF8A6 +:105F300001308DF80200ADF80310ADF805200723FD +:105F400000216A460420A0471CBD0000B8000020C4 +:105F500010B580B2FFF70CFF002808D0B0F80A2176 +:105F6000B0F80611BDE810409120FFF7D7BF10BD73 +:105F700010B501680A88828072B14B88C3808C8812 +:105F8000048101F10604C4609B050CD5A2F116033F +:105F9000038201F116030BE00021C1800181C16081 +:105FA0000182416106E0A2F10803038201F10803C6 +:105FB00011444361016010BD70B5044600890D466F +:105FC00000281BD0022A08D0E08880050BD51022BB +:105FD000E068FEF772FA80B111E009882046BDE85A +:105FE000704000F00EB8084605F03EFB002805D0D2 +:105FF000E168A8890988884201D1012070BD00208C +:1060000070BD70B5044600890D46002810D0E088A8 +:106010008005E06808D505F027FB002808D0E06877 +:106020008089A84203D004E00088884201D1012081 +:1060300070BD002070BD00002DE9F041194C0646EE +:106040001F4615468846042809D0082E28D12878EE +:10605000C00720D0D4F800C01FE03046E0472878C1 +:1060600078281DD1D4F804C0BCF1000F08D03B46FD +:106070002A4641463046E04704F070FB00280FD026 +:106080002468002C0CD03B462A4641463046A446A4 +:10609000BDE8F0416047D4F804C0BCF1000FDCD18A +:1060A000BDE8F081B00000202DE9F0410F46154613 +:1060B000044601461E46127828A0FEF744FF042C31 +:1060C0000CD0082C48D13846FFF752FE040043D0CC +:1060D00029781E2909D0522918D01EE0287878285E +:1060E0003AD1BDE8F04100F009B9B4F80A01A0B115 +:1060F00004F5867000F0FEFC04F583740020A2888D +:10610000A0802188BDE8F041FFF708BF324629464C +:10611000BDE8F0410023FFF735BEFB2E06D932461D +:10612000BDE8F041FB231A48FEF70DBF22782AB1E3 +:10613000BDE8F04116485030FEF705BF0120207041 +:10614000A4F8046132462946A01CFEF77DF92046DA +:10615000BDE8F04100F050B8BDE8F0816174745FB3 +:106160007061636B65745F68616E646C65723A2020 +:1061700074797065203078253032782C2070616316 +:106180006B65745B305D203078253032780000001C +:106190007C36020010B5B0F80001029CC01E80B22F +:1061A0001970A3F80120844200D8204610BD1FB505 +:1061B00014468DF80800069AADF80930ADF80B20AA +:1061C000ADF80D10002000900190072302AA0421D1 +:1061D000204606F061FD1FBD3EB50C468DF8080057 +:1061E000ADF80920002000900190032302AA0421A9 +:1061F000204606F051FD3EBD2DE9FF4104460178E1 +:1062000028A0FEF7A0FE207801282DD1A078D22862 +:1062100008D003202070B4F8060104B0BDE8F041B6 +:10622000FFF767BC19F0E4F80027E0B1B4F8040107 +:106230000F2818D3B4F8060119F086FD002813D1F1 +:10624000B4F9080106F0D2FE05000CD0B4F8041130 +:10625000A4F10A000E58696C324615A0FEF773FED1 +:10626000686CB04202D92770BDE8FF81022020701F +:10627000B4F80411A01F0844082116F00FFDB4F86B +:1062800003201849601DCDE90006CDE90214B4F8D9 +:106290000401A1780F3883B205F1340019F0B2F887 +:1062A000E2E700006174745F72756E3A2025640045 +:1062B000415454205369676E656420577269746550 +:1062C0002C20444220636F756E7465722025752CF6 +:1062D000207061636B657420636F756E74657220E6 +:1062E000257500005D650000FFF700BC00B5FFF7F5 +:1062F0003FFD002801D0B0F8000100BD2DE9F843B2 +:106300000025144F144EA84657F82540E4B12078D4 +:1063100003280BD1204600F0A7F838B1607898B177 +:10632000B4F80601BDE8F843FFF7E3BB607858B165 +:106330000AA084F8018000680090346824B1022328 +:1063400000216A460420A0476D1C082DDCD3BDE85F +:10635000F883000084640020B8000020B70000002B +:106360002DE9FE431F4616460D468046FFF700FD09 +:10637000040005D0B4F80A0120B19020BDE8FE83E6 +:106380005920FBE74046FFF7B1FB88B102AB2A4634 +:106390001D2120460097FFF7FDFECDE90060032395 +:1063A00002AA0421404606F077FC060002D014E061 +:1063B0005720E3E7A4F80A5104F5867042460849DD +:1063C000044600F0CDFB47F2305240F282412046B5 +:1063D00000F0AEFB204600F07DFB3046CEE700002B +:1063E000515F000070B505460B480A4C0E464460EC +:1063F00004F098F908480830446018F02DFD07486B +:10640000FFF76AFB284600F09DF83046BDE8704073 +:1064100000F09EB8D15B0000BC000020A960000025 +:106420002DE9FE431E4615460F468046FFF7A0FCA9 +:10643000040014D04046FFF759FB90B102AB3A4636 +:106440001B2120460096FFF7A5FECDE9005003234F +:1064500002AA0421404606F01FFCBDE8FE83592035 +:10646000FBE75720F9E700002DE9FC41244D002708 +:1064700007700446B0F804212B46811CFFF782FC0C +:10648000064604280FD3287801280CD1287908283B +:1064900009D194F8FE0030B1B4F8060118F006FEF8 +:1064A00078B1012811D086B100970197B4F80601A0 +:1064B00033462A46042106F0EFFB2878032807D04C +:1064C0001CE0B4F8060119F0D3FF0020BDE8FC8100 +:1064D0000C4AB4F80601B4F80011146874B1B5227E +:1064E0008DF8002004228DF80120ADF80410ADF8DD +:1064F0000200062300216A460420A0470120E5E7A8 +:10650000606F0020B800002001490860704700005B +:10651000B800002010B50246FFF72AFC002806D07C +:1065200001214170BDE810401046FFF7E2BA10BDEE +:1065300010B50C46FFF71CFC002801D0C0F8244120 +:1065400010BD00000149486070470000A400002011 +:106550000149886070470000A40000207CB5044613 +:1065600000780A4602280ED16946104618F01EFB34 +:10657000B4F80411A01F014408226846FDF79DFFEE +:1065800010B1002020707CBDB4F80411A4F10A0001 +:106590000E58B4F9080106F029FD050001D00120CC +:1065A00000E00020E62207A1FFF71EFA45B1761CA5 +:1065B0006E6403202070B4F80601FFF79AFA7CBDE0 +:1065C00072B6FEE76174745F7365727665722E63EE +:1065D000000000000A6882654968C16535210170C4 +:1065E00002F03CBBF8B50446C0880E46C0050BD58A +:1065F00006484568002D07D000200090034602465B +:1066000021893046A8472082F8BD0000A400002060 +:106610007CB50E46C98804460D0B00D06D1C14F8DD +:10662000FD2F6078CDE90002A378FD3C2A46104892 +:10663000FEF788FCF088410502D594F8FE1079B188 +:10664000000502D594F8FF0060B1002D02DD94F83A +:10665000FD0048B194F8FD00A84207DA0C207CBD8B +:1066600005207CBD08207CBD0F207CBD00207CBDAA +:10667000783502003EB50C468DF808000699ADF855 +:106680000920CDE90013032302AA0421204606F0C5 +:1066900003FB3EBD0622FDF710BF0A680260898831 +:1066A0008180704710B50C49002203463A24985C5B +:1066B000000900F025FB0870985C00F00F0000F066 +:1066C0001FFB48708C70C91C521C062AEFDB00208F +:1066D00001F8010C004810BD4969002008440088F9 +:1066E00040BA70474218405C5378528852BA63F3FC +:1066F0001F4242EA00607047130A4354491C89B2A2 +:1067000042547047130E4354491C89B2C2F30743E5 +:106710004354491C89B2C2F307234354491C89B22C +:106720004254704710B50446FEF78CF903480188BF +:10673000A1430180BDE81040FEF78EB90C04002093 +:1067400010B503F094FBBDE81040012000F010B834 +:1067500010B506490A68C2F30312022AFAD10121D0 +:1067600000F0D6FBBDE8104004F0F4BE0400044085 +:1067700010B50446FEF766F90348018821430180FD +:10678000BDE81040FEF768B90C040020034800780B +:10679000C00701D116F09EBD704700000C04002018 +:1067A00008B50020009008480068C1050748006847 +:1067B00003D069461CF048F808BD00231A46194664 +:1067C0001BF02CFF08BD000004ED00E004000020D9 +:1067D00010B518B103F04DFB0FF0ECFA10F08CFA85 +:1067E0000120FFF79FFFBDE81040032016F086BE92 +:1067F00070B50D480088A0B910F0AEF940F2E2453E +:106800000446A8420DD30948406D50B916F04AFF1E +:1068100038B116F04FFFA84203D3A04200D3204660 +:1068200070BD002070BD00000C0400200000094075 +:106830000268134602E08A4204D01268002AFAD1A4 +:106840000B600160704702E08A4205D01046026882 +:10685000002AF9D10A6001607047006808B1002081 +:1068600070470120704704E0884201D10120704741 +:1068700000680028F8D170470268816832B140682A +:106880000068884200D1086808B9704709B1012042 +:106890007047002070470022C0E90021096881602C +:1068A0007047016851B141680A6881688A4203D122 +:1068B00041600968816003E0826001E001210160BC +:1068C00080687047816809688160426811600021B2 +:1068D000016070474FF0FF3351B107E002688A4210 +:1068E00003D1096801600020704710460028F5D1E7 +:1068F0001846704717F0C8BF1BF088BA1BF086BA5D +:10690000782017F0C1BF000010B50446806B06F078 +:10691000A2FB2146BDE81040014800F071B800001C +:10692000D800002070B50C4800F09AF804000CD094 +:1069300040F2111006F0B2FB050008D0902120466D +:10694000FDF7A9FD2046A56370BD002070BD21465E +:10695000014800F055F8F8E7D800002010B5902362 +:1069600008220F490F4800F037F80E4914230C395C +:10697000002201F1100000F02FF80A494C230839D9 +:10698000002201F1100000F027F806490C23002234 +:10699000091FBDE8104001F1100000F01DB8000013 +:1069A000A4640020D80000200146014800F028B867 +:1069B000E0000020014800F053B80000E000002093 +:1069C0000146014800F01CB8DC000020014800F03E +:1069D00047B80000DC0000202DE9F0410646002009 +:1069E000984617460C460546306005E0214630467D +:1069F00000F006F844446D1CBD42F7DBBDE8F081B1 +:106A000030B40268134607E08B4204D1024630BC22 +:106A100004A0FEF799BA1B68002BF5D10A6001604B +:106A200030BC70476274737461636B5F6D656D6FCA +:106A300072795F706F6F6C5F667265653A20626C29 +:106A40006F636B20257020667265656420747769BA +:106A5000636520666F7220706F6F6C202570000078 +:106A6000016819B10A680260084670470020704743 +:106A700001460148FFF7C4BFE40000200148FFF7CA +:106A8000EFBF0000E400002000B589B00A230193A5 +:106A90000E4B1B6802930591CDE903020C48006878 +:106AA000C00518464FF0000304D0002269461BF0D1 +:106AB0006BFE04E04FF0FF3269461BF0AFFD01288A +:106AC00002D0012009B000BD0020FBE70800002033 +:106AD00004ED00E038B504461CF0A6FA02464FF07B +:106AE000FF3000900023012160691CF0B5FC38BD27 +:106AF0000020704738B50446406948B14FF0FF3177 +:106B0000002300911A4605211CF0A6FC00206061BC +:106B1000002038BD38B504461CF086FA02464FF016 +:106B2000FF3000900023022160691CF095FC38BD05 +:106B300038B5044681604FF47A704243B2FBF0F1FD +:106B4000044800902346002203A01CF019FC606159 +:106B500038BD0000814E00006800000001617047F0 +:106B6000C0E90312704708B54FF0FF3100910023D0 +:106B700040691A4603211CF06FFC08BD70B50C007B +:106B8000054601D0012000E000206A2206A1FEF7A0 +:106B90002BFF284600F034F810B100206C60206014 +:106BA000286820602C6070BD6C6973745F626173CB +:106BB00069632E630000000070B50C00054601D02B +:106BC000012000E00020532207A1FEF70DFF284618 +:106BD00000F016F808B12C6001E06868046000203D +:106BE0006C60206070BD00006C6973745F626173DB +:106BF00069632E630000000000210160416070475E +:106C0000006808B10020704701207047006808B193 +:106C10000020704701207047016819B10A680260BE +:106C200012B103E00022FAE70022426008467047F2 +:106C300070B5054600680C4600B10120C32209A1C9 +:106C4000FEF7D2FE206800B10120C42205A1FEF7A4 +:106C5000CBFE69682068086060686860002020607A +:106C6000606070BD6C6973745F62617369632E6389 +:106C70000000000070B5034600200246012513F80D +:106C80000240002105FA01F6344201D0401C80B2D6 +:106C9000491CC9B20829F5D3521CD2B2052AEED339 +:106CA00070BD70B50446008942F6554290472521D3 +:106CB000B0FBF1F201FB1201CA0801F00705A25C6A +:106CC0000123AB401A4201D0084670BDE188414320 +:106CD0002046BDE87040C1F3074102F0D5BA30B597 +:106CE00004461068206010790D4600F01F002071E6 +:106CF0002046FFF7BFFFE08085EA1540208130BDC8 +:106D00000A2801DA303003E00A38062802DA413076 +:106D1000C0B270473F20704770B50446C08E88B03F +:106D2000002822D0258F94F83430A2268DF80060F8 +:106D30001A268DF80160A6890A46ADF80400ADF860 +:106D4000082004F11C01ADF80260ADF80650ADF862 +:106D50000A30102203A8FDF777FBA1891C236A469D +:106D6000A06800F02DF90020E08608B070BD00009A +:106D700004481144814203D9012018600320704760 +:106D8000002070475B6E00200249CA6D82430243B7 +:106D9000CA6570470000094043688B4204D180688F +:106DA000904201D101207047002070471CB500229D +:106DB000202140201BF092FB104C03220021A060F8 +:106DC00001201BF08BFB606004F10C010E20CDE96B +:106DD00000014FF480640023224609A109481CF0F9 +:106DE000A9F8064902201031CDE90001002322460E +:106DF00005A106481CF09EF81CBD00000000002004 +:106E0000630000000D4A00007000000031DE010048 +:106E100010B504F002FC0022BDE81040114602202B +:106E200004F0C2BB70B50646401E1D460C46042841 +:106E300009D220782968884205D10622211D686878 +:106E4000FDF73BFB08B1002070BDC5E902640320DB +:106E500070BD00000248017A491C017270470000B1 +:106E60007401002010B5044603F0DAF800200EF09B +:106E70008DFF0FF0A7FD0EF0E1FD07F0F5FF0BF021 +:106E8000FFFC11F027FA15F015F9002C03D0BDE82E +:106E9000104010F0ECBA10BD70B50446B0F1A53F3B +:106EA00019D0B4F1C33F16D00123DA0205211B200B +:106EB00016F072F90546B4F1F23F09D08D2206A111 +:106EC0000020FEF791FD2846BDE8704016F0C4BAD8 +:106ED00007202870F7E770BD6474626C652E63004C +:106EE00070B50A4C4FF42020074DE0641AF0B0F959 +:106EF000800602D54FF4803001E04FF40040284472 +:106F0000C0F31300A06470BD00000A4000000940F7 +:106F1000F8B505461B480E46002101800FF016F813 +:106F20001AF0A4F916F0E0F868460FF049F80446A4 +:106F3000009842F203114FF46367884201D30120A5 +:106F400000E00020852210A1FEF74EFD3A462146C2 +:106F5000002016F035F9009804F56361A0F5636030 +:106F600082B2012016F02CF91AF016F93046FFF71C +:106F700079FF002D04D02846BDE8F840FFF78CBF0C +:106F8000F8BD00000C040020647469702E630000DA +:106F900009490120096809B1002070470749CA69F9 +:106FA000002AF9D1044A283212688968491E8A42A7 +:106FB000F3D10220704700005C0B00202400002069 +:106FC00030B4040003D0A44630BC0420604730BC79 +:106FD0007047FEB51E4617460C46054602F070F98E +:106FE000002816D0011D6846FFF755FC0CE06846E6 +:106FF000FFF757FC0189A14206D1D0F804C03346FF +:107000003A4629460420E0476846FFF735FC002849 +:10701000EDD1FEBD1CB5A0228DF8002003228DF815 +:1070200001208289ADF802208DF8041081898068E2 +:1070300005236A46FFF7C4FF1CBD30B587B0044680 +:10704000A3250A988DF8005018258DF80150A589C0 +:10705000ADF80410ADF806200146ADF80250ADF8C9 +:10706000083010220DF10A00FDF7EEF9A1891A236C +:107070006A46A068FFF7A4FF07B030BD10B586B020 +:107080000446A1208DF8000016208DF80100A0898B +:10709000ADF80410ADF80200ADF806201022194634 +:1070A00002A8FDF7D1F9A18918236A46A068FFF765 +:1070B00087FF06B010BD00002DE9F05F0024924666 +:1070C000894605462746264624E000BF05EB840096 +:1070D000B0F9021035F9240017F092FD834605EB54 +:1070E0008800B0F9021035F9280017F089FDABEBE4 +:1070F000000043F6FF71884203DBA0F5FE40FF3835 +:1071000004E00849884201DC490C0844074404EBC8 +:107110004904761C04EB0908D045D7DB97FBF6F051 +:10712000BDE8F09F01C0FFFF2DE9F047427804461B +:10713000901C86B00E46814206D006B0921CBDE877 +:10714000F047F548FDF703BF2178F4A0FDF7FFFEF7 +:1071500020780122DFF8D4834FF000094FF0070AAE +:1071600010287DD00BDCA0F105000B2835D2DFE81C +:1071700000F0BA97348334345A3434112B003E284B +:107180006FD004DC12286DD0132826D12CE05728AC +:1071900023D19CE1D8F80000A278454690F852101F +:1071A000E3A0FDF7D4FE6179EAA0FDF7D0FE2968DF +:1071B000A07881F85200EC49B4F8030009888842AD +:1071C00007D0EA49098804E0D8F80000E17880F89F +:1071D0005210D8F80010A1F88690D8F8000090F866 +:1071E0006800012877D07CE10325002717E0635B66 +:1071F000AD1C625BAD1C184603F0B8FB38B190F8CB +:107200004010914208D3891A80F8401006E01946D0 +:10721000D7A0FDF79CFE01E080F840907F1CA0788D +:10722000B842E4DCD9E7B4F8030003F09FFB0500A3 +:10723000D3D0A07860B9E17A04F10500090703D53D +:10724000698A41F004016982C078000600D5EA75B8 +:10725000688A40F00201B0486982EA7D603002E04D +:107260004FE05FE052E0FDF772FE688A0106B4D598 +:1072700040F020006882B0E7B4F80350284603F0DD +:1072800075FB0028A9D0A17831BB617900298169FB +:1072900002D041F4004101E021F4004181611BE092 +:1072A000B4F80350284603F061FB002895D0418ACA +:1072B0000A0607D521F0800141F010014182A17832 +:1072C00001758AE7A2783AB9427D022A04D841F0D2 +:1072D0004001418281E700E100F094FC014628462C +:1072E00003F044FC79E76279A178AFA0FDF7FEFDD9 +:1072F000B4F8030003F03AFB002893D080F811A003 +:107300006BE703F067FE03F079FE66E7A0780028DC +:1073100088D1B4F8030003F029FB0028ABD0617AD0 +:1073200001745AE7A07806287DD010DC01281CD013 +:107330000428A0D1E078002876D1A08803F016FBBD +:10734000002871D08030A1794170027045E70A2889 +:107350000BD012288FD1207908288CD2E17800290F +:1073600070D097A0FDF7F3FD37E7E0780028A8D1AB +:10737000A788082F27D2D8F8000000EB8705686996 +:1073800010B9FFF7CFFA686105001CD0EF8002202A +:10739000C5F8189068752A46924905F11C00FFF758 +:1073A000DFFBFFF7A5FB6863E0792872294604F14B +:1073B000080017F0FEFB05206874A0792874A078F7 +:1073C0000A2804D012E0A08800F0D0F905E7D4F82C +:1073D0000E10C5F88210618AA5F886106169C5F89B +:1073E0008810218B05F18000A5F88C10E089A5F8A4 +:1073F0005200287C60B9D8F8001091F85010E97359 +:10740000D8F8000005F1090190F8500000F086FA64 +:107410002846FFF747F90246E98873A0FDF797FD74 +:1074200003F07AFB01E00EE023E0D8F8000090F8CA +:107430005E00C0068AD5E98840F6B832724803F08B +:10744000E7FBCAE618E034F8035F284603F08EFA3B +:107450006288A388E188248900280AD054304688AD +:107460000088CDE90014CDE902062946674803F0FB +:10747000CFFB06B0BDE8F087B4F80520104603F056 +:1074800075FA0546217962A0FDF761FD2079D8F8EB +:107490000020C0EBC001114491F89310E97369B169 +:1074A0002179D8F80000C1EBC101014401F180004D +:1074B000D1F8941045F8091F008B06E0D8F80000B9 +:1074C000416C45F8091FB0F84800A88085E660883F +:1074D00003F04CFA0028B4D1CBE7B1B2204603F058 +:1074E00033FCB1B2204603F0EFFA2078052811D121 +:1074F000B4F8030003F03AFA60B1D0E90012047D59 +:10750000458ACDE9031203F057FFE80502D503AD24 +:10751000214695E0A7E00000A03902004843493A1F +:107520004556454E543A253032780000BC370200AB +:10753000434D445F434F4D504C45544520636D646B +:1075400073206F6C64202575202D206E65772025B3 +:1075500075000000636D645F636F6D70207374610C +:107560007475732025750000583B0200603B0200D3 +:107570006863695F6E756D6265725F636F6D706C75 +:10758000657465645F7061636B6574206C697374A6 +:107590007320756E7573656420636F6E2068616E0D +:1075A000646C652025750000646973203A2073209F +:1075B00030782578202C7220307825780A00000059 +:1075C00061647620736574207465726D696E617490 +:1075D0002064756520746F20636175736520307851 +:1075E00025780A0085A900004E657720636F6E6ECE +:1075F000656374696F6E3A2068616E646C652025FE +:10760000752C202573000000803A0200083B020020 +:107610006164762068616E646C65722030782578CC +:1076200020636F6E6E656374656420746F20636F92 +:107630006E2068616E646C6520307825780A0000E1 +:107640000BA0FDF784FCE1208DF800008DF801A06F +:107650008DF802400DF10301284617F0AAFA09211E +:10766000684603F031FA06B0BDE8F04703F036BDD6 +:107670006863695F656D69745F646564696361749B +:1076800065645F626F6E64696E675F726573756C67 +:10769000742025752000000010B5044603F0B6FFE5 +:1076A000204610BD13460A4610B50146024803F0B5 +:1076B000AFFAC0B210BD0000B03B020010B50246E8 +:1076C000024803F0A5FAC0B210BD0000B03A0200B3 +:1076D00010B588B00C46694617F05CFA04A920463C +:1076E00017F058FA04AA6946024803F091FA08B064 +:1076F000C0B210BDE03A020010B5024803F088FAAB +:10770000C0B210BDA83A020010B5024803F080FADA +:10771000C0B210BD603B020010B5024803F078FA19 +:10772000C0B210BDC03B020000B1012004490A688C +:1077300092F88920824202D0096881F88900704756 +:10774000BC37020010B5024803F062FAC0B210BDA7 +:10775000A03A020008B5009313460A4601460248C3 +:1077600003F056FAC0B208BD2038020010B5034637 +:1077700003F0FCF840B10621417413221946054874 +:1077800003F046FA002010BD0021184603F088F9E6 +:10779000F8E70000503A020038B54FF0FF30ADF87E +:1077A0000200ADF8000006250DE0684603F02EF952 +:1077B0000446407C062806D0E1881322054803F0E1 +:1077C00027FA00B96574684603F000F90028ECD187 +:1077D00038BD0000503A020038B500B101200D4913 +:1077E0000A6892F88840844210D121460AA0FDF729 +:1077F000AEFB66208DF8000001208DF801008DF8A9 +:1078000002400321684603F05FF938BD82F8880022 +:1078100038BD0000BC3702004254535441434B5F13 +:107820004556454E545F444953434F564552414295 +:107830004C455F454E41424C4544202575000000B3 +:107840002DE9FF4FDFF8A8A085B00024DAF800206A +:10785000DDE912691268DFF894808B460A2000EB9C +:10786000061153692746B8F8000003AA9847050097 +:1078700001D001210FE0562009B0BDE8F08F00BF14 +:1078800004EBC40219F81220521E01FA02F0384328 +:10789000641CC7B2E4B2B442F2D3DDE907018DE85B +:1078A00083005B46D8F804102846059A03F054F884 +:1078B000C7B200240DE000BF04EBC40109EB410195 +:1078C000891CE8191022FCF7BFFD1037641CFFB2B9 +:1078D000E4B2B442F0D3DAF80010404681F850B078 +:1078E0002946039A03F030FD0020C5E7903B0200D3 +:1078F000BC3702000248006890F88A007047000018 +:10790000BC3702000449096851F8CC2F02604A686C +:107910004260896881607047BC370200074A0028CE +:10792000106804D050F84A2F0A60808803E0426C47 +:107930000A60B0F84800888070470000BC37020039 +:1079400010B50146024803F063F9C0B210BD000053 +:10795000D03A0200034909684A6C0260B1F8481045 +:1079600081807047BC37020010B50446014604A070 +:10797000FDF7EDFA022C01D9012010BD002010BD49 +:107980006761705F6D69746D5F70726F7465637449 +:10799000696F6E5F72657175697265645F666F723B +:1079A0005F73656375726974795F6C6576656C2069 +:1079B000257500007FB50DF1200CBCE870008DE846 +:1079C000780013460A460146024803F021F904B044 +:1079D000C0B270BD983B020010B5024803F018F920 +:1079E000C0B210BDA03B020013460A4610B50146C6 +:1079F000024803F00DF9C0B210BD000010380200BB +:107A000013460A4610B50146024803F001F9C0B218 +:107A100010BD0000083802001CB5049CCDE90034FC +:107A200013460A460146024803F0F2F8C0B21CBDF4 +:107A30001838020010B50146024803F0E9F8C0B258 +:107A400010BD0000A83B02000448417A012903D17F +:107A50000221417218F054BD7047000074010020EB +:107A6000074810B5426D40F282210648FFF760F8E2 +:107A70000448FFF72FF8BDE81040FFF7E5BF00000E +:107A800074010020CC73002010B50022074908487B +:107A9000FFF766F8074840F28221426D0448FFF77D +:107AA00047F8BDE810400248FFF714B8617A0000BB +:107AB000CC7300207401002010B5024803F0A8F830 +:107AC000C0B210BD983A020010B5024803F0A0F809 +:107AD000C0B210BDF837020010B5024803F098F8A4 +:107AE000C0B210BDC83B020010B50146024803F009 +:107AF0008FF8C0B210BD0000183B020010B501465F +:107B0000024803F085F8C0B210BD0000703A0200D0 +:107B100010B50146024803F07BF8C0B210BD00006A +:107B2000D83A020010B50146024803F071F8C0B21D +:107B300010BD0000883A020010B50246024803F06A +:107B400067F8C0B210BD0000B83A02002DE9F0415C +:107B50000E46074602F00AFF040010D0384600F037 +:107B600047F80546024631460AA0FDF7F0F9B5424E +:107B700007D329463846BDE8F04102F0F7BF01219E +:107B8000F8E76675608A40F020006082BDE8F04149 +:107B900003F0A4BA6761705F726571756573745F95 +:107BA00073656375726974795F6C6576656C2025A1 +:107BB000752C2063757272656E74206C6576656CC9 +:107BC0002025750010B50146024803F021F8C0B227 +:107BD00010BD0000583B020013460A4610B501468E +:107BE000024803F015F8C0B210BD0000B83B020017 +:107BF00010B502F0BBFE18B1BDE8104000F002B8AD +:107C0000012010BD10B1008B000401D40120704789 +:107C10000220704702207047084B10B51B68C0EB6C +:107C2000C0021A440B6842F8943F8B8893800A463E +:107C30000146034802F0ECFFC0B210BDBC370200A1 +:107C4000303B020000B101200249096881F88A0036 +:107C500070470000BC37020001490968086470479A +:107C6000BC3702001CB5049CCDE9003413460A461B +:107C70000146024802F0CCFFC0B21CBDE83702004A +:107C80000A4610B50146024802F0C2FFC0B210BD5C +:107C9000F03702002DE9FE4F144E8846A6F11C0174 +:107CA0001D4609681746814609683088DDF830A00E +:107CB0004B6902AA691D9847040014D0CDE90075EC +:107CC00043464A46716802F047FEC0B220442A4645 +:107CD0005146FCF7B9FB21463046029A03F034FBCB +:107CE0000020BDE8FE8F5620FBE70000D8370200D9 +:107CF0002DE9FC47124D0F46A5F12401994609686C +:107D0000164680460968288801AA4B69311D9847A4 +:107D1000040013D000963B464246696802F01CFE00 +:107D2000C0B2204432464946FCF78EFB2146284625 +:107D3000019A03F009FB0020BDE8FC875620FBE711 +:107D4000E037020004490268096841F8CC2F426814 +:107D50004A60806888607047BC3702000A4610B5E8 +:107D60000146024802F054FFC0B210BDC8370200FD +:107D70002DE9FF5F154D8946291FDDE90E6B096866 +:107D80001F4690460968824628884B6903AA711DE0 +:107D90009847040018D0CDF80080CDE901764B4615 +:107DA00052462046696802F0D7FDC0B220443246F0 +:107DB0005946FCF749FB21462846039A03F0C4FACA +:107DC000002004B0BDE8F09F5620FAE7C03702005B +:107DD0002DE9FF5F164D8946A5F11401DDE90E6B13 +:107DE00009681F4690460968824628884B6903AA9D +:107DF000B11D9847040018D0CDF80080CDE9017678 +:107E00004B4652462046696802F0A6FDC0B22044A7 +:107E100032465946FCF718FB21462846039A03F0E0 +:107E200093FA002004B0BDE8F09F5620FAE7000066 +:107E3000D037020013460A4610B50146024802F048 +:107E4000E7FEC0B210BD0000203B020008B50B46A3 +:107E5000009202460021024800F074F808BD0000BC +:107E6000403B02002DE9FC4791461B4A194F8846CA +:107E7000126804460221126801EB880138885369B0 +:107E800001AA9847060007D043462246796802F0C7 +:107E900063FDC5B2002414E05620BDE8FC8700BF96 +:107EA00004EB440009EB40010A7900924B8819F871 +:107EB0001020701909A102F04FFD2D1D641CEDB2B8 +:107EC000E4B24445ECD331463846019A03F03CFA1B +:107ED0000020E2E7503B0200BC37020031323100A3 +:107EE0002DE9F04F8DB0DFF854C0DDE91F89DDE9E1 +:107EF0001BBADCF800C0DDE91D56C0EBC0076744C3 +:107F0000DDF868E0179C87F8934008AFA7E86003A6 +:107F1000DDF864C0CDE906BACDE904CE169E189D01 +:107F2000CDE9003613460A4601460548CDE902452B +:107F300002F06EFE0DB0C0B2BDE8F08FBC3702009B +:107F4000383B02002DE9FC471C460A9D174688462F +:107F50008146F72B28D9F720CDE900050B460122F1 +:107F60003946484602F054FE10F0FF0025D1F73C98 +:107F7000A4B2F73516E0F72C01D3F72600E0264629 +:107F8000A01BCDE900650404240C01D0002200E010 +:107F9000022243463946484602F03AFE10F0FF00FE +:107FA0000BD13544002CE6D14346032239464846DE +:107FB000CDE9004502F02CFEC0B2BDE8FC87000010 +:107FC00008B5009313460A460146024802F020FE17 +:107FD000C0B208BD883B02002DE9FC4716460F469B +:107FE00002EB8601244ADFF88C80994612688246AB +:107FF00000241268C91CB8F80000536901AA984708 +:10800000050002D0002001220DE05620BDE8FC87CB +:1080100000EB400319F813305B1E02FA03F1214311 +:10802000401CCCB2C0B2B042F2D300943B465246A0 +:108030002846D8F8041002F08FFCC7B200240FE0E5 +:1080400004EB440109EB41008188009143884278A8 +:10805000E8190AA102F080FC7F1D641CFFB2E4B2A3 +:10806000B442EDD329464046019A03F06DF9002051 +:10807000CCE70000803B0200BC3702003132320006 +:1080800008B50B460092024600210248FFF75AFF4E +:1080900008BD0000483B02000A4610B501460248F0 +:1080A00002F0B6FDC0B210BDC83A02002DE9F84397 +:1080B0001A4F15460C468046F82925D90146F82363 +:1080C00001223846009502F0A3FD10F0FF0023D1F5 +:1080D000F83CA4B2F83515E0F82C01D3F82600E0FE +:1080E0002646A01B0404240C009501D0002200E0C9 +:1080F000022233464146384602F08AFD10F0FF0066 +:108100000AD13544002CE7D12346032241463846A4 +:10811000009502F07DFDC0B2BDE8F883703B02001F +:108120000A4610B50146024802F072FDC0B210BD09 +:10813000783B020008B5009313460A460146024800 +:1081400002F066FDC0B208BD683B02000A4610B5E9 +:108150000146024802F05CFDC0B210BD00380200CA +:108160001CB5049CCDE9003413460A46014602487A +:1081700002F04EFDC0B21CBD283B0200054902685A +:10818000096841F84A2F82888A800146024802F035 +:108190003FBD0000BC370200903A02000249096866 +:1081A00081F8510070470000BC3702000B4900B550 +:1081B0000A6892F85C20C2F3C00262B1096891F8C3 +:1081C000511041B102F0D2FB28B1807CC0F3800095 +:1081D00008B1012000BD002000BD0000BC37020036 +:1081E000F0B587B0DDE90C45DDE90E67DDE910CEBD +:1081F0008DE81840CDE9057C13460A46CDE90356C3 +:108200000146034802F004FD07B0C0B2F0BD000013 +:10821000283802007FB50DF1200CBCE870008DE815 +:10822000780013460A460146024802F0F1FC04B009 +:1082300070BD0000C03A02002DE9F0478AB01E462A +:108240001546884604280AD0082875D128781B28A6 +:108250000FD01D2808461FD001F032F81EE0297803 +:10826000782969D1FA494C68002C50D04146A04782 +:108270004DE0B5F801700C46EA1CDE1E3946A72019 +:1082800016F0D2FD0246F61C0AB0B3B239462046BB +:10829000BDE8F047FEF79DBE15F0EEFD04004BD0A3 +:1082A0002978771E4FF001090D297CD009DC0C29B3 +:1082B00015D2DFE801F014FA143114F914F814643B +:1082C00014CE172970D006DC0F296ED0112934D0B6 +:1082D000132904D147E1192968D01D293CD0DDA01C +:1082E000FCF734FE28788DF808908DF809000020FE +:1082F00006218DF80A008DF80C108DF80B00009007 +:108300000190A089052302AA042104F0C5FC0AB04B +:10831000BDE8F04700F0A2BCB5F8015004F086F9C2 +:10832000854200D22846E08284F81890A28901464E +:108330001046FCF79BFBEAE7DDE120780228E6D156 +:1083400032462946204616F0E7FB69782046711A26 +:10835000294401224988A3E04746B5F80180EA1C78 +:10836000F61E4146A82016F05FFD0246F61CB3B289 +:1083700041463846FEF72DFE84F85190C7E7207835 +:108380000C2820D016DC062801D00828BFD13246A0 +:108390002946204616F073FB3146284600F09AFF26 +:1083A0000146204603E0E6E013E16DE145E119F006 +:1083B0009BFAACE7142832D02428A8D16888A4F806 +:1083C0004C00252037E195F80180B8F1070F07D25E +:1083D0006888A085A8882086E88860860D202AE124 +:1083E000022715E0E91935F807904A8822868A881D +:1083F0006286C98801A819F01DFC01A80090638E4F +:10840000228E49462046FEF718FE07EB080087B289 +:10841000B742E7D369782046711A695A3FE095F868 +:10842000018000210227A8F1020A0DE035F807902B +:10843000EA191FFA8AF3921C4946204616F010FBEF +:1084400007EB0800494687B2B742EFD32046132214 +:1084500026E020780E2814D0102827D028288DD187 +:10846000204600F07DFA218F6A1CA92016F0DCFC62 +:1084700002460837BBB2A189A068FEF7A1FD002122 +:1084800035E101A9681C16F085FBA18D01AA0092B7 +:108490002046638E228EFEF7D0FDA18D20460B2252 +:1084A00019F042FA33E70BE022E0F7E0204600F053 +:1084B00057FABBB2218F6A1C204616F0D1FADEE7CC +:1084C0004FF004094FF6FF78012704F11C0A09E078 +:1084D000E819E95B40885346804602462046FEF78D +:1084E000CDFD4F44B742F3DB204641460322D7E798 +:1084F00068780427022800D11227F01B35F800A065 +:10850000AD1CB61E1FFA86F8002621E035F806904D +:10851000042F05EB060021D0801C06A916F03AFBBB +:10852000A4228DF8002014228DF80120A289ADF834 +:10853000022006A9ADF8049010220DF10600FBF709 +:1085400083FFA18916236A46A068FEF739FD3E44E1 +:108550004645DBDB204651460922A1E7418806A8B3 +:1085600019F068FBDCE72078182803D0262801D012 +:108570002C2897D1AAE0761E2078B6B2761DBFB21D +:10858000122815D02A288DD1218F628F6B1CAA202A +:10859000009716F057FC020004D0B3B2A189A0687E +:1085A000FEF70EFD3A462921204619F085F9AEE680 +:1085B000218F628F6B1CA620009716F043FC0200EF +:1085C00004D0B3B2A189A068FEF7FAFC3A461121A3 +:1085D000EAE720781A2812D01C281CD02E2814D0A4 +:1085E0003228E4D1204600F0BBF932462946204625 +:1085F00003F05AF800287FF462AF7E2177E0B5F8E7 +:1086000003001D226087192110E0B5F803002F2216 +:1086100060872D210AE032462946204603F044F8BF +:1086200040B1B5F803001D2260871B21204619F0D8 +:108630006AF96CE62120207069E620781E2845D072 +:10864000202843D022281BD03028B0D13EE00000A3 +:10865000E80000204154542048616E646C65722C1F +:1086600020756E68616E646C656420726573706FEE +:108670006E7365207479706520307825303278000B +:10868000204600F06DF9B8E7207816288FD1BBB2EC +:108690006A1C0021204616F0E3F917E029790A291F +:1086A00010D12078082815D006DC02280ED0042826 +:1086B0000CD0062806D10DE00A2807D00C2805D0DA +:1086C00014280CD0204600F0B8FA20E6204600F02E +:1086D00047F9D4E6E18D2046FEF71EFBF6E720467B +:1086E00000F03EF9A08D218E8842F2D10A21204669 +:1086F000FEF790FC0BE60AB0BDE8F08710B5044623 +:10870000084615F0EDFB18B1017819B1952010BDA0 +:10871000562010BD1F218460017000F09FFA0020D8 +:1087200010BD70B505461446084615F0D9FB18B1C2 +:10873000017819B1952070BD562070BD6188A2885E +:10874000914203D10021FEF765FC09E08560618854 +:10875000491C8185A188C1850921017000F07EFA3C +:10876000002070BD2DE9F04107461D46164608461B +:10877000DDF8188015F0B4FB040004D0207820B197 +:108780009520BDE8F0815620FBE7A760A685E5852A +:10879000012084F85000002565831022414604F131 +:1087A0001C00FBF751FEE5860720207000F056FA0A +:1087B0000020E6E72DE9F04107461D46164608462B +:1087C000DDF8188015F08CFB040004D0207820B16F +:1087D0009520BDE8F0815620FBE7A760A685E585DA +:1087E000012084F85000A4F81A80414604F11C00CE +:1087F00019F020FA0020E0860720207000F02EFA01 +:108800000020E6E770B506461C461546084615F0FA +:1088100067FB18B1017819B1952070BD562070BD65 +:1088200086608585C485002180F85010C1860521A9 +:10883000017000F013FA002070BD10B50446084620 +:1088400015F04EFB18B1017819B1952010BD5620D6 +:1088500010BD0121846081854FF6FF72C2850170D1 +:108860000021418300F0FAF9002010BD70B50546E3 +:108870001646084615F034FB040003D0207818B1E2 +:10888000952070BD562070BD0120A560A0854FF6D3 +:10889000FF70E085002060831022314604F11C0047 +:1088A000FBF7D2FD0320207000F0D8F9002070BD46 +:1088B00070B505461446084615F012FB18B101784C +:1088C00019B1952070BD562070BD0121856081854C +:1088D0004FF6FF71C18503210170448321461C308E +:1088E00019F0A8F900F0BAF9002070BD10B50446DF +:1088F000084615F0F5FA18B1017819B1952010BDA8 +:10890000562010BD1D218460017000F0A7F90020E1 +:1089100010BD70B506461C461546084615F0E0FA2F +:1089200018B1017819B1952070BD562070BD8660D0 +:108930008585C4850B21017000F090F9002070BD81 +:1089400010B50C4615F098FA10B1017E012903D03C +:1089500017202080952010BDC08A2080002010BDE7 +:1089600010B500210170044681890448FCF7EEFA35 +:1089700004F16000BDE81040FEF7BCB89437020077 +:1089800070B5042817D11078052810D1B2F803501B +:10899000284600F095FC040009D01F2100F04DF995 +:1089A0000549002041F825002046FDF7A7FFBDE856 +:1089B000704000F053B970BD5C690020074910B5E4 +:1089C00000200870083106484860084601F0AAFEF9 +:1089D000BDE810400348FDF775B80000E80000202E +:1089E000818900003982000010B515F045FA002891 +:1089F00002D0007808B1002010BD012010BD70B574 +:108A000004461D460E46104600F05AFC002807D0CA +:108A1000666025812146BDE87040001DFDF708BF56 +:108A200070BD2DE9F0410646DDE906781C46154685 +:108A3000084615F055FA20B1017821B19520BDE81E +:108A4000F0815620FBE786600587878744873121C0 +:108A5000C0F84080017000F001F90020EFE700004D +:108A60000149012008707047E800002070B50546F4 +:108A70001446084615F034FA18B1017819B195205A +:108A800070BD562070BD856004872721017000F0FD +:108A9000E5F8002070BD0023AFF3008070B50646F6 +:108AA0001C461546084615F01BFA18B1017819B195 +:108AB000952070BD562070BD8660058744872921AA +:108AC000017000F0CBF8002070BD0023AFF30080F0 +:108AD00070B506461C461546084615F001FA18B151 +:108AE000017819B1952070BD562070BD866005874C +:108AF00044871121017000F0B1F8002070BD70B5FD +:108B000006461D461446084615F0EAF918B10178E4 +:108B100019B1952070BD562070BD8660A0F8444004 +:108B200015218564017000F099F8002070BD70B5C2 +:108B300005461446084615F0D3F918B1017819B165 +:108B4000952070BD562070BD856004870021418747 +:108B50000F21017000F082F8002070BD2DE9F04176 +:108B600007461D4616460846DDF8188015F0B8F988 +:108B7000040004D0207820B19520BDE8F081562073 +:108B8000FBE7A760A685E5852686658600206083CD +:108B90001022414604F11C00FBF756FC1320207004 +:108BA00000F05CF80020E8E72DE9F04107461D469B +:108BB00016460846DDF8188015F092F9040004D036 +:108BC000207820B19520BDE8F0815620FBE7A76012 +:108BD000A685E58526866586A4F81A80414604F1B7 +:108BE0001C0019F027F81320207000F037F800203F +:108BF000E9E700000149486070470000E8000020F4 +:108C00002DE9F04106461C4615460846069F15F01C +:108C100067F920B1017821B19520BDE8F081562097 +:108C2000FBE7866005878487002141871B21076455 +:108C3000017000F013F80020EFE770B504460078EB +:108C40000D46002808D02046FFF78AFE2946204618 +:108C5000BDE87040FEF7DEB970BD00002DE9F04FB1 +:108C6000002689B04FF01E094FF0040A4FF0020BA6 +:108C700037464FF00808CC4850F82640002C79D0F1 +:108C8000A089FCF719FF90B12278217EC7A0FCF7DC +:108C90005DF994F8510080B184F85170A0890123E6 +:108CA0008DF80890009702AA0421019792E0A0890C +:108CB00009B0BDE8F04FFCF702BF2078172801D0BB +:108CC0002B2818D1204614F039FFA18FC01E8842EE +:108CD00011DA204614F032FF0246A18FC1A0FCF742 +:108CE00035F92046FFF73CFE09B02046BDE8F04FBD +:108CF0000D21FEF78FB9606D04F078F905462178F3 +:108D0000C3A0FCF723F92078362833D2DFE800F03F +:108D10009E1B9E259E469E499E519E659E719E75F8 +:108D20009E779E799EA39EB69EB89EBC9EBE9EC117 +:108D30009EC39ECB9EED9ED39EDD9EE59EFE9EFC39 +:108D40009EBA9EFB9EFA84F800B0E08D0090A38D41 +:108D5000A2894FF42051102048E084F800A0608BD5 +:108D60004FF4205538B1ADF81C00E18D07AA8DE80D +:108D700006080AE06AE003A904F11C0015F00AFFE6 +:108D8000E08D102203A98DE80700A38DA289294652 +:108D90000620FCF7BFFF09B0BDE8F08F0620207069 +:108DA00001E084F8008009B02046BDE8F04F15F0DE +:108DB000BEBF84F80080A589A18DE08D8DF808A044 +:108DC000ADF80910ADF80B000097052302AA0421A5 +:108DD0002846019703F060FFDDE70C202070E08D4E +:108DE0000090A38DA28942F602010820FDF7DFF969 +:108DF000D1E70E202070228E60E010205CE012206F +:108E000064E014202070618B204639B1C28D00923D +:108E1000838DA2890820FDF7CAF917E000F11C0232 +:108E20008489818DC08D8DF80880ADF80910ADF86A +:108E30000B000DF10D01104615F0ACFE0097152347 +:108E400002AA04212046019703F026FF761C082E73 +:108E5000FFF411AF9FE716202070A089B4F84420DA +:108E60000E23A16C8DF808304FF6FF7303EA42021F +:108E7000CDE90012012302AA0421E5E718202DE024 +:108E80001A2044E0322042E01C2040E084F80090A8 +:108E900046E0202000E02220207009B02046BDE8F6 +:108EA000F04F15F03FBF2420207009B02046BDE8E8 +:108EB000F04F15F07CBF28202070228FA18909B0C7 +:108EC0000A20BDE8F04FFDF787B92A20207009B0CD +:108ED0002046BDE8F04F15F055BF2C20207009B09A +:108EE0002046BDE8F04F15F06DBF2620207004F13C +:108EF0004E000090B4F84C20A18902231220FDF707 +:108F0000B9FB48E726E011E008E0FFE72E202070DB +:108F100009B02046BDE8F04F15F019BF3020207091 +:108F200009B02046BDE8F04F15F00CBF16F060FA0E +:108F300000288FD034202070A86D216C01AB0091E7 +:108F4000394A15C3A38F228FD22105F1480016F0AC +:108F500059FA20E736202070A96DB4F80C90228FC2 +:108F6000B4F83C80D223266C8DF81030ADF8112077 +:108F7000059104F158000DF1140A06A915F016FE2A +:108F80000C20CDE902A0CDE90068032304AA042146 +:108F9000484603F0C9FE27702046FFF7E1FCA86DA4 +:108FA000401CA865F7E600005C6900202D20686180 +:108FB0006E646C655F7065726970686572616C5F24 +:108FC0006C6973742C206D747520737461746520E2 +:108FD00025752C20636C69656E74207374617465EB +:108FE00020257500676174745F636C69656E745FDA +:108FF00072756E3A2076616C7565206C656E202501 +:1090000075203E204D5455202575202D20330A0013 +:10901000676174745F636C69656E745F73746174A7 +:109020006520257500000000D56500002DE9F0479A +:1090300007461D46164689460846DDF8208014F08E +:109040001BFF0446007850B9484616F0BFFF0146A2 +:1090500060650AA0FBF77AFF606D002802DA9520B0 +:10906000BDE8F087A7602687A5873320C4F8408035 +:109070002070FFF7F3FD0020F2E700006C655F64ED +:1090800065766963655F6B6579206973203A30782E +:1090900025780A0070B50A4E0546002456F82400CB +:1090A000A84207D1A98907A0FBF750FF7F212846D6 +:1090B000FFF7C3FD641CA4B2082CEFD370BD000001 +:1090C0005C6900204741545420636C69656E7420CC +:1090D00074696D656F75742068616E646C652C20B1 +:1090E00068616E646C65203078253032780000004D +:1090F0002DE9F04106461C4615460846069F14F029 +:10910000EFFE20B1017821B19520BDE8F081562015 +:10911000FBE7866005878487002141872B21076450 +:109120000170FFF79BFD0020EFE770B506461D4676 +:109130001446084614F0D4FE18B1017819B19520F0 +:1091400070BD562070BDE90704D0A179C90601D4CD +:10915000982070BDA90704D5A179890601D499206A +:1091600070BD866061888185A188C185A0F84E5058 +:1091700023210170FFF772FD002070BD1CB5049C17 +:10918000CDE90034002300F001F81CBD2DE9F041C9 +:109190000646DDE906781C461546084614F0A0FE92 +:1091A00020B1017821B19520BDE8F0815620FBE780 +:1091B00086600587878744872D21C0F8408001702D +:1091C000FFF74CFD0020EFE71CB5049CCDE900340F +:1091D000002300F001F81CBD2DE9F0410646DDE951 +:1091E00006781C461546084614F07AFE20B1017830 +:1091F00021B19520BDE8F0815620FBE78660058708 +:10920000878744871921C0F840800170FFF726FD49 +:109210000020EFE72DE9F04106461C4615460846BA +:10922000069F14F05DFE20B1017821B19520BDE8C4 +:10923000F0815620FBE78660058784871721076445 +:109240000170FFF70BFD0020F1E7F8B51E4615464B +:109250000F4614F011FE040003D0207818B19520B9 +:10926000F8BD5620F8BD204614F068FCC01EA84288 +:1092700001DA9720F8BD0096A1892B463A46522084 +:10928000FDF7F8F9C0B2F8BDF0B50024234601257A +:10929000C65C002205FA02F73E4207D08C4203D199 +:1092A00002EBC300C0B2F0BD641CA4B2521CD2B227 +:1092B000082AEFD35B1CDBB2052BE9D3FF20F0BDFE +:1092C000082803D2024951F8200070470020704757 +:1092D0005C6900204278891A0844B0F8030070479E +:1092E0002DE9FC41164C18271E46D4F808C0BCF1E5 +:1092F000000F11D04978D9B12178002579B1FCF758 +:109300007DFB237862882570658002B0394630463F +:10931000BDE8F04115F08EBD03230022F5E70023E0 +:1093200000950195B0F8060102221946E04701E0D8 +:10933000FCF764FB192030700120BDE8FC810000BF +:10934000A40000202DE9FF4F87B01D46DDE914730E +:109350008946824600264FF0060B0124B0463A4665 +:1093600029463448FBF7EEFDDDE9161013F096FCB4 +:10937000BD4204D81DB1DAF82401009046E0012373 +:1093800051E06846FCF7F4FDBDF8080008B1A842BA +:109390003CD3B8423DD8CEB158B14FF420516846C5 +:1093A000FCF72FFE28B942F601016846FCF729FEBA +:1093B00060B1414620A0FBF7C5FD29F80480A41C3C +:1093C000A4B209990026201D884222D8BDF80800C1 +:1093D0005FEA00081AD068461599FCF712FEA8B19A +:1093E000BDF810201698824210D105991798FBF706 +:1093F00064F858B9BDF8081016A0FBF7A3FDBDF836 +:10940000081029F80410A41CA4B201260098002812 +:10941000B7D1012C06D0072189F8001020460BB0E7 +:10942000BDE8F08F0A232A465946484615F002FD4A +:10943000F5E70000E8350200456E64206F6620679E +:10944000726F75702C2068616E646C6520307825B1 +:1094500030347800426567696E206F662067726FEE +:1094600075702C2068616E646C652030782530340E +:10947000780000002DE9F04F87B09346109F884692 +:1094800081461E464FF0040A012400253A4619463B +:1094900028A0FBF757FDBE4204D81EB1D9F824011D +:1094A000009033E001233EE06846FCF761FDBDF823 +:1094B000080070B3B8422CD8B04227D3BDF80610CC +:1094C000880501D5102000E00220012C02D9A84215 +:1094D00021D109E008D10546880501D5022100E027 +:1094E000012188F8011002246019801C584510D809 +:1094F000BDF8081028F80410A41CA4B208EB04005E +:109500002A460399FAF7A0FF601984B20098002850 +:10951000CAD1012C06D0052088F80000204607B0EB +:10952000BDE8F08F0A2332465146404615F082FCD2 +:10953000F5E700004154545F46494E445F494E46AA +:109540004F524D4154494F4E5F524551554553542A +:109550003A2066726F6D202530345820746F2025B4 +:10956000303458002DE9F04F2C4C8346B1F80150AF +:10957000B1F803A0A06889B0984691460E46162718 +:1095800058B12A4602A95846FCF7DBFB38B1BDF8B2 +:109590000E00010701D5C00503D403231DE00123FC +:1095A0001BE002A95846FDF733F808B1034614E062 +:1095B000A9F10500711D80B2CDE90010D4F808C0F2 +:1095C000BBF80601534601222946E04710F0FF038D +:1095D00019D0072B09D00D2B07D02A463946404613 +:1095E00015F028FC09B0BDE8F08F0D2B02D0072B39 +:1095F00006D008E020780D2805D02370658002E0B1 +:1096000020780028F9D04A4631464046FAF71CFF38 +:10961000172188F800104846E4E70000A400002065 +:109620002DE9F04387B016460E9D0C460746994635 +:109630004FF00C082A46194621A0FBF783FC4A4646 +:1096400001A93846FCF77DFB28B1BDF80A00800768 +:1096500003D4022307E0012305E001A93846FCF703 +:10966000D7FF030007D04A464146204615F0E2FBEB +:1096700007B0BDE8F083B7F8061101A8FCF7B2FF08 +:10968000BDF81400A84201D20723ECE7401C401BA0 +:10969000B04203DD7019401EADF81400B7F80601A2 +:1096A0000090BDF81400621C401B83B2294601A83B +:1096B000FCF7E0F9401C0D2180B22170D8E70000D2 +:1096C0004154545F524541445F424C4F425F5245C2 +:1096D00051554553543A2068616E646C65202530BD +:1096E00034782C206F666673657420257500000041 +:1096F0002DE9FF4F89B00024DDF858901020CDE906 +:1097000006041E468A460125A0460894A3464A46FA +:10971000314645480B9BFBF715FCDDE9171013F0AC +:10972000BDFA4E4513D896B1DDE91707022810D0CF +:10973000384601F099FF40B1B7F80C004FF42057BC +:10974000B84208D0791C884205D0102366E0012376 +:1097500064E03888F2E70998D0F82401009050E0DE +:109760006846FCF705FCBDF8080008B1B04248D3D4 +:10977000484549D8B8F1000F23D050B13946684662 +:10978000FCF73FFC28B942F601016846FCF739FCBA +:10979000B8B108992AF80510AD1CA8B22AF800B093 +:1097A000801C85B20AEB0500221F0799FAF74CFED0 +:1097B0002819001F85B20B9829194FF00008814223 +:1097C00022D8BDF808005FEA000B1AD0DDE91721A6 +:1097D0006846FCF7F1FBA0B1BDF81000001D80B297 +:1097E000012D02D9A04211D104E003D104468AF828 +:1097F00001000225BDF80800089005984FF0010807 +:10980000079000980028ABD1012D06D011208AF8CE +:10981000000028460DB0BDE8F08F0A2332465046BE +:10982000069915F007FBF5E7303602002DE9FF4FEA +:1098300087B08846149F81464FF0000A1D464FF0BE +:10984000080B012456463A4619463FA0FBF77AFB1F +:10985000DDE9151013F022FABD4204D81DB1D9F884 +:109860002401019058E0012362E001A8FCF780FB8D +:10987000BDF80C00E8B3A8424ED3B8424FD8DDE99A +:10988000152101A8FCF798FBA0B3BDF80A008007DA +:1098900003D47EBBBDF80C603EE001A94846FCF74E +:1098A000B7FE030002D0012C3BD841E0B9F8061105 +:1098B00001A8FCF797FEBDF81400801C80B2012CB3 +:1098C00002D982452DD104E003D1824688F80100F7 +:1098D0000224099804EB0A01814207D9022C20D8FE +:1098E000001FADF81400801C88F80100BDF80C10B2 +:1098F00001E014E010E028F80410B9F80601A41CF7 +:109900000090A4B2BDF8143008EB0402002101A8B5 +:10991000FCF7B0F8204484B201980028A5D1012CAE +:1099200008D9092188F8001020460BB0BDE8F08F57 +:109930002A4602E036B1022332465946404615F027 +:1099400079FAF2E70A23F3E74154545F5245414460 +:109950005F42595F545950455F52455155455354E4 +:109960003A2066726F6D202530345820746F2025A0 +:109970003034582C20747970653A20002DE9FF4F5F +:1099800087B0884683461F464FF00E0901241946CA +:1099900024A0DDF850A0FBF7D5FA00253BE000BF7E +:1099A0003AF815605EB1324601A95846FCF7C9F98C +:1099B00028B1BDF80A00800703D4022307E0012381 +:1099C00005E001A95846FCF723FE030007D0324604 +:1099D0004946404615F02EFA0BB0BDE8F08FBBF8B3 +:1099E000061101A8FCF7FEFDBDF814000119099845 +:1099F000814202D9401EADF81400BBF80601009068 +:109A0000BDF8143008EB0402002101A8FCF732F87D +:109A1000204484B26D1CBD42C2DB0F2188F80010C7 +:109A20002046D9E74154545F524541445F4D554C5F +:109A30005449504C455F524551554553543A206E58 +:109A4000756D2068616E646C65732025750000007B +:109A50002DE9F04387B015460C46064699464FF06F +:109A60000A081A4601A9FCF76CF9074649461BA0EB +:109A7000FBF768FA2FB1BDF80A00800703D4022370 +:109A800007E0012305E001A93046FCF7C1FD030012 +:109A900007D04A464146204615F0CCF907B0BDE84C +:109AA000F083B6F8061101A8FCF79CFDBDF8140080 +:109AB000401CA84202D96D1EADF81450B6F806013C +:109AC0000090BDF81430621C002101A8FBF7D2FF02 +:109AD000401C0B2180B22170E0E700004154545F2C +:109AE000524541445F524551554553543A206861AF +:109AF0006E646C6520253034780000002DE9F0415B +:109B0000154F8046B1F80150B86888B016460C462B +:109B100000281ED02A4602A94046FCF712F9002868 +:109B200017D0BDF80E00C10513D5400711D502A905 +:109B30004046FCF76DFD00280BD1F61EE41CB0B2C8 +:109B4000CDE900400023BC68B8F806011A46294652 +:109B5000A04708B0BDE8F081A40000202DE9F0473F +:109B6000B1F8015088B090460C461E4681464FF031 +:109B7000120A2A4602A9FCF7E4F850B1164FB86859 +:109B800028B1BDF80E00010701D5C00503D4032399 +:109B900016E0012314E002A94846FCF739FD030052 +:109BA0000ED1A8F1030080B2E41CCDE90040BC68EE +:109BB000B9F806011A462946A04710F0FF0307D05E +:109BC0002A465146304615F035F908B0BDE8F08711 +:109BD000132030700120F8E7A4000020AFF30080CC +:109BE0002DE9F0411E4F002600F1130497F82410D0 +:109BF0003546491C87F82410017CB9B1012923D0CE +:109C0000032917D0042925D040F2931215A1002072 +:109C1000FBF7EAFE0E202070E81C607097F8240025 +:109C2000A070A4F80360681DBDE8F0818068114948 +:109C30001A3804E080681049A0F540302B3801EB59 +:109C4000C00046884578E5E780680C49A0F580307B +:109C50001A38F4E780680A49A0F10410EFE7000021 +:109C6000D4780020626C655F686369635F6D7367B9 +:109C70002E63000098430200384402003845020079 +:109C8000304602002DE9F0411F4F054600F1120455 +:109C900097F824000026401C87F82400287CC0B1D7 +:109CA000012820D0032817D0042824D040F24732BE +:109CB00016A10020FBF798FE0F2020700420607092 +:109CC000287EA07097F82400E070A6800620BDE8EA +:109CD000F0811249A86801E01149A86801EBC000B1 +:109CE00030F8CE6CE8E70F49A86801EBC000A0F59A +:109CF0000020CE3806E00C49A86801EBC000A0F5B2 +:109D000000101E380688D7E7D4780020626C655FA3 +:109D1000686369635F6D73672E6300009843020098 +:109D20003844020038450200304602001A2101750D +:109D3000012141750320704710B5837E4FF6FF74F3 +:109D400004EA0333048B016AC4F30B04828B2343BC +:109D50008B82808BC882101D10BD05228275042263 +:109D6000C275428BA0F81920017FC176062070478A +:109D700008230178002200F045B8000010B50488DF +:109D8000A0F11801082C04D2012202EB0422CA60BF +:109D900013E0084613F014F90623012205210948AF +:109DA00013F0FAF90849B1F8382191F83A1142EA6A +:109DB00081210180022181708480BDE8104013F070 +:109DC0004BBB00002F000100D4780020FF21C170A0 +:109DD0000021817113F040BBFF21017100218171CD +:109DE00013F03ABBFF21417000218170FFF7EEBFF5 +:109DF00008230188042200F005B8FF21C170FFF795 +:109E0000EBBF000070B5044618381546994207D2DA +:109E100042EA0121C1602046BDE8704013F01CBB3E +:109E200013F0CEF806484222B0F8381190F83A0103 +:109E300041EA802081B22846BDE8704000F014BBA2 +:109E4000D4780020082282750422C275428BA0F8C3 +:109E50001920017FC17606207047302181750321CA +:109E6000C17500F11901408B08800520704700F092 +:109E7000D6BB00F0D3BBF0B58FB0044610F8011B81 +:109E80008DF8001001788DF8011041788DF80210DE +:109E900050F8021FCDF803108188ADF8071000229A +:109EA0008579C01D114601276B4607FA01F62E423F +:109EB00005D002EB02161E44521C7172D2B2491C2C +:109EC000C9B20229F1D9002515E005EB05111944A5 +:109ED00006884E8146888E818688CE81C6880E820D +:109EE00006894E8246898E828689CE82C689103046 +:109EF0006D1C0E83EDB29542E7D3032005E002EB23 +:109F000002111944521C4872D2B2032AF7D33C22E0 +:109F100069462046FAF798FA204613F09DFA0FB0EA +:109F2000F0BD0000084A00F1130113785B1C1370A8 +:109F30000E23C3740423037512784275028BC28208 +:109F4000807E487106207047F87800200A4A00F1A8 +:109F5000130113785B1C13700E23C374062303755F +:109F600012784275028BC282827E0276B0F81B00A4 +:109F7000C880082070470000F8780020084A00F1E7 +:109F8000130113785B1C13700F23C3740423037530 +:109F9000837E437512788275008B88800620704717 +:109FA000F878002070B500230B4D04466322981802 +:109FB00000EBD070411001EB410005EB80000688FA +:109FC000A64208D002D9A1F1010201E001F101038A +:109FD0009342ECDD002070BDE83E0200B0F80310B3 +:109FE0008180B0F80510C18013F036BA30B4017822 +:109FF0000BE000BF00EB810232F8034D20F8114066 +:10A00000538800EB4102491E13820029F2DC30BC68 +:10A0100013F022BA102181750121C1750320704708 +:10A0200010B500220F49052012F0DAFE0E4C206810 +:10A0300008B9A06800B1012040F20E520BA1FBF755 +:10A04000D3FC0020E0620A2084F8240000F016F817 +:10A0500005481830FCF7D0FDBDE810400649042043 +:10A0600013F02ABAD83E0200D4780020626C655FF3 +:10A07000686369632E63000025A600000348002181 +:10A08000418001704171C16070470000F478002088 +:10A090002DE9F0418CB000F118063E2100F8161FA2 +:10A0A000451C041D022096F80180287000272FE02F +:10A0B00007EBC70000EB47108119891C292268466D +:10A0C000FAF7C2F99DF8000020709DF80100607059 +:10A0D000DDF8020044F8020FBDF80600A0809DF8EC +:10A0E0000810A171E41D00206A4605E01318401C09 +:10A0F0005B7A04F8013BC0B28142F7D89DF8280092 +:10A1000004F8010B287808440A307F1C2870FFB23D +:10A110004745CDD328780CB0801CBDE8F08157218D +:10A12000C17400F11802022100F8141F411C1088AC +:10A130000880042070473E2181751321C1751520C8 +:10A1400070473E2181750A21C1750C2070473E225F +:10A15000C2740B220275027E4275428BC282028C4F +:10A160000283418C41830D2070473E2181750D2172 +:10A17000C175418B00F11802A0F819101B300021A5 +:10A180005318491C1B79C9B200F8013B0829F7D3C1 +:10A19000918901800F2070473E228275C175881C0D +:10A1A00070470621FFF7F8BF0421FFF7F5BF242110 +:10A1B0000D22095C02EB4101C9B2FFF7EDBF252179 +:10A1C0000E22095C02EB4101C9B2FFF7E5BF042191 +:10A1D000FFF7E2BF1F21FFF7DFBF312200F11601B9 +:10A1E000105C3E221A30C0B20A704870801C704762 +:10A1F0000621FFF7D1BF1421FFF7CEBF1021FFF7D3 +:10A20000CBBF0321FFF7C8BF00F11601C07F3E227C +:10A210000830C0B20A704870801C70470B21FFF7ED +:10A22000BBBF0921FFF7B8BF0121FFF7B5BF00F1A0 +:10A2300018014A1CB0F819101180FFF7D1BC30B4D6 +:10A2400000F11801438BA0F819300A46CB1C0021FD +:10A250005418491C2479C9B203F8014B0529F7D3D6 +:10A2600030BCFFF7BDBC3E2181750C21C1750E20AD +:10A27000704700F118014A1C418B1180FFF7B0BCF8 +:10A280007CB515460D4A41F65154012809D00228E3 +:10A290000DD0042804D1CDE9003200238A1CA04748 +:10A2A0007CBDCDE900320123CA1C1846F7E7CDE991 +:10A2B00000320A1D2B460220F1E70000354F000056 +:10A2C00070B5044603790D4D90F90500E18804F15D +:10A2D0001802022B04D02B68BDE8704010441847C8 +:10A2E00093681688184418300A466D68014630464F +:10A2F000A8472046BDE8704012F062BED478002026 +:10A3000030B500F11601027E13200870012000EB29 +:10A3100082008B1C4870C91C002008E003EB40043D +:10A3200065880D80648A4C80091D401CC0B2904233 +:10A33000F4D39000C01C30BD10B50820FCF7F2F932 +:10A34000002010BD10B504460B48006840B1FAF774 +:10A3500079FB2046FFF7B4FFBDE81040FAF77CBB5D +:10A360000548002221461830FCF726FCBDE81040C5 +:10A37000042013F0C3B80000D4780020B0F81930DE +:10A38000A0F81930838B8383C28BC283FFF728BC6C +:10A3900000F118010A46491DD3880B8012894A80B2 +:10A3A000FFF71EBC0C2282750822C275428BA0F8F2 +:10A3B0001920027FC276C28B8283018CC1830A205E +:10A3C0007047438BA0F81930027FC276FFF708BCB4 +:10A3D000438BA0F81930027FC276FFF701BC000062 +:10A3E00070B50C460546FF2201231146002012F0ED +:10A3F000D3FE0D4BA0F118011A78521C1A700F22CF +:10A4000000F8062D0422427085701B78C370047119 +:10A41000230A43710A71FA2048710620C880BDE8FA +:10A4200070400846FFF78EBFF87800202DE9F04114 +:10A4300007460C4601201D46164600EB04210C235E +:10A4400005220848DDF8188012F0A6FE048005B148 +:10A4500001268670A0F804808760BDE8F04112F004 +:10A46000FBBF00000F00010070B514460D46024608 +:10A4700003230521044812F08FFE05808470BDE897 +:10A48000704012F0E9BF00000200050070B51D46E3 +:10A4900014460E46052302461946054812F07CFE76 +:10A4A00006808470A0F80350BDE8704012F0D4BF5D +:10A4B0000400050070B514460D460246032305212D +:10A4C000044812F069FE05808470BDE8704012F007 +:10A4D000C3BF00000300050070B5A1F11804A0F58A +:10A4E0008031373907D12046FFF726FCE080022073 +:10A4F0002071FC2017E0010C0425062923D2DFE897 +:10A5000001F003142206191D1A38144903E0A0F5BE +:10A51000403013492B3801EBC0062046716888474C +:10A52000E08025713078607112E0A0F580301A3833 +:10A530000C49F0E7A0F104100B49ECE7A0F5A020CE +:10A54000801E0A49E7E78C2209A10020FBF74CFA9C +:10A550002046FFF7F7FE012070BD0000984302007F +:10A560003844020038450200304602001846020016 +:10A57000626C655F686369635F7461736B2E63000F +:10A580002DE9FF41044610F8011B8DF800100178F9 +:10A590008DF8011000224578801C114601276B467A +:10A5A00007FA01F62E4206D002EB420603EB4606FE +:10A5B000521CB170D2B2891CC9B20229F0D9002153 +:10A5C0000EE000BF01EB410503EB450510F8016B00 +:10A5D000EE700688AE804688001D491CEE80C9B228 +:10A5E0009142EFD3032006E002EB420103EB41016D +:10A5F000521C8870D2B2022AF6D30E221946204687 +:10A60000F9F722FF204612F027FFBDE8FF81000086 +:10A61000014AC2E900017047D47800207047012048 +:10A62000704700002DE9F047042012F08DFBDFF8A1 +:10A63000B8804FF0000908F1180634686CB1E08862 +:10A64000401C87B2B8F82200B8421CD33046FCF751 +:10A65000E3FA2079022807D00FE0A8F82290BDE89D +:10A66000F0470220FCF75EB8206A417921F0200112 +:10A670004171C17921F08001C171204612F0A0FC26 +:10A68000A8F82290D9E72179022907D094F905305A +:10A6900004F118029D186D1E30B10EE094F90530DA +:10A6A000226AD5181835F6E72970207900B1012003 +:10A6B00040F2EF420DA1FBF797F90220FCF758F8A2 +:10A6C00044460BE0A1682069884700280AD1608CC5 +:10A6D000295C401C6084D4E903209047608CB84218 +:10A6E000ABD2EFE7BDE8F087D4780020626C655FFD +:10A6F000686369632E630000094A00F1130113784F +:10A700005B1C13700E23C374062303751278427505 +:10A71000028BC282827E0276808BC88008207047BE +:10A72000F87800200146024800683830FCF78BB802 +:10A73000BC3702000149096888637047BC370200D2 +:10A7400000B500F013F9002805D08069810401D418 +:10A75000400401D5012000BD002000BD084910B50E +:10A76000096802200968096911B18847002804D0E6 +:10A7700000F09AFB002801DD012010BD002010BD73 +:10A78000BC370200FFF7EABF10B50B4C2068006829 +:10A79000016919B10120884700280BD0206890F882 +:10A7A000521006A0FAF7D3FB206890F85200002858 +:10A7B00000D0012010BD0000BC370200636D642092 +:10A7C0007061636B657420307825780A00000000A2 +:10A7D00070B5094C2568143507E020681621408BB8 +:10A7E00000F05EF9284600F0E7FD20681430F4D14F +:10A7F000BDE8704000F06EBBBC3702002DE9F047A9 +:10A800004FF0000415460F000646A0467DD10020FB +:10A81000BDE8F08744284FD00EDC342828D006DC71 +:10A82000312816D0322814D0332832D120E04128E4 +:10A8300078D042282DD12DE04E284CD004DC45287C +:10A8400042D0482825D104E0502864D056287CD135 +:10A8500071E035F8040B1FFA80F806F804803878A8 +:10A86000641C322801D048286FD14FEA18200EE02E +:10A8700001CD3055641CC0F307213155641CC0F371 +:10A88000074131553978641C34295ED1000E3055AA +:10A89000641C5AE001CD41793155641C0179315570 +:10A8A000641CC1783155641C81783155641C417831 +:10A8B0003155641C0078EAE701CD3119083402688B +:10A8C0000A604068486040E002CD3019F022F9F794 +:10A8D000BBFDF03439E055F804AB5046F9F7E6FD1E +:10A8E0001FFA80F9B9F1F80F01D94FF0F8093019C2 +:10A8F0004A465146F9F7A8FDB9F1F80F09D204EB21 +:10A900000900C9F1F801304401E01FE00AE0F9F75D +:10A91000C2FDF83419E002CD30191022F9F794FD88 +:10A92000103412E002CD08F0FF023019F9F78CFD67 +:10A9300008F0FF0008E0301902CD814610F8012C24 +:10A94000F9F782FD19F8010C04447F1C38780028BF +:10A950007FF460AFA0B25BE70FB410B504AA03990F +:10A96000FFF74CFF10BC5DF814FB0000082805D26F +:10A970000349096801EB8000406970470020704777 +:10A98000BC37020038B50446FCF7B2F8616B42F2FE +:10A9900010721144884210D90848007800280CD160 +:10A9A00073208DF8000002208DF80100E088ADF8DA +:10A9B00002000421684600F087F838BDF800002046 +:10A9C0004FF0FF314180018070470000B0F9021064 +:10A9D000B0F90020914205D0082901DA0120704722 +:10A9E00000207047491C4180074A07E0136803EBC9 +:10A9F00081035B69002BF1D1491C4180B0F9021041 +:10AA00000829F3DBECE70000BC37020010B5044670 +:10AA1000B0F90200B4F90010884204D12046FFF7D3 +:10AA2000D5FF002804D0B4F90200082801DB00207B +:10AA300010BD03492080096801EB8000406910BD0A +:10AA4000BC3702000149012008707047F80000205F +:10AA500000B5FFF78BFF002803D0418A41F00801C1 +:10AA6000418200BD30B4044C2468002C02DB30BCB1 +:10AA700013F0A6B930BC7047FC000020074A30B480 +:10AA80001268546B002C06D00B46A44602460021E7 +:10AA900030BC0220604730BC70470000BC37020069 +:10AAA0001CB505228DF8002004228DF8012000221B +:10AAB0008DF80220ADF803008DF8051006216846D8 +:10AAC00000F002F81CBD0000FEB506460B480D461E +:10AAD000016868463831FBF7DEFE08E06846FBF7A0 +:10AAE000E0FE002144682B4632460420A047684619 +:10AAF000FBF7C2FE0028F1D1FEBD0000BC3702000A +:10AB000008B562208DF8000000208DF801000221B8 +:10AB10006846FFF7D9FF08BD08B512F0D7FF014618 +:10AB200008A0FAF714FA61208DF8000001208DF8D2 +:10AB3000010012F0CBFF8DF8020003216846FFF7F9 +:10AB4000C3FF08BD4254535441434B5F4556454EE5 +:10AB5000545F4E525F434F4E4E454354494F4E5300 +:10AB60005F4348414E474544202575007CB5044667 +:10AB700002460D4608A0FAF7EAF9E0208DF8000039 +:10AB800003208DF80100ADF802408DF80450052136 +:10AB90006846FFF799FF7CBD6863695F656D6974FE +:10ABA0005F73656375726974795F6C6576656C2037 +:10ABB000257520666F722068616E646C652025784B +:10ABC0000000000038B50B4C206890F868100AA00F +:10ABD000FAF7BDF960208DF8000001208DF8010022 +:10ABE0002068032190F868008DF802006846FFF79E +:10ABF0006BFF38BDBC3702004254535441434B5F96 +:10AC00004556454E545F5354415445202575000028 +:10AC10000FB438B50498416801B101210E4A00888B +:10AC20001268126853696A469847044600980028DB +:10AC30000DD00498416821B164B105AA2046FFF700 +:10AC4000DDFD2146009A049800F07EFB002038BC10 +:10AC50005DF814FB5620FAE7BC37020010B5FB2163 +:10AC600001805F218170002100F8031F6022417084 +:10AC70008170C1700271417140228271C1711649A7 +:10AC80000A6882604968C16014490C46B1F85221D3 +:10AC90000282B1F85421428204F18002436944F8EF +:10ACA000DC3F83696360C3F3407381F8EC30C169B2 +:10ACB0005166016A9166416A1167816A5167102184 +:10ACC00000F82C1F40F27261A0F801100821C17039 +:10ACD0000521017110BD0000743E02003075002096 +:10ACE00070B5104C0E460546E0212068F9F7D3FBFD +:10ACF0002068056020684660E9680B48884721683D +:10AD0000002081F868002268084911642268012146 +:10AD100082F88A10226882F85110216881F88C002C +:10AD200070BD0000BC37020009DB01000C027A0094 +:10AD300040F2112202A10020FAF756FE72B6FEE799 +:10AD40006863692E6300000010B501780E2927D1D1 +:10AD5000144CB0F80300216891F96910491C1FD107 +:10AD600018B11149098881421AD12168002081F85F +:10AD70006900216881F8DE0020686C30FBF7BAFEBC +:10AD800000F0A0FA2168012081F869002168022002 +:10AD900081F86800FFF716FFBDE8104000F09EB98B +:10ADA00010BD0000BC370200783A020010B5FFF772 +:10ADB000EBFC104C0246206890F969100EA0FAF7DF +:10ADC000C6F8206890F96900B0F1FF3F10D1206803 +:10ADD000154A6C3081210446FBF7AAFE0022134974 +:10ADE0002046FBF7BDFE2046BDE81040FBF772BED3 +:10ADF00010BD0000BC3702006863695F696E69744A +:10AE000069616C697A696E675F72756E3A207375F5 +:10AE10006273746174652025752C2063616E2073E4 +:10AE2000656E642025750000400D030031AD000003 +:10AE300002F0D2B902F011B900487047083E020092 +:10AE40000248006890F8DE0070470000BC3702003E +:10AE5000044909685E3102D008B101207047002022 +:10AE600070470000BC37020000B50A46FFF77EFDC0 +:10AE7000002804D090F8810010B10AB1012000BD73 +:10AE8000002000BD02480068B0F854007047000080 +:10AE9000BC3702000348006890F85C00C0F38010E3 +:10AEA00070470000BC37020010B5094C002108466D +:10AEB000D4F8003003EB8002526912B192F84020BE +:10AEC0001144401C0828F5DB93F85300401A10BDCC +:10AED000BC37020070B52C4C05462946206890F816 +:10AEE00068202AA0FAF733F820680522022190F89A +:10AEF00068600320062E40D2DFE806F003101C2015 +:10AF0000302C35B3012D38D100F078F804002ED064 +:10AF1000014628A0FAF71BF8204670BD25B1012D87 +:10AF20002BD0022D29D102E000F054F825E000F0EA +:10AF30008BF822E0F5B1012D03D11EE04DB1012DBA +:10AF400015D0022D19D1206880F86820206880F87B +:10AF5000691012E075B1012D0FD108E055B1012D36 +:10AF60000BD12068C06810B1006900B1804700F0C3 +:10AF70007BF802E0216881F86800FFF723FE00F00B +:10AF8000ADF8002070BD0000BC3702006863695F47 +:10AF9000706F7765725F636F6E74726F6C3A2025A5 +:10AFA000752C2063757272656E74206D6F646520F8 +:10AFB000257500006863695F706F7765725F636F06 +:10AFC0006E74726F6C5F6F6E2829206572726F727B +:10AFD0002025750010B5084C2068006880688047FF +:10AFE0002068C06810B1806800B1804721680020E7 +:10AFF00081F8680010BD0000BC37020070B5114C2C +:10B000002068C06820B1406810B18047050012D1A7 +:10B0100020680068016811B120684068884720688E +:10B02000006840688047050009D02068C06810B1FA +:10B03000806800B18047FFF763FD284670BD00209F +:10B0400070BD0000BC37020010B5064C2068C06817 +:10B0500010B1C06800B180472168042081F8680001 +:10B0600010BD0000BC37020006480121026882F8CA +:10B070005210026882F868100068FF2180F8691099 +:10B0800070470000BC3702000149096848637047F7 +:10B09000BC37020000B5FFF769FC002800D0C07D76 +:10B0A00000BD00002DE9F0410B4D07462868C46B38 +:10B0B0000AE0266827B12968E06809688969884735 +:10B0C0002046FBF719FC3446002CF2D129680020F9 +:10B0D000C863BDE8F0810000BC37020070B54B4D7D +:10B0E000286890F88C0020B12968002081F88C0035 +:10B0F00070BD0021286800EB81004069B8B3428A26 +:10B10000D30706D091B221F001014182C1884048A5 +:10B110001CE0130706D591B221F008014182C188D5 +:10B12000052209E0D30609D591B221F0100141F4BE +:10B1300080714182C1881322364814E0930609D5F4 +:10B1400091B221F020014182C1883348BDE87040AE +:10B15000FFF75EBD52060AD5418A012221F0400167 +:10B160004182C1882D48BDE87040FFF751BD491CA0 +:10B170000829BFDB00F050F9286890F86800012822 +:10B180000ED022490C68143403280DD00528AFD105 +:10B19000286890F9690002281ED00428A8D12FE061 +:10B1A000BDE87040FFF702BE9CB1E588FFF7ECFAFE +:10B1B00000289DD02A46214619A0F9F7C8FE16217D +:10B1C0002846FFF76DFC204600F0F6F813222946CA +:10B1D000B2E7FFF7FFFE15E094B1FFF7D5FA0028BC +:10B1E00086D0E288214619A0F9F7B1FEE188132242 +:10B1F0000848FFF70DFD2046BDE8704000F0DCB8C0 +:10B20000FFF722FFBDE87040FFF7DCBCBC3702004F +:10B21000683A0200503A0200583A0200603A0200CE +:10B220004843495F53544154455F48414C54494E4B +:10B23000472C20636F6E6E656374696F6E20257096 +:10B240002C2068616E646C65202575004843495F59 +:10B2500053544154455F46414C4C494E475F41531E +:10B260004C4545502C20636F6E6E656374696F6E3C +:10B270002025702C2068616E646C652025750000A7 +:10B280000FB42DE9F0410D460646FFF76FFB0400B1 +:10B290000BD00B4809ABBDF8202000682946006898 +:10B2A000076A3046B84720B15720BDE8F0015DF885 +:10B2B00014FB14F8400F401C20700020F5E700003C +:10B2C000BC37020000B58DB034216846F9F7E3F8C9 +:10B2D0004FF0FF30CDF817008008CDF81B004FF479 +:10B2E0000000CDF81F001648CDF827006846FFF78C +:10B2F000B5FC1448BDF800100268A2F854100268AA +:10B300009DF8021082F853100168DDF8032041F81F +:10B31000562FDDF807204A600168DDF80B2041F860 +:10B320005E2FDDF80F204A600268BDF81310A2F806 +:10B33000DA100068BDF81510A0F8DC100DB000BDE3 +:10B340007FFEFF00BC3702002DE9F041144C0F4690 +:10B350000546206821681646B0F88600C96B084388 +:10B36000206812D090F8520000B1401E216881F888 +:10B3700052001020FBF7BEFA021D0146E0C2206811 +:10B38000BDE8F0413C30FBF75EBA00683146C26967 +:10B390003846904721682888A1F88600BDE8F081EA +:10B3A000BC37020003490A68D0600968026849682E +:10B3B00008461047BC37020010B50446FBF772F987 +:10B3C0000246E1880AA0F9F7C2FD04F11C00FBF770 +:10B3D00091FB2046FBF798FA0E4AE188002012689C +:10B3E00002EB81014861BDE81040FFF795BB00000A +:10B3F000436F6E6E656374696F6E20636C6F736507 +:10B40000643A2068616E646C6520307825782C2061 +:10B4100025730000BC3702000F4810B50168B1F871 +:10B420008610002917D10168CC6B002C13D002685C +:10B430002168D163616802680988A2F886100068F3 +:10B44000D4E902120068C369104698472046BDE857 +:10B450001040FBF751BA10BDBC370200024800682B +:10B46000B0F8660070470000BC37020030B589B004 +:10B470000525144601950C9A06250DF10C0C029534 +:10B480000692ACE81900ADF81C1010490978C907FC +:10B4900005D0C0B2012300222146FEF7F1FE0C4880 +:10B4A00000235A1E6946006817F0B8F844B2012C10 +:10B4B00008D00020382207A1FAF796FA012C03D011 +:10B4C00072B6FEE70120F5E709B030BD00000020AC +:10B4D00008000020636F6E74726F6C6C657274612B +:10B4E000736B2E630000000008B5009313460A46F4 +:10B4F00001460220FFF7BAFF08BD0000F8B5044678 +:10B50000094815460E460078400704D56278207831 +:10B51000A11C16F065F9334622460021042000954F +:10B52000FFF7A4FFF8BD00001C00002070B5084A1A +:10B5300005460C461278D00703D00122284601F0B8 +:10B5400013FE21462846BDE8704001F077BE00009A +:10B550000000002010B50020F9F748FC0120F9F7A1 +:10B5600045FC0020F9F75AFC0120F9F757FC0720A9 +:10B57000F9F754FCBDE810401320F9F74FBC000068 +:10B580000149086070470000F0010020002070476A +:10B590000020704750F831201AB100EBC10040681C +:10B5A000104700207047000010B5114B0C461049A1 +:10B5B00053F8303001EBC00112B172B60BB907E09D +:10B5C00023B149682046BDE810401847002010BD4F +:10B5D000052806D007280AD1214606A0F9F786FCDF +:10B5E00005E00648D0E9001205A0F9F77FFCFEE768 +:10B5F000A00400206F6F6D2564000000140000207F +:10B600005B4552525D4025733A25640001B5002226 +:10B6100069461046FFF7C8FF08BD70B5022100203B +:10B62000F9F714FC02210120F9F710FC022460B2A2 +:10B6300003210546F9F70AFC2846F9F7E3FB641CE9 +:10B64000E4B21C2CF3D970BD182804D018B101281D +:10B6500001D00020704701207047C068884201D1A6 +:10B66000012070470020704710B504460C2208499D +:10B67000F8F723FF38B9064902220E3104F10E0013 +:10B68000F8F71BFF08B1002010BD012010BD00001D +:10B69000683502000348026812B141680020104773 +:10B6A00000207047B804002070B5B1F80140058F44 +:10B6B000B1F80330A54209D1448F9C4206D1006CF9 +:10B6C000521F2044491DF8F7F8FE08B1002070BD54 +:10B6D000012070BD074910B5496919B10548FBF74C +:10B6E00042FA01E0002804D0BDE81040002000F03C +:10B6F0000FB810BD5C6E002008B5002000906946B0 +:10B70000024800F0D1F8009808BD0000716D0000FB +:10B7100004480268002A03D04FF4806102481047B1 +:10B72000704700000C0100205C6A002010B50C4638 +:10B7300000F09EF8002804D014B10178891E218001 +:10B74000801C10BD2DE9F0410F46804600221349B0 +:10B750001348FBF705FA41F2883240F681011048A0 +:10B76000FBF7E6F90F4C0025A61C258047B14FF4E6 +:10B7700080612046B847208840F2FD31884204D8D5 +:10B7800020888555FFF7B8FF00B12580208806493D +:10B790008555C1F80080BDE8F081000011B70000B8 +:10B7A0005C6E00205C6A00200C0100202DE9F0474F +:10B7B00016468A468146FD2A15DC00F059F8B41C6D +:10B7C00050B10178A14205D132465146801CF8F7AC +:10B7D0003BFE20E000F032F8114940F2FD330888CA +:10B7E00002199A4202D90120BDE8F0870C4F884621 +:10B7F000BF1CC51932462C7085F801905146A81C13 +:10B80000F8F722FEB8F800002978084480B2A8F8BA +:10B8100000000021C15500F03BF80020E4E70000E3 +:10B820005C6A002010B500F023F8002805D000F075 +:10B8300005F8BDE8104000F02BB810BD10B5074C5E +:10B840000278238811189A1A92B22280F8F7FCFD28 +:10B8500000212288A01C115410BD00005C6A002049 +:10B86000024800210180817000F012B85C6A00205B +:10B8700010B50649034608460A7822B144789C422E +:10B8800002D01118F7E7002010BD00005E6A00200A +:10B8900003484069002802D00148FBF73BB97047D4 +:10B8A0005C6E0020FFF7F4BF2DE9F041094D0F4613 +:10B8B00006462A782C46002A09D0921E60783B461C +:10B8C000A11CB047002802D120780544F1E7BDE86B +:10B8D000F08100005E6A00202DE9F0411188D088D7 +:10B8E000C1F30B081C491F461446A3F1080602F1D8 +:10B8F0000805042810D005281FD0062814D000F011 +:10B90000E9FA010004D0B3B22A460220F9F716FA88 +:10B91000BDE8F04100F0D8BF0C68002CF8D0B3B2FD +:10B920002A464146082006E08C68002CF0D0B3B2CD +:10B930002A4641460920A047EAE7082508E066199B +:10B940003146404600F048FD70882D1D284485B2E0 +:10B95000BD42F4D3DCE70000506F002001460148EF +:10B96000FAF771BF24010020FEF70CBF10B500F0FC +:10B97000B1FA002804D0408DBDE81040FEF702BFA8 +:10B9800010BD00002DE9F04115460E46074600F0B7 +:10B99000A1FA040010D0E08FA8B1642D16D8ADB183 +:10B9A00094F844100120884394F84310884210D141 +:10B9B0006FF00400BDE8F081394616A0F9F7C8FA27 +:10B9C0004FF0FF30F6E76FF00500F3E76FF003008C +:10B9D000F0E784F8440004EB40002A46A0F8465003 +:10B9E00094F8440000F0010000EBC00101EB0010EE +:10B9F000124901EB80003146F8F726FD94F8430028 +:10BA0000FF2802D1002084F843002046BDE8F04121 +:10BA1000F9F79EB86C326361705F73656E64206E77 +:10BA20006F206368616E6E656C20666F722063695B +:10BA3000642030782530327800000000746E0020D9 +:10BA40002DE9F047824698469146104600F060FA8C +:10BA500006464046FEF78AFF050005D014F082F93D +:10BA60006FF0010740B112E0414625A0F9F770FAE6 +:10BA70004FF0FF30BDE8F087307C012802D995F8FF +:10BA80006810D1B3032802D195F86900A8B3FAF77A +:10BA900091FF040032D04C21F8F7FDFC294604F157 +:10BAA0002400FAF7FAFDA4F83890A4F82A80F06888 +:10BAB000606000F0BFFDE0854FF6FF702086F088E3 +:10BAC000642800D9642060861720A086307C84F822 +:10BAD0003A00A4F840A0FF2084F8440084F8430012 +:10BAE0000E2084F820000020608421460C48FAF7DC +:10BAF0009FFE00F0E9FE0020BCE7FFE73846B9E70B +:10BB00006E6F206863695F636F6E6E656374696FE3 +:10BB10006E20666F722068616E646C65202575000A +:10BB2000140100202DE9F0471D461646894680463F +:10BB3000089FFAF73FFF04464846FAF7B3FD01466F +:10BB40002B46324618A0F9F703FA54B34C2120468D +:10BB5000F8F7A1FCF72D00D9F725494604F1240098 +:10BB6000FAF79BFD1C343020A6830026E68144F8BA +:10BB7000188C2083E58200F05DFD60820220207138 +:10BB8000E68026746674A0771C3C21461248FAF7BA +:10BB90004FFE0FB1E08D388000F096FE0020BDE82A +:10BBA000F0875620FBE700004C324341505F435280 +:10BBB000454154455F4348414E4E454C20616464C5 +:10BBC000722025732070736D2030782578206D7475 +:10BBD0007520257500000000140100202DE9F041BA +:10BBE0000824069D4180027106464371122A01D342 +:10BBF000921FD2B2184800EB820050F8047C21E07A +:10BC0000312804D0322802D044281AD10DE035F86A +:10BC1000040B80B23055641C3978A4B2322910D19B +:10BC2000000A3055641CA4B20BE0288869681FFA2A +:10BC300080F8083530194246F8F706FC04EB080096 +:10BC400084B27F1C38780028DAD1201F3080001F92 +:10BC5000F0802046BDE8F0813401002070B50D462B +:10BC6000064600F037F904462A46314605A0F9F7A2 +:10BC70006FF914B10C2084F82000BDE8704000F08A +:10BC800023BE00004C324341505F444953434F4E62 +:10BC90004E454354206C6F63616C5F636964203070 +:10BCA00078257820726561736F6E20307825780072 +:10BCB00030B40D464468C18D2846A44630BC604768 +:10BCC00038B505460C460BA0F9F742F978208DF8F7 +:10BCD000000002208DF801000423ADF802406A46FE +:10BCE00000211846FEF7BEFE04236A462146184688 +:10BCF000A84738BD4C324341505F4556454E545FCE +:10BD00004348414E4E454C5F43414E5F53454E4480 +:10BD10005F4E4F57206C6F63616C5F6369642030C6 +:10BD20007825780038B50446C18D0CA0F9F710F9D4 +:10BD300071208DF8000002208DF80100E08DADF833 +:10BD4000020004236A4600211846FEF78BFE0423F6 +:10BD50006A4619462046FFF7ABFF38BD4C324341D7 +:10BD6000505F4556454E545F4348414E4E454C5FEB +:10BD7000434C4F534544206C6F63616C5F6369644F +:10BD80002030782578000000F0B5044624308DB0CE +:10BD90000D460646FAF786FC0246208E0DF1080C89 +:10BDA000E78EA38E618EACE88B00E18D208FCDE90C +:10BDB0000001638D29461948F9F7CAF870208DF8FB +:10BDC000180015208DF819008DF81A500DF11B017F +:10BDD000304612F0EEFE608DADF82100208FADF8F8 +:10BDE0002300E08DADF82500208EADF82700608E91 +:10BDF000ADF82900A08EADF82B00E08EADF82D0037 +:10BE0000172306AA00210420FEF72CFE172306AAFA +:10BE100004212046FFF74CFF0DB0F0BDE03B0200CF +:10BE200030B50446243087B00546FAF73BFC01469E +:10BE3000228EE08DCDE90002238F628D1348F9F741 +:10BE400087F872208DF808000E208DF809000DF19A +:10BE50000A01284612F0ADFE608DADF81000208F6B +:10BE6000ADF81200E08DADF81400208EADF816008C +:10BE7000102302AA00210420FEF7F4FD102302AAD9 +:10BE800004212046FFF714FF07B030BD983C0200A4 +:10BE900010B50446012084F820002046FFF742FF39 +:10BEA000204600F0DDFF21460348FAF713FD204647 +:10BEB000BDE81040FAF778BD14010020042804D032 +:10BEC000062804D04FF0FF30704700207047012053 +:10BED000704700003EB5044608496846FAF7DBFCA7 +:10BEE00005E06846FAF7DDFCC18DA14204D0684642 +:10BEF000FAF7C2FC0028F4D13EBD00001401002076 +:10BF000010B5FFF7E7FF002800D0808E10BD0000BD +:10BF10003EB504460C496846FAF7BDFC0DE068469C +:10BF2000FAF7BFFC05468188224608A0F8F7DEFF35 +:10BF3000A888A04201D128463EBD6846FAF79CFC7D +:10BF40000028ECD13EBD0000180100206C655F7038 +:10BF5000736D3A20307825782C307825780A0000E7 +:10BF60002DE9FE4F0746984692468B461046FFF74E +:10BF7000CFFF05000CD03846FEF7F8FC060009D0CC +:10BF800044463F496846FAF786FC4FF0000914E042 +:10BF9000022335E003B03946BDE8F04F39A0F8F789 +:10BFA000D7BF6846FAF77DFC018EA14205D1428DCC +:10BFB000BA4202D130B10A2322E06846FAF75CFCAB +:10BFC0000028EED1FAF7F6FC040005D0287C022800 +:10BFD00010D003280BD01BE0042311E008230FE04E +:10BFE00096F86A00697C884212D2072308E096F826 +:10BFF000690020B196F868000028F1D1EEE705232A +:10C0000003B05A463846BDE8F04F142100F0D4BBC7 +:10C010004C212046F8F73FFA314604F12400FAF7A4 +:10C020003CFBA4F838A06785E868606000F002FB7C +:10C03000E085A4F83080E888642800D9642024F8DA +:10C04000320F0D98608004F806BC287C20720C9892 +:10C05000A08184F81390FF21A1746174162104F863 +:10C06000121C24F8109C323C21460EA0F8F73EFF2B +:10C0700021460348FAF7DCFBBDE8FE4F00F024BC84 +:10C08000140100206E6F206863695F636F6E6E65D8 +:10C090006374696F6E20666F722068616E646C6590 +:10C0A00020257500746865206368616E656C2031B9 +:10C0B0003A2030782578200A000000007FB5044639 +:10C0C00088890D46ADF80000012650B1801E002180 +:10C0D000092844D2DFE800F0354335181818182F26 +:10C0E0002F00204600F0BCFEE888A0866889E08723 +:10C0F000A888208684F842600A2084F82000632102 +:10C100002046FFF741FE2AE0164901A8FAF7C3FBD3 +:10C1100008E001A8FAF7C5FB02234568618D6A466D +:10C120000A20A84701A8FAF7A7FB0028F1D114209C +:10C1300084F8200013E0618400F0C6FB012004B005 +:10C1400070BD84F820606184204600F089FE0548B7 +:10C1500021461038FAF7BEFB2046FAF725FC0020EE +:10C16000EDE700002401002091F82020032A01D0EF +:10C17000022A03D14885042081F82000704700007E +:10C1800010B5044690F8200004281AD1208F00F042 +:10C190003BFD0246218F0B48F8F7DAFE608DFCF775 +:10C1A00005F800280DD0208F00F02EFD002808D1C2 +:10C1B000062084F82000608DBDE810400221FBF7C6 +:10C1C000C5BC10BDF43C0200FEB510780326144631 +:10C1D0003E2842D00CDC0E2817D004DC052817D0EE +:10C1E0000B2814D16DE00F280FD01328F9D12FE0C0 +:10C1F0006E282DD0732846D0E02879D0FB28F0D1C6 +:10C200005088FEF7B3FB01213AE000F05DFBA6E0A9 +:10C21000B2F8035053496846FAF73DFB12E068460E +:10C22000FAF73FFB0446408DA8420BD12046FFF7AA +:10C2300079FD204600F014FE6846FAF743FB2046DD +:10C24000FAF7B2FB6846FAF717FB0028E7D186E059 +:10C2500000F03AFB00F002FA81E0A07803287ED1DA +:10C260009088FEF783FB002879D090F841100029D0 +:10C2700075D0017C012902D080F841606FE0002177 +:10C2800080F841106BE054882046FEF759FA38BB1D +:10C2900034496846FAF7FFFA05E06846FAF701FB09 +:10C2A000408DA0425BD06846FAF7E6FA0028F4D148 +:10C2B000FEF76AFAA0B1132221462B48FEF7A8FC2C +:10C2C0004DE0B2F8034027496846FAF7E4FA09E07E +:10C2D0006846FAF7E6FA418DA14203D1FFF750FF15 +:10C2E0003DE005E06846FAF7C7FA0028F0D136E0ED +:10C2F00067881C496846FAF7CEFA2BE06846FAF7D9 +:10C30000D0FA0546408DB84224D115F8201F17A059 +:10C31000F8F71EFEA87E15F820292179052A02D0FB +:10C32000062A17D10DE0814206D3072085F82000A8 +:10C330002846FFF775FD0DE020351720EE762870B2 +:10C3400008E0814203D30E2085F8200002E0384641 +:10C35000FEF77EFB6846FAF78FFA0028CED100F090 +:10C36000B3FAFEBD14010020503A02006C32636142 +:10C3700070202D2073746174652025750000000005 +:10C380000D4910B50020C86048600C4A88600861FB +:10C39000D06510665066906688701831084848600D +:10C3A0000846FEF7BFF90748FEF76EFEBDE81040ED +:10C3B0000020FBF7B9B9000010010020F46E002046 +:10C3C000C9C10000D9B8000008B5009313460A4659 +:10C3D000162100F0FDFC08BD2DE9F0470C460E7853 +:10C3E0004978DFF840A28EB081460F46132E14D054 +:10C3F00008DC012E7ED0062E7DD0072E0DD0122E09 +:10C4000006D110E0142E7CD0152E06D0162E74D036 +:10C410000A4600231F2100F0CFF9824904A8091D14 +:10C42000FAF739FAF8E076208DF81C0008208DF82C +:10C430001D00E068CDF81E002069CDF82200022022 +:10C44000FEF706FD012805D102214846FEF70CFD46 +:10C4500001287DD04846FEF789FA05003AD0287CAD +:10C46000002875D10AA8FBF74DFAA288E388218934 +:10C470006089A2F1060840F67A4CE04525D8A3F180 +:10C480000608E04521D89A421FD8B1F5FA7F1CD89A +:10C490000A281AD3B0F5486F17D80C354FF0020CA4 +:10C4A00085F835C02A876B87A987E8874FF6FF7C18 +:10C4B0004FF00008CDE90010CDE9028C35F8061CDC +:10C4C0000C3D5948FEF7A4FB02E0052085F8410029 +:10C4D00085F842700A2307AA00210420FEF7C2FA59 +:10C4E000DAF81050002D98D00A23002107AA042062 +:10C4F000A84703E033E01BE003E00CE00EB0BDE82A +:10C50000F08725892279A089E388CDE9000548468E +:10C51000FFF726FDEDE7A088E588FFF7DBFC804606 +:10C5200001222946F8F7E5FB4046F8F7B1FB74E72E +:10C53000A0883D46FFF7CEFC90F82010092905D0D1 +:10C540000A2903D00C2901D00B29F0D1203000E0BA +:10C5500031E005730D21017000F0B6F95DE7314956 +:10C560006846091DFAF797F9002507E06846FAF7CB +:10C5700098F9054690F82D00B84204D06846FAF7BD +:10C580007BF90028F2D1002DD1D02846FFF780FC9E +:10C5900043E704A8FAF785F9428D4A453CD190F863 +:10C5A0002D10B942A5D1012EA3D0072E12D0132EE3 +:10C5B00017D0152E06D000233A461F21484600F01A +:10C5C000FBF896E790F820100F2992D12146FFF74B +:10C5D00075FD8EE790F820100B298AD1FFF758FCE3 +:10C5E00087E7A08977228DF8002004228DF80120AA +:10C5F000ADF80400ADF8029006236A46002104203D +:10C60000FEF730FADAF81040002CDAD006230021C9 +:10C610006A460420A0476CE704A8FAF72DF9002821 +:10C62000B7D166E710010020C03A0200F72070473A +:10C63000F720704702494888421C4A807047000032 +:10C640003001002004490878FF2803D0401C0870FE +:10C65000C0B270470120FAE730010020FEB51D4945 +:10C660006846FAF718F9002610E06846FAF719F953 +:10C67000044690F83C0048B1608DFEF783F828B17D +:10C6800084F83C60E18D6068FFF71AFB6846FAF7B2 +:10C69000F3F80028E9D1104D002400BF55F834000C +:10C6A00080B105EBC407387960B1FEF757F848B19F +:10C6B0003E715CB1012C0BD05FF0000155F83400E5 +:10C6C000FFF7FEFA641C022CE8DBFEBD0421F5E74F +:10C6D0000621F3E714010020506F002010B5044636 +:10C6E0000846FFF7EBFB002802DB024941F8304027 +:10C6F00010BD0000506F0020014908617047000024 +:10C70000100100202DE9F0410646984615460C46DA +:10C710000846FFF7FDFB07462A4621460EA0F8F71C +:10C7200017FC37B1214616A0F8F712FC6920BDE8C6 +:10C73000F081FAF74BF901000CD08C80CD80CE60EF +:10C7400081F810801B48FAF773F80120FAF7ECFF24 +:10C750000020ECE75620EAE74C324341505F524557 +:10C760004749535445525F534552564943452070FB +:10C77000736D2030782578206D7475202575000044 +:10C780006C326361705F72656769737465725F7341 +:10C790006572766963653A2050534D202575206196 +:10C7A0006C7265616479207265676973746572651E +:10C7B0006400000018010020F0B40A4DEC68032C5E +:10C7C0000EDA094E04EB4407641C26F8170006EB4A +:10C7D0004700C17082708380EC60F0BC00F074B8D8 +:10C7E000F0BC7047100100203C6F002010B50846D7 +:10C7F000FFF764FB002808DB044A012102EBC000BC +:10C800000171BDE81040FFF729BF10BD506F002037 +:10C8100010B5FFF75FFB002806D0012180F83C101F +:10C82000BDE81040FFF71ABF10BD2DE9F0411C46CE +:10C8300015460E46069FFEF799F860B120F8446F42 +:10C84000012145808480C78000F8031C00F03CF87B +:10C850000020BDE8F0810220FBE700000149012033 +:10C86000887070471001002010B5044601460B483F +:10C87000F9F7F9FF002810D0E18D09A0F8F768FB5F +:10C8800068212046FFF780FA21460448FAF722F88B +:10C890002046BDE81040FAF787B810BD140100200B +:10C8A0006C326361705F7274785F74696D656F7507 +:10C8B0007420666F72206C6F63616C206369642002 +:10C8C00030782530327800002DE9F04387B0AE4D46 +:10C8D000AE4E002438E02F883846FDF753FFB0B342 +:10C8E000F06895F80290401EAB8895F8038000210F +:10C8F000F0600CE001EB410205EB4202491CD2F86A +:10C9000006C0C2F800C0B2F80AC0A2F804C0814252 +:10C91000F0DBB8F1140F0DD0B8F1160F14D0B8F148 +:10C920001F0F11D100944A4601213846019400F0AE +:10C930004FFA09E0CDE902430094019400234A46EE +:10C940001521384600F044FAF0680028C3D18F4919 +:10C9500004A8091DF9F79FFF18260127CAE004A8BB +:10C96000F9F79FFF054690F820000D2844D008DC19 +:10C9700005280DD007280BD00A28EFD00C28EDD1C0 +:10C980004EE00E2860D016287ED01728E6D116E09B +:10C99000688DFDF7F7FE0028E0D0688C4105DDD5F5 +:10C9A00020F480606884288ECDE900070294EB8D26 +:10C9B00095F82C20688D152100F00AFA9AE0688D10 +:10C9C000FDF7E0FE0028C9D005F8206FE87E298A2F +:10C9D000CDE900100294EB892A7B6889203D15215E +:10C9E00000F0F6F9284600F03BFA04A8F9F76AFFD0 +:10C9F0002846F9F7D9FF7DE0688DFDF7C3FE0028D2 +:10CA000078D085F82060288E0090EB8D95F82C204A +:10CA1000688D072100F0DCF92846FFF739FA69E054 +:10CA2000688DFDF7AFFE002864D0FFF70BFE2035C0 +:10CA3000024668730B202870E88900902B8A688969 +:10CA4000062100F0C5F955E0688DFDF79BFE002832 +:10CA500050D0FFF7F7FD2035024668730F2028708D +:10CA6000688A298CEB89CDE90030CDE902012B8B56 +:10CA70006889203D142100F0ABF92846AD6100F033 +:10CA8000EFF9E98D42A000E013E0F8F761FA2A46D9 +:10CA900005F1080048490546FAF762F842F21072BB +:10CAA00040F281112846FAF743F82846FAF712F8BF +:10CAB00020E0688DFDF766FEE0B10A2085F82000D1 +:10CAC00085F842705220A5F84000298E2A463BA0E6 +:10CAD000F8F70CFA63212846FFF756F92A3501AA20 +:10CAE000E98A2889009013C2AB88AA782888152182 +:10CAF00000F06EF904A8F9F7BFFE00287FF42FAF0D +:10CB000003A8FDF75DFF36E003A8FDF77FFF0546AC +:10CB1000007A08B101282ED1E888FDF733FE50B322 +:10CB200095F84100012804D0032814D0052822D10B +:10CB300018E024352AA06C77F8F7D8F9688CEA8CCD +:10CB4000A98C8DE807002B8CAA7F35F81E0C1221CA +:10CB500000F03EF90FE085F8414095F84220E88862 +:10CB6000002305E085F8414095F84220E88801233C +:10CB7000132100F02DF903A8FDF728FF0028C3D1E9 +:10CB800007B0BDE8F08300003C6F002010010020DA +:10CB90006C326361705F73746172745F7274782059 +:10CBA000666F72206C6F63616C20636964203078FB +:10CBB000253032780000000069C8000074686520E4 +:10CBC00072656D6F7465206964203D30782578202A +:10CBD0002C2061646472203D307825780A000000C2 +:10CBE00073656E6420636F6E6E656374696F6E202B +:10CBF0007570646174652066726F6D206C3263615C +:10CC0000702E630A20000000012802D103488078BA +:10CC100008B100207047012070470000100100207B +:10CC20002DE9FF4115460E460746FFF753F904006C +:10CC300004D0FEF72FF950B1002109E039460CA0CD +:10CC4000F8F786F94FF0FF3004B0BDE8F08102211B +:10CC5000ADF80C50208EADF80E0004200090CDE908 +:10CC600001652D1DAAB2608D03ABFEF709FBEBE752 +:10CC70006C326361705F73656E64206E6F206368F1 +:10CC8000616E6E656C20666F722063696420307817 +:10CC900025303278000000002DE9F04786B01C46B0 +:10CCA000DDE90E9690460D468246FEF7F3F808B190 +:10CCB000002700E002272A4651460CA0F8F748F961 +:10CCC000A019ADF81400ADF816500421CDE90018F4 +:10CCD000001DCDE9024982B20496394605AB5046A3 +:10CCE000FEF7CEFA06B0BDE8F08700006C32636153 +:10CCF000705F73656E645F70726570617265645FAA +:10CD0000636F6E6E656374696F6E6C6573732068B4 +:10CD1000616E646C652025752C2063696420307811 +:10CD200025303278000000002DE9FF4F89B01C4605 +:10CD3000DDE918A5DDE916B691468846FEF7AAF8A2 +:10CD400008B1002700E0022742460EA00999F8F733 +:10CD5000FFF8A0192844ADF81C000422ADF81E808D +:10CD6000CDE90029CDE9024B0496CDE905A5001DCA +:10CD700082B2394607AB0998FEF782FA0DB0BDE8DA +:10CD8000F08F00006C326361705F73656E645F707A +:10CD9000726570617265645F636F6E6E65637469FE +:10CDA0006F6E6C6573732068616E646C65202575A9 +:10CDB0002C20636964203078253032780000000030 +:10CDC00008B5134600917722082100F001F808BD4C +:10CDD0000FB470B50C460546FDF7D4FC68B121468A +:10CDE00007A0F8F7B5F807AB9DF8182021462846AC +:10CDF00000F018F870BC5DF814FB5720FAE700004B +:10CE00006C326361705F73656E645F7369676E61D6 +:10CE10006C696E675F7061636B65742074797065AF +:10CE2000202575002DE9F8431D4616460F4680461D +:10CE3000FEF730F808B1002400E0022433463A46F9 +:10CE4000052106480095FEF7C9FE02460090034BF7 +:10CE500021464046FEF714FABDE8F883606F0020D3 +:10CE600010B50446C18D0448F8F772F804F10800C3 +:10CE7000BDE81040F9F73EBE743C020070B50546AF +:10CE8000FFF746F8044629460BA0F8F761F8002C96 +:10CE900010D021461148F9F71DFD2046F9F790FD05 +:10CEA0000E48F9F7DAFC002804D0BDE870400020F5 +:10CEB000FAF73ABC70BD00004C324341505F554E0A +:10CEC00052454749535445525F534552564943458D +:10CED0002070736D20307825780000001801002044 +:10CEE0002DE9FC4705464FF0FF300027CDE900074C +:10CEF00091461E4688466A46284600F061F80400BE +:10CF00002BD101A92248FEF7CFFC00200199012373 +:10CF100003FA00F20A4200F1010007D00428F7DB0F +:10CF20000098002804DA0020BDE8FC870090F8E7AC +:10CF3000C0B25C220021FEF739FC00980021C0B28B +:10CF4000FEF7F4FB04465C21F7F7A5FA2570D8F844 +:10CF500000106160B8F8040020814046F9F7A2FB98 +:10CF6000024629460BA0F7F7F4FF494613A00FF03D +:10CF700097FE1022494604F10A00F7F765FA676444 +:10CF8000FEF790FC0EB1009830602046CCE7000020 +:10CF90000D23020043656E7472616C2044657669EE +:10CFA000636520444220616464696E67207479700F +:10CFB00065202575202D20257300000069726B0007 +:10CFC0001FB5084B1446D3E902238DE80F006946CC +:10CFD0000548FEF769FC0CB102982060039804B084 +:10CFE00010BD0000443D0200256E0000C0B20021CB +:10CFF000FEF79CBB406870470078704700210170C5 +:10D000004160704710B504460020606005E00021D3 +:10D01000FEF78CFB08B1606010BD2078401C2070CA +:10D02000C0B20528F3D3002010BD002802DBC0B237 +:10D03000FEF7F8BB704738B10C2807D0272804D07A +:10D040000C2805D2401E04E025207047262070479A +:10D05000801EC0B270470FF0F7BE18380FF0B0BF97 +:10D0600070B51400054615D0F7F7ECFC0A4850F8E7 +:10D07000250058B18179012908D1A0F8864040F2F5 +:10D0800071214C43816FA14200D9C467BDE8704053 +:10D09000F7F7E2BC70BD0000287A0020022110F0F2 +:10D0A0002DBB00002DE9F04116460D460746FCF762 +:10D0B00079FF0400306005D045B1A078A84208D3BC +:10D0C000012007E039460120FDF78AF90020BDE87C +:10D0D000F08100204FF44F7209A1F8F785FC6568D4 +:10D0E000A378E078290C834200D8034609B94FF4AD +:10D0F00000612846BDE8F041052210F081BB000028 +:10D10000626C655F686369635F6569662E630000D2 +:10D110002DE9F0410C4602F0CFFF074600252678A6 +:10D1200012E0B74201DA384600E0304680B280466D +:10D1300008F0F4FA88B10C3004EB85016D1C4860EE +:10D14000A6EB0800EDB206B2002EEADCA77065700F +:10D150000020E0702846BDE8F0816570204600F0B0 +:10D160005BF80020F7E7000070B5164605460C0096 +:10D1700001D0012000E0002040F269320EA1F8F752 +:10D1800033FC0122002321461046FDF779F8002EDA +:10D1900010D0002606E000BF15F8011B0AA0F7F723 +:10D1A000A5FE761CA078B042F6DCBDE8704008A071 +:10D1B000F7F79CBE70BD0000626C655F68636963D1 +:10D1C0005F6569662E63000025303278200000001C +:10D1D0000A00000010F03CBD70B50C460546F7F79C +:10D1E00031FC0C4850F8250078B1C1690846A042CE +:10D1F00008D1607920F020006071E07920F0800093 +:10D20000E07102E000688842F1D1BDE87040F7F7B4 +:10D2100023BC0000287A002070B50546002407E0F2 +:10D2200005EB840040680C3808F0F6FB641CE4B29F +:10D230006878A042F4D80020687070BD70B50546CB +:10D240000C0001D0012000E0002040F24F321AA172 +:10D25000F8F7CAFB1C490878A0F1010008701B48C8 +:10D260000078800704D5A2782088294614F09AFA1D +:10D27000E07868B10DB1012000E000204FF4567253 +:10D280000DA1F8F7B1FB2846A168BDE8704008473A +:10D290004DB1002040F25D3207A1F8F7A5FB6068B0 +:10D2A000010C02D003E00120F4E74FF40061BDE877 +:10D2B0007040052210F0E4B8626C655F68636963D2 +:10D2C0005F6569662E630000F87800201C0000206E +:10D2D0002DE9F843002415460F468046D6782346AC +:10D2E0001CE000BF05EB8400A97840680C38B1420F +:10D2F00000D93146721A16B2827A002E02DC42F050 +:10D30000010201E022F001028272C9B200913A46A4 +:10D310004146FDF78BF80123641CE4B2002EE1DCEA +:10D3200008E000BF05EB840040680C3808F074FB8F +:10D33000641CE4B26878A042F4D8002068702870B9 +:10D34000BDE8F88330B5082811D201F0010383400D +:10D3500001218140CD43064902F0010282400C7850 +:10D360002C401C430C70487828401043487030BD56 +:10D3700033780020044981F8FC0204490A6822F04D +:10D38000FF0202430A607047307500200002094026 +:10D39000014981F8630170473075002001494870E8 +:10D3A00070470000F40100200F49152801DA07201A +:10D3B00002E01F2802DA062008707047332801DADD +:10D3C0000520F9E74C2801DA0420F5E7652801DAA1 +:10D3D0000320F1E7972801DA0220EDE7FB2801DAC4 +:10D3E0000120E9E70020E7E7F40100202DE9F047FC +:10D3F0000E461D460178002406EB050990460746B7 +:10D40000494501D3012000E0002040F2FE221DA189 +:10D41000F8F7EAFA87F80390B87803E0311A641C49 +:10D420008EB2E4B2B042F9D93EB3801BA84200DD0F +:10D4300028461FFA80F907EB84004A4640684146B7 +:10D440003044F7F701F8A5EB090085B2641CE4B29B +:10D4500008EB090010E0BE78AE4200D92E4607EB7B +:10D460008400324640684146F6F7EEFFA81B85B2BD +:10D47000641CE4B208EB06008046002DEBD1BDE849 +:10D48000F0870000626C655F686369635F65696669 +:10D490002E6300002DE9FC4707462A4889462A4E9C +:10D4A000D0F83B11009190F83F018DF8040000BFC7 +:10D4B00056F82710052201F22D116846F6F7FDFFF8 +:10D4C00000283CD0F6F7AEFFC0B22521B0FBF1F248 +:10D4D00001FB1204E508684204EBC001012088400A +:10D4E00000F0FF08252C01D2012000E0002040F2CE +:10D4F000212216A1F8F778FA1DF8050010EA080FA6 +:10D500001AD056F8271005F22D15485D024610EA8C +:10D51000080F11D142EA08024A5556F8272004F1B3 +:10D52000DC010020505456F8271004F2011408556D +:10D53000A9F1010000F0FF09B9F1000FB8D1BDE871 +:10D54000FC87000030750020287A0020626C655F3F +:10D550006C6C632E630000000A7D52060DD4837A42 +:10D560004A7D63F305024A75817AC27A1144252205 +:10D57000B1FBF2F302FB1311817270472DE9F04108 +:10D580002F4C0D46074654F8250058B3002056226C +:10D590002CA1F8F729FA4FF4DC76002130460FF081 +:10D5A000F1FD44F82500E8B33146F6F774FF54F86E +:10D5B0002540FF202580A070E0702548B0F8470185 +:10D5C000A4F8D100012084F898010620A4F8940062 +:10D5D00004F11C0008F0D8F900262663052D03D8B5 +:10D5E000082006E00120D2E70A2D01D8042000E03F +:10D5F000022084F83C00C0B2FF2108F071F8E0611D +:10D60000A06928B90021384607F0E6FFA06148B1BB +:10D61000E06938B1A063A169CA6860F31E02CA60FC +:10D62000A06900E00AE04660A069001D00F0CEFCA1 +:10D6300008F060FA60630020BDE8F0810720FBE796 +:10D64000287A0020626C6535305F6C6C632E630055 +:10D6500030750020002909D00B78827F63F3060221 +:10D66000827711F8012B6830F6F7EEBE70472DE98E +:10D67000F0410C4601468569B4F83B002D1D4FF67C +:10D68000FF7202EA40006885B4F83B0040F2E242D3 +:10D690004243A262B4F83920D4E9066340F2E2477B +:10D6A0007A43D717B2187B41C4E90623E28E40F2D1 +:10D6B00071235A43E262897909B32C34002184F83A +:10D6C0002610217F08F00CFB2081B4F80D00217B8F +:10D6D0000844401C80B2217F08F002FB606015F80E +:10D6E000200F40F001002870207B8100288861F322 +:10D6F0004E00288054F82C0908B9A06AE062D4E9E9 +:10D700000A01814200D9E062BDE8F08170B5C2F340 +:10D710000B261846012101EB0624024602230521AF +:10D7200009480FF039FD05460680074821461430A8 +:10D730000FF01AFB0448214616300FF015FB28465F +:10D740000FF08AFE002070BD2400010070B50B4967 +:10D75000C2F30B24104651F824500FF07FFC002830 +:10D7600005D0012807D0E878FF2801D0022070BD3D +:10D77000204602F073F8002070BD0000287A0020D7 +:10D780002DE9F04100251C4F1C4E80462C4600BF61 +:10D7900057F8240048B390F83A1105F1010509073C +:10D7A00023D4C178FF2920D1817939B1327890F81A +:10D7B0009800A8EB0201084400F0FF08022007F0DF +:10D7C000ADFF020011D09188012021F4FF514031BA +:10D7D00091801D21117382F80D8086F80280A1B21C +:10D7E00000EB0420002303F0B9FA641C082CCFDB03 +:10D7F0002846BDE8F0810000287A0020F4010020CE +:10D80000F0B505469888174620F4FF50A030988060 +:10D8100018201873B5F892000E460A30A3F80F00CE +:10D82000A86903F10C043978007900F003027078DC +:10D8300002F0D0FD6070A86979780079C0F38102A8 +:10D84000307802F0C7FDA07062780021824212D0C9 +:10D850007278307882420ED10020930700D50120E3 +:10D86000D30701D000F10100520700D5401C012868 +:10D8700001D16170A170A8696378007900F003029A +:10D88000012000FA02F2934200D16170AB69A278E4 +:10D890001B79C3F381039840824200D1A170607864 +:10D8A00008B9A07848B103205435641CA87060887A +:10D8B00028802088A5F81100F0BDA4F80310F0BD61 +:10D8C00028B1012901D1012A01D00020704701208F +:10D8D0007047000030B40BB10F2300E01023137029 +:10D8E0008B88A2F803304B88A2F80130CB88A2F8CD +:10D8F00005300B89A2F8073001235372B0F892303B +:10D900004FF6FF741433538100239381012300BF2A +:10D9100002EB43055B1CDBB2AC81062BF8D3898894 +:10D9200030BC03F0FBBD00002DE9F047264D9A46C0 +:10D9300016468846244C1035089F03F08FFA49207C +:10D94000E073A11C5FF00000C0F10C0318F8032085 +:10D950000A54401C0D28F7DB0020DFF8709060703F +:10D9600027704FF00108C9F8048006F0B5FD0020CB +:10D97000315C2A5C5140C0F10F02401CA1541028B8 +:10D98000F6DB4646C846C9F8046006F0A5FD00204F +:10D9900008E000BF1AF800102A5C5140C0F10F02E5 +:10D9A000401CA154B842F5DB04E0295CC0F10F0231 +:10D9B000401CA1541028F8DBC8F8046006F08CFD68 +:10D9C0002868BDE8F0870000000208400000084019 +:10D9D0002DE9F0410C4607468AB000210D200FF0DA +:10D9E000D1FB0546002110200FF0CCFB8046202201 +:10D9F000414901A8F6F728FDA08804F10C06C0F300 +:10DA00004710001F81B2ADF80610CDF80E60B8695E +:10DA10003830CDF81200CDF81650CDF81A60CDF898 +:10DA20001E80102901D8012000E000204FF4D1729F +:10DA300032A1F7F7D9FFD7F8B001286097F8B40101 +:10DA40002871B979F1B300F07F002871B869816C51 +:10DA5000C5F80510C06CC5F8090010214046F6F75E +:10DA60001AFD012188F80110207900F0030040F030 +:10DA7000200188F80210F6F7E5FF03F0A1FFBDF8DA +:10DA80000600C0B20090DDF81A30DDF81E20DDF887 +:10DA90001610DDF81200FFF747FF074601A806F051 +:10DAA00045FC06F019FDA0881749C0F3471230461F +:10DAB000F6F7CAFC607940F040006071BDF80600DE +:10DAC000841900E014E0DDF81200294600F0A4FEFD +:10DAD00080EA07012160F6F7BFFF04F087FF2846C0 +:10DAE0000FF0B2F940460FF0AFF90AB0BDE8F0818F +:10DAF00040F08000A9E700000C480200626C653528 +:10DB0000305F6C6C632E6300000208402DE9F04327 +:10DB1000B0EB0208DDE90854DDF81CC02779B4F841 +:10DB200003604FF49679994118D2101A00EB050161 +:10DB3000A1F10101B1FBF5F189B2ACEB010201FBEE +:10DB400005F1A4F81520A1EB000011E0B0FBF1F005 +:10DB500060F30C06A4F80360BDE8F083801AB0FB04 +:10DB6000F5F189B20CEB010201FB1500A4F81520B8 +:10DB7000B90601D54946E9E71E21E7E72DE9F04F4F +:10DB800006461546B0F8CA0040F2712200FB02FBBF +:10DB900091B0002018705880B6F892001C460A30E8 +:10DBA000588159B108892081C888E0804888A080C0 +:10DBB000488809904889114648430BE06D1CE88865 +:10DBC0002081A888E0802888A08035F80109099084 +:10DBD00040F6C4100E906B89D6E91A01B6F892206F +:10DBE0009342A3EB020301D203F58033B26F534398 +:10DBF00013EB000841F1000A5FF0000705EB470056 +:10DC0000CDF83CB08189A1F57F40FF3868D040F263 +:10DC1000E2404143C81711EB080940EB0A000590A8 +:10DC200000203E49CDE90010029003906FF0FD0204 +:10DC3000059819EB020C40F1FF310FAA60460E9BCC +:10DC400008F01CFDF0B3002108F00AFE0F9841F621 +:10DC50004C51884240D300200CA90190CDE902012B +:10DC600004900090B5F8010040F2E2414843C1172A +:10DC7000059A10EB09005141284B5A4608F027FD40 +:10DC800000B3002108F0ECFD0C99B1EB090040F263 +:10DC9000E241B0FBF1F081B2B5F8030088421BD33A +:10DCA000687AB1FBF0F24243A280B26FB9EB080090 +:10DCB000B0FBF2F26B891A446281B0FBF1F201FB16 +:10DCC000120000E008E04FF00401617040F2E24110 +:10DCD000B0FBF1F0608003E07F1CFFB2062F8DD314 +:10DCE000608850B996F888006070B6F88910A088EE +:10DCF000B1FBF0F200FB12106080A188687AB1FBE2 +:10DD0000F0F1414388B2A0800999884202D2697A31 +:10DD10000844A08011B0BDE8F08F00004169010007 +:10DD200070B51C4E0546082056F82540503407F0C3 +:10DD3000F5FC02002CD00220A071B4F842000A3099 +:10DD4000A08056F8251001F58070D1F82D112161C1 +:10DD500090F831002075918821F4FF5101F5807110 +:10DD6000918001211173A388538256F8254001EB5D +:10DD7000052004F58073D4F82D41C2F80D4093F8C6 +:10DD8000313053742946BDE87040002302F0E6BFED +:10DD900070BD0000287A002010B58279002A08D0D2 +:10DDA00000F1500480F89810B0F88B0007F098FF4D +:10DDB000A08610BD10B5428881888A4217D8438951 +:10DDC0008489A34213D84FF4486399420FD8062A96 +:10DDD0000DD302899A420AD80A2A08D3C088B0F51E +:10DDE000FA7F04D2401C4843B0EB820F01DD1220C1 +:10DDF00010BD002010BD806820F00040014642792F +:10DE0000920601D50020704700688842F7D10120B2 +:10DE1000704730B5826B00230A6006E094680464A2 +:10DE200012680C685B1C944202D05479A406F5D4A5 +:10DE3000B0F8964054B9012B08DB0D68AD68456415 +:10DE40000D68ED7B05F0030580F848501C44A0F8F0 +:10DE500096408B80B0F892408C81826390F8992034 +:10DE60004AB1B0F8962032B10968097A490702D45C +:10DE7000002180F89910184630BD2DE9FF5F054656 +:10DE80000027D5E908469846B946F6F7DBFDBA46BD +:10DE9000C6F800A0A8F806A0A8F808A0A8F80AA04C +:10DEA00005F1200B26E02079C043800704D02046EE +:10DEB00000F0EAFF68B11BE0DDE90112237A284691 +:10DEC00001F078FEB8F8080000F10100A8F8080099 +:10DED0000EE0B8F8060000F10100A8F80600A07AEC +:10DEE000C00705D0B8F80A0000F10100A8F80A0040 +:10DEF000274624687CB360790006D4D404E0274622 +:10DF000024684FF0010924B1204600F0BDFF00282D +:10DF1000F5D1B9F1000F04D0A869417941F00801A9 +:10DF20004171C4B11FB1C7F800A06F6202E058464A +:10DF3000F8F762FE307940F010003071707920F00F +:10DF400020007071A86A3060AC62E86A00B9EE62C5 +:10DF5000286B00B92E63584607F03EFDBDE8FF5F11 +:10DF6000F6F77ABD2DE9F041074617480E46052120 +:10DF700050F8274030460DF05DFE8046A56901202F +:10DF80002D1D00EB072002210FF0E6FAB8F1000F7B +:10DF900014D03168C4F82811317984F82C11316813 +:10DFA00040F23110C4F82D113179015504F5947106 +:10DFB00005F11800BDE8F04108F029BF3846BDE87A +:10DFC000F0410C2103F0CEBB287A0020806820F0BD +:10DFD00000400146427922F02002427100688842E6 +:10DFE000F8D1704770B51C460423049D0FF0D4F897 +:10DFF00004704580BDE870400FF02EBA02465161B2 +:10E00000D37931B123F04003D37112688242F6D143 +:10E01000704743F04003F7E770B5044608781D46A3 +:10E02000C0F381032078049E63F383002070097895 +:10E0300061F301002070607820F00E006070207D98 +:10E0400062F3861040F001002075697D61F34500A0 +:10E050002075607D05F1100120F03F006075002003 +:10E06000E0822868E060A8882082A879A07404F182 +:10E07000180008F0CCFE96F89A00E07796F83C007D +:10E08000400884F82200687D00F01F00F07270BD27 +:10E090002DE9FF4F074680688DB000F104099046D6 +:10E0A0000E4602F10C0A4FF0000B0BA803F07EFBAA +:10E0B00018B10D2011B0BDE8F08F00248DF8064096 +:10E0C0000BA803F073FB002875D1BDF82C100120BC +:10E0D00000EB01208346FFF751FA00286BD116228E +:10E0E00051460DF11300F6F7AFF9307900F00F004B +:10E0F000072804D0B069CDF80D00B08B07E006F119 +:10E1000018000AF01FF80168CDF80D108088ADF8EE +:10E1100011000DF1070007F013FE7079C0098DF8AA +:10E12000040097F832008DF805004948BDF82C101E +:10E1300050F82150002005F15004A87104202864F3 +:10E1400058212046F6F7A7F90620A4F84400DAF88B +:10E150000710A163DAF80B10E1639AF80F0084F856 +:10E1600040003C4890F8450184F84A00D7E91C017A +:10E17000C4E9060198F8070000F0030299F80000CE +:10E18000C0F38101162013F043FCD4E906230146B5 +:10E19000891843F10000C4E90610109A12B140F248 +:10E1A0005A520BE099F80020C2F38102022A03D0F0 +:10E1B00040F63C2202E043E041F2EE12891840F1C1 +:10E1C0000000C4E9061097F86D0040F2712100EBE1 +:10E1D00000103844B0F84900E0864843E062214628 +:10E1E0002846FFF744FA98F80500C0F3001270794A +:10E1F000C0F300111098FFF763FB0246A8690323E0 +:10E20000001DC17821F07C010831C170417821F0F6 +:10E210000101417090F8201041F0010180F82010B8 +:10E22000018C63F34E010184534649460095FFF784 +:10E23000F3FEBDF82C002A46C1B2584602F00CF994 +:10E2400001ABBDF82C20594600F022FD32E700005A +:10E25000287A00203075002070B50D460646144619 +:10E26000012000EB05220A23052109480EF094FF46 +:10E27000032101704670458034F8031F8180618856 +:10E28000C180A1880181BDE870400FF0E5B80000B1 +:10E290002A00010070B511480D4650F8254094F849 +:10E2A0006E0110B994F86F0170B1002084F86E010E +:10E2B00084F86F0102200DF0E3FC28B104F188021C +:10E2C00029460020FFF7C8FF012084F86D0100EB0C +:10E2D0000520BDE8704002210FF03EB9287A0020E9 +:10E2E0001346002904D00A4601461846F6F7ACB892 +:10E2F000704700002DE9F05F344C54F820C09CF8C2 +:10E300006B21002A5FD18A884FF00108C2F34715BC +:10E310000A7E08EB002B1F2A24D29CF83A319E0774 +:10E3200002D5A5F10405EDB2A246DB0611D5D41E37 +:10E330000F2C09D2DFE804F00D0D0D0D0D08080DAE +:10E340000D080D0808080D00BDE8F05F3D2103F041 +:10E3500009BADFF87C9002EB420709EB8706337AB3 +:10E36000AB4204D0BDE8F05F114603F0ADB801F157 +:10E3700018041B2A13D0022A1ED05A46737A11465B +:10E3800070680EF009FF064659F8273032462946D4 +:10E39000204698473046BDE8F05F0FF05DB84A79F7 +:10E3A000520604D55A46604602F0B6FBE5E7002265 +:10E3B000594602F0BDFCE0E78CF86A815AF820006B +:10E3C000627880F86921BDE8F09F0000287A00207B +:10E3D000AC4802002DE9F047DFF88080C2F30B243F +:10E3E00091460E46002558F8247048460EF036FE39 +:10E3F000D0B1012818D058F8240090F83A01C0068E +:10E4000022D5F878FF2801D0387988B1B06807F0B4 +:10E41000CCF958F8240090F83A0140070AD53D217C +:10E42000204600F02FFA0AE0B06807F0BEF912E0CB +:10E43000022510E03D220021204600F00DFA3D218A +:10E44000204603F08FF906E000234A4605213046B6 +:10E450000EF0F0FC01252846BDE8F087287A002060 +:10E4600070B50646092007F059F9050000F10C04C3 +:10E4700001D0012000E0002040F2F3221BA1F7F7B9 +:10E48000B3FAA88820F4FF5000F59070A8801420FB +:10E4900020701A4850F8262002F58071D2F87421B5 +:10E4A000C4F80120896FC4F8051050F826000B212C +:10E4B00000F599700DF0DEFC68B9B4F8031040F671 +:10E4C0004800814201D9A4F80300B4F80710814242 +:10E4D00001D9A4F80700012000EB06202A463146A6 +:10E4E000BDE87040012302F039BC0000626C655F3A +:10E4F0006C6C635F6374726C2E630000287A00207A +:10E500002DE9F0410546012000EB052618480F468D +:10E51000314650F8254017480EF026FCFF20E070E9 +:10E5200057F8010FC4F87C017868C4F88001002214 +:10E530001146204603F036F818B994F88C010028EB +:10E5400013D00C480C23324605210C380EF024FE63 +:10E550000721017004F5C27445802168416061683B +:10E5600081600EF079FF00202072BDE8F08100008C +:10E57000287A00203A000100F8B50C00054601D0C9 +:10E58000012000E0002040F2DB1243A1F7F72CFA53 +:10E59000A08895F83A11C0F34710C90702D0A0F13E +:10E5A000040080B2217904F10C036FEA01018A07AB +:10E5B0003C4925D040B10978090705D500902A8843 +:10E5C0000021032013F054F9E889401CE8812079E8 +:10E5D00040F010002071607920F0E000607195F843 +:10E5E0009811E07961F30100E071F6F72BFAA96A5E +:10E5F00005F128064FF000004FF0010741B109E096 +:10E600000978C906E0D5009000212A880420D9E7BE +:10E6100085F8AA01204600F037FC98B995F83A0130 +:10E62000C0070FD0A079C00705D021462846FFF7C4 +:10E63000CFF985F8AA71D5E96C01401C41F10001C0 +:10E64000C5E96C0195F8AA01E0B92079C0438007BB +:10E6500018D1207B1B2800D16F72207B2072FCF721 +:10E66000F3FF78B1306868B101460279D24392076E +:10E6700000D1014600680028F7D1086810B1206079 +:10E680000C6004E0002221463046F8F795FABDE818 +:10E69000F840F6F7E1B90000626C6535305F6C6CEC +:10E6A000632E63001C0000202DE9F04110460C464B +:10E6B0000EF0D4FC60B101280AD020881D4E56F817 +:10E6C000200090F83A11090706D50220BDE8F08134 +:10E6D000A06807F0A1F92AE0A178890707D00127EF +:10E6E0002579B0F88801A84203D3012002E002276F +:10E6F000F6E7002040F21D720FA1F7F775F92088A8 +:10E7000056F8200090F83A01C00701D02D1DEDB257 +:10E71000A068017967F301010171818865F34C11EB +:10E7200081802088A16856F82000FFF725FF00208F +:10E73000CCE70000287A0020626C655F6C6C635F38 +:10E740007461736B2E63000070B505460C460120A2 +:10E7500000EB05210C230A460C480EF01DFD058038 +:10E76000A1880B4AC1F34711818052F8252092F805 +:10E770003A21920701D5091F8180217901F0030117 +:10E7800081708460BDE870400EF066BE3700010005 +:10E79000287A002070B515461C460E460246062310 +:10E7A000052105480EF0F8FC067004714580BDE8AF +:10E7B00070400EF051BE00001E0001002DE9F8432C +:10E7C000984616460C460C25C2F30B2710460EF051 +:10E7D00045FC90B1012810D0A07802F0ADFF58B1EF +:10E7E0000B490120002551F8271081F86A01A17812 +:10E7F000208802F023FE00E01225208800902B469E +:10E80000324641460348FFF7EDFB0020BDE8F883A0 +:10E81000287A00201A00010070B50D4D0E460C4CF0 +:10E82000103502F01BFB0121A21CE1735FF0000018 +:10E83000C0F10C03F35C1354401C0D28F8DB0020DE +:10E84000607020700348416005F046FE286870BD86 +:10E85000000208400000084070B50446154601203B +:10E860000E4600EB04220623052105480EF094FC19 +:10E87000448006710570BDE870400EF0EDBD0000EB +:10E880002200010070B5044601200D4600EB042271 +:10E890000423052104480EF07FFC44800570BDE888 +:10E8A00070400EF0D9BD00002300010070B5044691 +:10E8B0000D480D4650F8241055F80B3F01F58072B5 +:10E8C000C1F846316968C2F84A1050F82400A968B6 +:10E8D0000B3D80698164204600F0ACF82946204653 +:10E8E000BDE8704001F0CCBB287A00202DE9F0474C +:10E8F0000646172006F012FFDFF88890050000F1A9 +:10E900000C0459F8267001D0012000E0002040F2EC +:10E9100027121DA1F7F768F803202070A88807F5D3 +:10E92000807820F4FF5000F53870A880B7F84401D3 +:10E93000A4F80900D7F83C01C4F80100D7F8400159 +:10E94000C4F80500042104F1130002F051FF08216E +:10E9500004F10B0002F04CFF59F826000B342A4654 +:10E960008069A16881642068C8F846006068C8F8BA +:10E970004A00012000EB06203146BDE8F0470123A4 +:10E9800002F0ECB9287A0020626C655F6C6C635F02 +:10E990006374726C2E6300002DE9F041044601207F +:10E9A00000EB04260F462023324603211E480EF0BA +:10E9B000F3FB80464FF47A6231461C480EF016FE97 +:10E9C0001B4D55F8240090F83A1141F0100180F8E1 +:10E9D0003A1155F8241057F8012F01F58070C1F84D +:10E9E0004E217968C0F8521055F82410B8681022EA +:10E9F0008969C86455F82410404601F5AB71F5F7F4 +:10EA000023FD55F82410102201F5A37108F1100020 +:10EA1000F5F71AFD40460EF01FFD3046BDE8F04107 +:10EA200003210EF099BD0000110003003A0001001F +:10EA3000287A002070B505460D2006F06FFE06000E +:10EA400000F10C0401D0012000E0002040F2471248 +:10EA500015A1F6F7C9FF04202070B088042120F426 +:10EA6000FF5000F5D070B08004F1090002F0C0FE44 +:10EA70000821601C02F0BCFE0F48641C50F82520E1 +:10EA8000A1689269D16450F82510226801F5807060 +:10EA9000C1F84E216168C0F8521029463046BDE8E1 +:10EAA000704001F079BC0000626C655F6C6C635F64 +:10EAB0006374726C2E630000287A002070B5154ACA +:10EAC00051F8014F054652F820200920C2F8324182 +:10EAD0004968C2F8361106F021FE040000F10C0668 +:10EAE00001D0012000E000204FF4E8720AA1F6F7FF +:10EAF0007BFFA08820F4FF5000F59070A0800920D3 +:10EB00003070701C0DF090F929462046BDE8704029 +:10EB100001F042BC287A0020626C655F6C6C635F18 +:10EB20006374726C2E63000070B50646092006F00F +:10EB3000F5FD040000F10C0501D0012000E00020EB +:10EB40004FF4D1720BA1F6F74FFFA08820F4FF50CD +:10EB500000F59070A08008202870681C0DF064F902 +:10EB6000012000EB062022463146BDE8704001231B +:10EB700002F0F4B8626C655F6C6C635F6374726C16 +:10EB80002E6300001288A1F801208B78012233B98E +:10EB900083691B79C3F3810302FA03F38B704B780B +:10EBA000002B05D18069007900F0030082404A7093 +:10EBB0007047000070B505461848002250F8214003 +:10EBC00040F82120D4F89C010EF03EF9D4F8A001C1 +:10EBD0000EF03AF9606906F0AFFE0021E069FFF738 +:10EBE0000DFA04F1280006F0F7FE04F1200006F00B +:10EBF000F3FE606B08B106F00FFFE06906F0BEFEA1 +:10EC0000A06908B106F05EFE20460EF01DF9284608 +:10EC1000BDE8704000210EF09FBC0000287A002063 +:10EC20002DE9F0410E46088812491C46174651F856 +:10EC300020500523214610480EF0AEFA04460C2061 +:10EC400020703088A4F8010038460EF007FA50B161 +:10EC5000012808D03DB1D5F89001C0F30F10A4F8F9 +:10EC600003000020207020460EF0F6FB0020BDE8D7 +:10EC7000F0810000287A002025000100C10701D0A2 +:10EC800000207047800701D501207047022070479F +:10EC900070B514460E4605000FD00346E2B2194681 +:10ECA0003046FFF777FD074850F8240018B1214699 +:10ECB0003046FFF77FFF284670BD1146184602F028 +:10ECC000D1F9F8E7287A00202DE9FF5F07468CB0DC +:10ECD0007A8E8B464FF0000AA2F10A0140F6774384 +:10ECE000DDF86C90504607F1180699427DD2F18A02 +:10ECF00006297AD3B1F5486F77D8338BB3F5FA7F0D +:10ED000073D25B1C4B43B3EB820F6EDC484602F0C0 +:10ED10004DFD002869D1B9F800004FF0010808EB5B +:10ED2000002A222231460DF10700F5F78DFB787994 +:10ED3000C0098DF804007879C0F380108DF80500C3 +:10ED40008DF80680B9F800105046FEF717FC002831 +:10ED50007DD1B9F80000424951F82050582105F101 +:10ED6000500485F806802046F5F795FB0620A4F8A8 +:10ED700044003C4890F8450184F84A00DDE90E0162 +:10ED8000C4E90601F87B00F003029BF80000C0F321 +:10ED90008101222012F03CFED4E9062301468918A5 +:10EDA00043F10000C4E906101A9A12B140F2E2429F +:10EDB0000AE09BF80020C2F38102022A02D040F64A +:10EDC000C41201E040F6A662891840F10000C4E9CF +:10EDD000061056F8130FA0637068E063307A84F869 +:10EDE0004000B07B133E400900E030E084F848006A +:10EDF00021462846FEF73BFCD4E90601C01E41F13E +:10EE0000FF31C4E906010E200DF024F830B1787905 +:10EE10000122C0F300111A98FEF752FDAC690246B8 +:10EE2000241D06F10C03E178204621F07C010C3111 +:10EE3000E17059460095FFF7EFF860782A4620F018 +:10EE40000300607099F80010504601F077FBB9F8A4 +:10EE5000002001AB5146FFF71BFF10B0BDE8F09F4B +:10EE6000287A00203075002010B5002204490120C6 +:10EE70000DF0B6FFBDE8104020210248F5F70BBBAE +:10EE800048460200287A0020017901F00301012997 +:10EE900003D1808810F4FF5F01D00020704701206B +:10EEA000704770B5064614460D4609200CF0E8FE82 +:10EEB00030B1224629463046BDE8704000F0D2B855 +:10EEC00000200CF0DDFE002806D022462946304600 +:10EED000BDE8704000F052B870BD00002DE9F84365 +:10EEE0000D46088823499846914651F820401A2635 +:10EEF00010460EF0B3F828B301282CD0022802D017 +:10EF00000220BDE8F8832846FEF754FF060022D110 +:10EF10000E22294604F1C000F5F796FA012104F506 +:10EF200099700CF0A7FF70B104F1A80201231746F5 +:10EF300029462046FEF7CEFC2888012318223946B0 +:10EF400001F02CFF07E0A07978B1298804F188024C +:10EF50001A20FFF781F92888009033464A46414637 +:10EF60000548FFF73FF80020CBE72878214601F05D +:10EF70008FFEF0E7287A00202600010070B51446C5 +:10EF80000E46054614234FF40062052129200EF099 +:10EF900003F90122027045704680002115B13C2D15 +:10EFA00027D032E01B4A52F826209279027123784A +:10EFB0004371002A16D0D4F80320C0F80620B4F814 +:10EFC0000720428134F8192F82816288C281A28889 +:10EFD000A4F11904028203D094F824104FEA5111CD +:10EFE000817412E0D4F80920C0F80620B4F80D208E +:10EFF000E7E7027141718181C1810182418054F84A +:10F00000031FC0F80610A1884181BDE870400EF0D2 +:10F0100023BA0000287A00202DE9F041104EC2F3F7 +:10F020000B2510460C4656F825700EF017F898B1CF +:10F03000012811D0B86954F8011F81636168C16368 +:10F04000A1680164E168416456F8250080790128CF +:10F0500002D1284602F0AAF80020BDE8F0810000A5 +:10F06000287A002070B514460D4606461F234FF43B +:10F07000006205212B200EF08FF80A2101704670E6 +:10F080004580F6B9144951F8251089790171227823 +:10F090004271002919D0D4F80310C0F80610B4F852 +:10F0A0000710418134F8191F018361884183A188C9 +:10F0B000A4F11904818304D094F824104FEA51116B +:10F0C0008177BDE870400EF0C7B9D4F80910C0F8D8 +:10F0D0000610B4F80D10E4E7287A00202DE9F0417D +:10F0E0002248C2F30727904650F827400E460025D5 +:10F0F00040460DF0B3FF022801D0022527E0B0788A +:10F1000030B1D4F89C0160B3E079C00729D104E0A4 +:10F11000E07920F00100E07119E0A0690079C0F306 +:10F12000810002281DD0122104F599700CF0A2FE76 +:10F13000C8B1E07940F00100E0717079B17940EA3E +:10F1400081102072B6F803002082002060823B46C6 +:10F150002A4642F256014046FBF798F90020BDE8E6 +:10F16000F0810C25F3E71A25F1E70000287A00204A +:10F170002DE9F0411748C2F30726174650F82640FC +:10F180008846002510460DF069FF022801D00225AF +:10F190000FE098F80200B0B1D4F8A001B8B1A069AE +:10F1A000007900F00300022811D0E07940F002005D +:10F1B000E07133462A4642F257013846FBF766F9BA +:10F1C0000020BDE8F081E07920F00200F0E70C2596 +:10F1D000EFE70000287A00202DE9FF47002088464D +:10F1E0008DF80C00C2F307204C498146924651F835 +:10F1F000297003AA514601F045FA02286AD09DF809 +:10F200000C0000287FD198F8040008285DD24449FA +:10F2100051F82060F6B3B07AC00756D0232006F02C +:10F220007DFA050055D0A88805F10C0420F4FF50A4 +:10F2300000F58C60A8801C202873B8F80200A5F89F +:10F240000D00122206F16001E01CF5F7FDF8B0890F +:10F25000401EA4F81300B089401EA4F81700B86F30 +:10F26000B7F89210CDE900100294D7E91A23D6E935 +:10F270002201FEF74BFCB06DC17D607E61F303009F +:10F2800028496076097861F347106076B06D817D1A +:10F29000012000E019E08840A076B06D807A002857 +:10F2A000607E1AD040F01000607698F804001E4985 +:10F2B00000EB400001EB400101F18000D1F8FE10AD +:10F2C000C4F81B10B0F8820011E042208DF80C0049 +:10F2D00019E0022004B0BDE8F08720F0100060764D +:10F2E0001148D0F83411C4F81B10B0F83801A4F854 +:10F2F0001F00B7F89200A4F82100398800232A469D +:10F30000504601F02BFD4B469DF80C2042F25B016C +:10F310005046FBF7BBF80020DCE70000287A00200D +:10F32000487A0020F4010020307500202DE9FF47C5 +:10F33000002089468DF80C00C2F307205249804610 +:10F34000924651F8287003AA514601F09BF9022811 +:10F350007ED09DF80C0000287BD1B9F80400082865 +:10F3600078D24A4951F82060002E73D0232006F04D +:10F37000D5F904006FD0A08804F10C0520F4FF50EB +:10F3800000F58C60A0801C202073B9F80200A4F85E +:10F390000D00207C40F2E24220F080002074D6E98B +:10F3A00014010023F5F70CF8A5F805007069406B0F +:10F3B000C069C5F807007069406B90F82010E87AC2 +:10F3C00061F30400E872717861F34710E8727069C4 +:10F3D000406B0069E8607069406B818A2982807D9A +:10F3E000A8747089A5F813007089A5F81700B86F84 +:10F3F000B7F89210CDE900100295D7E91A23D6E9A3 +:10F400001601FEF783FB96F8291015F8190F61F322 +:10F410000300287096F8281061F304101C49287026 +:10F42000097861F3471028707069406B0079C0F368 +:10F430008101012088406870F06BC5F80200B6F8C1 +:10F440004000E880B7F89200401E2881398803E028 +:10F4500010E006E011E014E000232246504601F0DF +:10F460007DFC43469DF80C2042F25A015046FBF7C2 +:10F470000DF8002004B0BDE8F08742208DF80C00A4 +:10F48000EFE70220F6E70000287A0020EC7A00205F +:10F49000F401002070B51048C2F30725194650F852 +:10F4A000254005230D480DF077FEA0F801500221FC +:10F4B00001706CB100210170A1690979C1F381016A +:10F4C000491C0171A169097901F00301491CC1704E +:10F4D0000DF0C2FF002070BD287A0020300001002E +:10F4E0002DE9F0472548C2F30727914650F82740F9 +:10F4F0000E46002548460DF0B1FD022801D0022538 +:10F5000032E0D4F89C010DF09FFC0020C4F89C016F +:10F510000021E069FEF772FDB07828B33079811ED2 +:10F52000072901D312251FE0401CC0B280460021EC +:10F530000EF0E4F8C4F89C0168B14246311DF4F7BE +:10F5400083FFA069F17810F8202F61F34512027053 +:10F55000606910B104E0072506E006F05DF860611F +:10F560000146E069FEF74AFD3B462A4642F2540155 +:10F570004846FAF78BFF0020BDE8F087287A002084 +:10F580002DE9F0471A48C2F30726914650F8265055 +:10F590000F46002448460DF061FD022801D00224E8 +:10F5A00019E0D5F8A0010DF04FFC0020C5F8A0012E +:10F5B000F878811E072901D312240CE0801CC0B208 +:10F5C000804600210EF09AF8C5F8A00168B14246C5 +:10F5D000B91CF4F739FF3346224642F2550148463A +:10F5E000FAF754FF0020BDE8F0870724F3E7000096 +:10F5F000287A00202DE9FF5F0C4602984949C0F3A4 +:10F6000007294FF0020851F829500DF027FD002876 +:10F6100075D0012873D0022803D0022004B0BDE8C1 +:10F62000F09F002D6BD0E878FF2801D03A2051E000 +:10F63000A0784FF01108C10702D1E17800295ED00F +:10F64000810701D42179E9B3C00706D1E0780CF035 +:10F650001DFCB8B3E07885F8D100A078800706D407 +:10F6600020790CF013FC68B3207985F8D20060791A +:10F670004FF0010B00F00300012802D0022806D150 +:10F6800002E085F898B102E0002085F89801A078A2 +:10F690004FF00008C043800731D04FF0160A85F8BC +:10F6A00003A0032006F03AF8060012D0B08806F155 +:10F6B0000C0720F4FF506030B08086F80CA0E21CEC +:10F6C000394600E01BE02846FFF75CFAA87918B13C +:10F6D00008E00720804612E03888A5F8CE00B87808 +:10F6E00085F8D000BA787978284601F05BFF0123CD +:10F6F00032464946029801F031FB85F805B0424692 +:10F7000042F232010298FAF7D5FEA078C043800792 +:10F7100005D100234A460521029801F071FB002023 +:10F720007CE70000287A00202DE9F0411248C2F35E +:10F730000724164650F824708846002510460DF020 +:10F740008DFC30B1012804D0022804D00220BDE88D +:10F75000F081022507E0D8F80210C7F8A411B8F824 +:10F760000600A7F8A80123462A4642F25C0130466B +:10F77000FAF78CFE0020EAE7287A00202DE9F04114 +:10F780000888134F90460C4657F820600C25104609 +:10F790000DF064FC90B1012810D0208857F820109B +:10F7A00091F83A1149074FF0060102D501F046FEE3 +:10F7B00001E001F04BF9FF20B070002523882A46B4 +:10F7C00042F21B014046FAF761FE0020BDE8F081DD +:10F7D000287A00202DE9F04117460C460C251046EA +:10F7E0000DF03CFC58B3012829D020233A460321D0 +:10F7F00018480DF0D1FC06462088174D102255F808 +:10F80000201006F1100001F5A371F4F71DFE10227F +:10F81000A11C3046F4F718FE20881022A11C55F8D0 +:10F82000200000F5AB70F4F70FFE2188012055F899 +:10F83000211081F8660130460DF00EFE0025238868 +:10F840002A4642F21A013846FAF720FE0020BDE8A7 +:10F85000F081000011000300287A002070B50546F1 +:10F86000012000EB052605F059FF040001D001201E +:10F8700000E00020D82209A1F6F7B6F81221217382 +:10F88000A088224620F4FF502030A0802946304630 +:10F89000BDE87040012301F061BA0000626C655F51 +:10F8A0006C6C635F6374726C2E6300002DE9F04131 +:10F8B00018460E460146174600250A230F480DF04C +:10F8C0006BFC044638460DF0C9FBA0B130880C49EA +:10F8D00051F8201001F58070D1F82811616090F87E +:10F8E0002C00207225703088608020460DF0B4FD19 +:10F8F0000020BDE8F0810C25F4E70000270001009E +:10F90000287A00202DE9F0411F4690460D460C2430 +:10F9100010460DF0A3FBA0B1012812D0022802D09E +:10F920000220BDE8F08128880B4E002456F82010F4 +:10F93000897971B101F068FB2988012056F82110FE +:10F94000487123464246394604480BF056FC0020D5 +:10F95000E7E7FFF7E9F8EFE7287A00202800010041 +:10F9600070B516460C46002510460DF077FBB8B171 +:10F97000012815D020883B220F2101F04FF80221E9 +:10F9800030460DF0E9FD2188064AFF2052F821108B +:10F990002A468870238842F221013046FAF776FD24 +:10F9A000002070BD287A00202DE9F0470D46098817 +:10F9B000DFF8888091460C27C2F30B2458F82160A9 +:10F9C00048460DF04BFB50B1012808D0022802D068 +:10F9D0000220BDE8F0872846FEF7ECF907462B88A1 +:10F9E0003A4642F220014846FAF750FD4FB1204610 +:10F9F0003B220F2101F012F8022148460DF0ACFD28 +:10FA000011E058F82410887978B106F1A802002393 +:10FA1000144629463046FDF75DFF2888002318224A +:10FA2000214601F0BBF90020D3E7E0B22A4601F0FD +:10FA3000EBF8012086F86E01F5E70000287A002037 +:10FA40002DE9F0410D462149C2F30B20174651F82C +:10FA50002040002610460DF001FB70B101280CD0AB +:10FA60001B4A6888B2F84D11884204D8A988B2F8B8 +:10FA70004F21914203D912261DE00C261BE0B4F859 +:10FA80008821904203D1B4F88A21914213D0E178C1 +:10FA9000FF2901D02A260EE0A4F87801A888A4F84E +:10FAA0007A0100221146204601F07CFD84F88C0189 +:10FAB0002888FEF7D5FC2B88324642F222013846D0 +:10FAC000FAF7E4FC0020BDE8F0810000287A00206D +:10FAD000307500202DE9F0472848C2F30B279046E7 +:10FAE00050F8274099460E461A2540460DF0B6FAC2 +:10FAF00088B3012838D0022836D1A07958BB00211C +:10FB000004F599700CF0B6F928B3D6F80200C4F8E1 +:10FB10003C01D6F80600C4F840017089A4F84401FD +:10FB2000102206F10C0104F5AB70F4F78DFC0120F6 +:10FB300084F8660194F83A0140F0080084F83A012C +:10FB4000810709D040F0040084F83A0100253846C6 +:10FB500000F06CFB04E007E03846FEF7C7FE002526 +:10FB6000032140460DF0F8FC2B4642464946044826 +:10FB70000BF043FB0020BDE8F0870000287A00204E +:10FB80002900010070B50A49C2F30B25104651F84F +:10FB900025400DF063FA40B1012806D02CB1FF20BA +:10FBA000E0702221284601F0DDFD002070BD00003C +:10FBB000287A002030B40124FF210C2B1CD00BDC50 +:10FBC000022B1DD003DCB3B1012B11D113E0072BA5 +:10FBD0001CD00B2B0CD11BE0112B17D004DC0D2BF0 +:10FBE00014D00E2B04D106E0182B04D0192B05D00D +:10FBF000C2789A4213D1047130BC7047C170FBE7E0 +:10FC000090F8691130BC104601F0ACBD8170F3E78B +:10FC100080790028F0D130BC1046FEF767BE8278AC +:10FC2000521C9A42F2D0E7E72DE9FF4F81B0DFF88E +:10FC3000F4A103980C46C0F30B250E795AF82590D1 +:10FC4000C98822890027B9F80E001144BB468142B9 +:10FC500001D8012000E0002040F2527272A1F5F7B5 +:10FC6000C3FEE088218942185AF82510CB899A1AD8 +:10FC7000CA815AF82500E288B0F872111144A0F840 +:10FC80007211608918B1C1B2284600F021FA2468C7 +:10FC9000B2E0002F78D1204602F0EEFCA9F8260150 +:10FCA0002089C0F30C08B9F8920001280CD85FEA4B +:10FCB000487009D45AF82500503001F099F95AF8E3 +:10FCC0002510002081F86C015FEAC86009D56079D1 +:10FCD000400606D52146484600F030FE2089C0F394 +:10FCE0000C0818F03E0F11D05FEA487002D5BBF146 +:10FCF000000F02D038F0040003D04FF0010B89F858 +:10FD000070815FEAC8603FD501273DE05AF82520A1 +:10FD1000002182F86D115AF82500503001F068F981 +:10FD20005FEA486030D4A08810F4FF5F2CD05AF806 +:10FD3000250090F83A1189070ED0D0F890213E485E +:10FD400003990DF06FFC5AF825000399D0F894211F +:10FD50003948401C0DF066FC20795AF8251000F057 +:10FD60000308A08891F83A11C0F34710890701D51C +:10FD7000001F80B24146B8F1010F09D0022907D017 +:10FD8000B8F1030F1DD110E0204605F00EFD32E062 +:10FD90002A490978090714D5009004F118032A4666 +:10FDA0004FF001014FF0030009E024490978C9062A +:10FDB00007D5009004F118032A460121042011F010 +:10FDC00057FD4046B8F1010F09D0022807D0B8F11D +:10FDD000030FD9D121462846FEF78CFAD4E7607983 +:10FDE000400604D521464846039A00F095FE214678 +:10FDF0002846FEF7A9FC24683000A6F10106F6B2F9 +:10FE00007FF447AF1FB13D21284601F0ABFC5AF803 +:10FE10002500C08910B903980DF03EFA05B0002006 +:10FE2000BDE8F08F287A0020626C655F6C6C635FC0 +:10FE30007461736B2E630000380001001C00002009 +:10FE40002DE9FF4F7B4FC2F30726002557F82640C8 +:10FE500085B09A4691468B46002C7CD0206D0028B8 +:10FE6000FBD048460DF0FAF8002875D0012800D1E3 +:10FE70000125206D06F0D6FE4FF00008C4F8508032 +:10FE8000002D6AD194F868010028FAD194F86A012B +:10FE90000028F6D169462046FDF7BBFF6B46324687 +:10FEA00049462046FDF7E9FF53464A46694605980C +:10FEB000FFF7BAFE48460DF0D1F801284DD0A4F85E +:10FEC0009680E069A063A069A1794079C0F3C00081 +:10FED00021B994F8401011F00C0F26D028B305F08A +:10FEE00009FE050001D0012000E0002040F6FF22BD +:10FEF00051A1F5F779FD687920F020006871287923 +:10FF000040F010002871A069417921F00801417189 +:10FF1000F4F798FD0022294604F12800F6F72EFE9A +:10FF2000206B00B92563F4F797FDF4F78BFD606B48 +:10FF300010B905F0DFFD6063F4F78EFDA069D4F819 +:10FF40009C11001DFDF786FBA07901254FF0040AE6 +:10FF5000012807D002E068E068E052E094F8A200CF +:10FF600018B32CE094F84400400716D4BBF80A00FC +:10FF700088B1A06994F84810001D05F089FEC4E915 +:10FF80001C01A26F801841EB0801C4E91A01B4F802 +:10FF90008400C4F8800084F8A25084F84880224687 +:10FFA0003146484600F0CAFA10E094F84400400791 +:10FFB00005D484F8A25004F1500001F019F822464B +:10FFC00031464846C4F840A000F046FAC4F844A0C0 +:10FFD00000282BD048460DF041F8012857F826009C +:10FFE00007D090F86C1111B190F8A20020B1082050 +:10FFF00003E090F8680100E03E2057F8261081F8F1 +:020000040001F9 +:10000000680104F1200005F0E7FC04F1280005F088 +:10001000E3FC94F86A0118B194F8690184F8680166 +:1000200000223146484601F077F9002009B0BDE8CA +:10003000F08F0000287A0020626C6535305F6C6CB0 +:10004000632E63007FB506460B49C2F307201D46A9 +:1000500051F820000021ADF80610ADF80810144644 +:100060006946FDF7D6FE2B46224669463046FFF725 +:10007000DBFD04B070BD0000287A0020002070472E +:1000800070B5054601200C4600EB05220E23052124 +:1000900008480DF081F805210170641C4580218914 +:1000A00081812168416061688160BDE870400DF028 +:1000B000D3B900002C000100044951F8200010B110 +:1000C00090F88D017047FB2070470000287A0020CF +:1000D00070B504460E460125052105EB04222223B6 +:1000E00004480DF059F8448046820570BDE8704020 +:1000F0000DF0B2B9200001002DE9F04107463B4860 +:100100000E4650F8264004F15005A879012804D085 +:10011000022817D0032865D11AE0D5F80700A86394 +:10012000D5F80B00E863E87B85F84000284600F02E +:100130005FFF29462046FDF79AFA31463846FEF71A +:10014000A9F84FE005F110013046FDF70BFF49E03B +:10015000A0790028A87D24D038B1FEF78FFD014694 +:10016000A069027961F301020271687D38B1FEF77E +:1001700085FD0146A069027961F3830202710022C4 +:100180001146204601F00EFA00233246052138467A +:1001900000F036FEA0690179C1F38101022914D073 +:1001A00017E038B1FEF76AFD0146A069027961F3F4 +:1001B00083020271687D0028E1D0FEF75FFD0146F1 +:1001C000A069027961F30102D8E7E17921F0010128 +:1001D000E171007900F00300022803D1E07920F0FA +:1001E0000200E0710020A871BDE8F081287A0020AB +:1001F00010B50446012000EB04210A4850F8240001 +:1002000090F83A2142F0040280F83A214FF47A62E1 +:1002100005480DF0EBF92046BDE81040032100F041 +:1002200077B80000287A00203A0001002DE9F0415B +:100230000546012000EB052605F070FA040000F1E8 +:100240000C0701D0012000E00020F02208A1F5F702 +:10025000CBFB0A203870A088224620F4FF502030C3 +:10026000A08029463046BDE8F041012300F076BD6C +:10027000626C655F6C6C635F6374726C2E6300000C +:100280002DE9F0410446204D012000EB042655F8ED +:100290002400DFF878803146876940460CF064FD21 +:1002A000387920F0F000387155F8240090F83A11B0 +:1002B00021F0030180F83A113146A8F102000CF058 +:1002C00053FD3146A8F101000CF04EFD55F8240015 +:1002D000807958B1304603210DF03EF93146404651 +:1002E000BDE8F0414FF47A620DF080B90321204659 +:1002F00000F00EF855F8240090F83A1141F0100182 +:1003000080F83A11BDE8F081287A00203A00010017 +:100310002DE9F04705468946012005F0FFF9DFF891 +:100320006480040000F10C0758F82500866906F186 +:10033000040601D0012000E0002040F2051212A1C5 +:10034000F5F752FB0B203870A08820F4FF502030C6 +:10035000A080307820F0A000307058F8250090F888 +:100360003A1121F0020180F83A11012000EB05203A +:1003700049460DF0F1F829462046BDE8F04700F067 +:100380000BB80000287A0020626C655F6C6C635FBC +:100390006374726C2E6300000D4A30B452F8213041 +:1003A00093F83A31DB0707D083884FF0806404EB81 +:1003B00073334FEAF3438380037943F003030371FC +:1003C00052F82120014630BC1046FEF7D5B8000097 +:1003D000287A00200840810701D502207047C10714 +:1003E00001D001207047400701D50420704701204B +:1003F0009040C0B2704770B50446C0780D46FF28E3 +:1004000029D194F85600032825D0E179C80722D0D5 +:10041000208A40B1618A491C89B2618281421AD323 +:100420000020608202E021F00100E071022005F06E +:1004300075F902000FD09188284621F4FF51403110 +:1004400091801A211173217A51732188BDE870407F +:10045000012300F083BC70BD2DE9F047814690690F +:1004600086B04FF00008A0F86A8090698A46154669 +:10047000A0F86880906902F15004474641794646E9 +:1004800021F00401417149462846FFF7B4FF00BF3F +:10049000B4F84200A188884205D1A07918B151462C +:1004A0004846FFF729FEB4F84200B4F844108842E9 +:1004B00003D1082006B0BDE8F087A9692846091DC8 +:1004C000FDF74AF8E06A049028881B490091CDE9BD +:1004D00001600396D4E906016FF0FD02801841F136 +:1004E000FF314FF4BC6304AA06F0C8F82060A96984 +:1004F000B4F842004883D4E90620A16A511870413B +:10050000C4E90610B4F84200401CA4F84200206878 +:1005100050B1049840F27121FE38B0FBF1F0A969A6 +:10052000C885A969888505E07F1CBFB2642FAFD953 +:100530004FF043084046BDE7511301002DE9F74F46 +:1005400002F150048346D4E90B101546FE2286B012 +:1005500002EB40028F180497A16A6FF095024FF0EA +:10056000000902EB5101C846884234D2A86900262E +:10057000A0F86A60A869A0F86860A869417921F0CC +:100580000401417159462846FFF735FFA8693B49E8 +:100590000079C0F3810200F0030031F8122031F835 +:1005A00010004FF4BC61104400F5CA70884200D8B6 +:1005B00008468246B4F84200A188884205D1A07955 +:1005C00018B158460799FFF797FDB4F84200B4F800 +:1005D0004410884203D1082009B0BDE8F08F049789 +:1005E000A9692846091DFCF7B7FF2888244900910E +:1005F000CDE901600396D4E90621206B5346101A19 +:1006000061EB06016FF0FD02801841F1FF3104AA91 +:1006100006F034F82060A869B4F842104183D4E9A8 +:100620000620A16A51187041C4E90610B4F84200CE +:10063000401CA4F84200A18E206B0844206320686F +:1006400088B194F8520028B1A869216B001DFF22DF +:1006500006F09EFF049840F27121FE38B0FBF1F0E5 +:10066000A969C88508E008F101001FFA80F8B8F10F +:10067000640F9FD94FF043094846ADE7C63E0200DC +:100680005113010070B514460E4A52F82050084626 +:100690000CF0E4FC20B1012802D0022810D101E0C6 +:1006A00002200AE0192105F599700BF0E3FB18B15F +:1006B00095F8A20020B101E01A202070002070BD42 +:1006C000022070BD287A002070B50546807801268A +:1006D0000F2814D003DC90B1012804D113E01628B0 +:1006E00014D0182812D095F856000026012806D0FC +:1006F000022808D0032809D0A87968B119E00F2989 +:1007000019D0C1B106E0012915D003E0162912D095 +:10071000182910D02A240FE0E8780F28EFD004DC45 +:100720000028ECD0012804D1EDE71628EED01828D7 +:10073000ECD0002070BD23242888224600F06EF9FA +:100740001EB12888214601F00DF8012070BD00007F +:10075000F8B51D4616460F46C2F30B2410460CF0A2 +:100760007DFC0100194812D0012910D00023324627 +:1007700029460094FDF736FC154D55F8240090F8F5 +:10078000DA1059B12146002000F044F81BE00C2398 +:10079000324629460094FDF725FC14E0C178FF2974 +:1007A00001D00220F8BD0021017108484FF47A629F +:1007B00031461F300CF01AFF55F824100C20C87079 +:1007C000388801F03DF80020F8BD00001B00010052 +:1007D000287A002070B5064615460C4603200BF01B +:1007E0004FFA002813D0012000EB04220C2305212E +:1007F00007480CF0D1FC0421017046704480296840 +:10080000416069688160BDE870400CF025BE70BD34 +:100810002B00010070B50C460546012000EB0422B8 +:100820000A2305210C480CF0B7FC0C4905704480E4 +:1008300051F82420B2F8D620C28051F82420B2F812 +:10084000D820028151F8241091F8D4100171BDE82C +:1008500070400CF001BE00001F000100287A00204B +:1008600070B518460D4601461646062311480CF091 +:1008700093FC044630460CF0F1FB01004FF0000001 +:100880000DD001290BD0207028880B4951F8200089 +:100890000A4990F8260191F84211084401E00C2120 +:1008A000217020712888608020460CF0D5FD002042 +:1008B00070BD00001D000100287A00203075002066 +:1008C0002DE9F04118460E4601461546C2F30B27A6 +:1008D000062317480CF060FC044628460CF0BEFBCB +:1008E00001004FF000000AD0012908D02070B17833 +:1008F000642531B101290AD0122121700EE00C21AA +:10090000FBE70C4850F8270090F89A0002E00A48EC +:1009100090F8450111F05CF890FBF5F020713088FB +:10092000608020460CF098FD0020BDE8F0810000BA +:100930001C000100287A0020307500202DE9F843C2 +:10094000064688880C46C0F34710001FC7B2102F18 +:1009500062D800210D200CF015FC05460021102066 +:100960000CF010FC8046B069816D296090F85C1035 +:100970002971B07910B141F0800001E001F07F00F1 +:100980002871B069816CC5F80510C06CC5F8090004 +:1009900010214046F3F77FFD012188F801102079EE +:1009A00000F0030040F0200188F80210F4F74AF844 +:1009B00001F006F80097B06904F118033830424698 +:1009C0002946FCF7B1FF8146B06929463830FDF76A +:1009D00023FFE21989EA00009169884210D1A068DA +:1009E00020F01000A060B26952F8581F1079491C1D +:1009F00000F07F0343F1000363F306001160107100 +:100A0000F4F72AF801F0F2FF28460CF01DFA4046F0 +:100A1000BDE8F8430CF018BABDE8F88370B5064697 +:100A200014460D46032004F079FE0246918821F415 +:100A3000FF5160319180112100F80C1F3146457043 +:100A40008470BDE870401046FFF7A6BC2DE9F04168 +:100A500005460E46022004F061FE040000F10C077A +:100A600001D0012000E0002040F289120BA1F4F730 +:100A7000BBFF0E49002051F8251081F83A010D20E6 +:100A800038707E70A088294620F4FF504030A08046 +:100A90002046BDE8F041FFF77FBC0000626C655F57 +:100AA0006C6C635F6374726C2E630000287A0020A4 +:100AB00070B5054601200C4600EB05220B230521ED +:100AC0000A480CF069FB401C062100F8011C641C5C +:100AD00005806188818021884180A188C180E1886A +:100AE0000181BDE87040401E0CF0B6BC2D00010035 +:100AF00070B510460D46C2F30B240CF0AFFA48B1A6 +:100B0000012807D0022801D0022070BD2978204694 +:100B100000F0DAFC002070BD2DE9FC470546806935 +:100B20000E46144690F82010890601D4022700E0F2 +:100B3000012790F8220000F07F08F07900065CD5CC +:100B40006869002859D0307C810908D002214FF013 +:100B50000008B1EB901F01D1022700E0012700F04F +:100B60001F00394610F06DFF814601200CF054F94A +:100B7000002842D10E2101EB4903224605212048DD +:100B80000CF03EFE040038D0162020702888A4F80F +:100B90000100A8693B464A460079C0F38100401C29 +:100BA000E070B07900F03F002071F088C0F387104A +:100BB00040B200EB80004000A4F80500114890F816 +:100BC000FC02E071307C8009207267720020A07204 +:100BD000B5F89200401EA4F80B0084F80D90A969A6 +:100BE00004F10E006C31CDE90018696910F030FF96 +:100BF0002046BDE8FC470CF02FBCBDE8FC87000098 +:100C000032000100307500202DE9F0410746904682 +:100C10000E460C2004F082FD050000F10C0401D00A +:100C2000012000E000204FF4877215A1F4F7DCFEEC +:100C3000234606F1A80241463046FCF79FFF543692 +:100C40000120B07061893180D4F80110C6F803101A +:100C5000D4F80510C6F80710617AF17200212170EE +:100C6000A98800EB072021F4FF5101F5C071A9808C +:100C70002A463946BDE8F041002300F06FB8000075 +:100C8000626C655F6C6C635F7461736B2E630000F4 +:100C90002DE9F04107460D460C2004F03FFD06000B +:100CA00000F10C0401D0012000E000204FF490720C +:100CB0001BA1F4F799FE5435012085F81A01002193 +:100CC000217095F834206270B5F835206280B5F84F +:100CD00074202281B5F87220E280B5F86E20A280DF +:100CE000EA8F0A326281A87062892A80D4F80120D2 +:100CF000C5F80320D4F80520C5F80720627AEA7207 +:100D00002170B18800EB072021F4FF5101F5C0717B +:100D1000B18032463946BDE8F041002300F01EB8EC +:100D2000626C655F6C6C635F7461736B2E63000053 +:100D300070B5144605460A460423052106480CF002 +:100D40002BFA002807D01721017044704580BDE8B8 +:100D500070400CF081BB70BD3300010070B50C46D3 +:100D60001546014683B10B482A7B50F82430DA70CF +:100D700050F8243000221A7150F8240042714FF4C8 +:100D80007A6205480CF032FC21462846BDE87040E6 +:100D9000FFF702BB287A00203A0001002DE9F04756 +:100DA0000546012000EB05291F46884616461046D9 +:100DB00004F0B4FC0446324641460C30F3F744FBE1 +:100DC000A08866F34C10A0807FB10B4898F8001003 +:100DD00050F82520D17050F8250000214FF47A6298 +:100DE0000171494605480CF001FC29462046BDE842 +:100DF000F047FFF7D1BA0000287A00203A0001003E +:100E00002DE9F0410746134815461E4650F8254087 +:100E100088460B200AF034FF002819D006233A46F2 +:100E200041460D480CF0B8F946700C210170458020 +:100E3000A1690979C1F38101491C4171A16909794D +:100E400001F00301491C0171BDE8F0410CF004BB45 +:100E5000BDE8F081287A00203100010010B5084B70 +:100E60000C3000210268C47812BA22F0FF0222433B +:100E700043F82120001F491C0429F3DB10BD0000AA +:100E8000100008402DE9F0410E4608881A4917461F +:100E90000C2551F8204010460CF0E0F8F8B101287C +:100EA0001FD0E4B1B4F88D307288B4F88B105B1C9D +:100EB000D0005943884213D31201C4E9642094F846 +:100EC0003A0180070AD039460C480CF0ABFB0B48BE +:100ED0003946401CD4F894210CF0A4FB002500E016 +:100EE000122533882A4640F67C413846F9F7CEFA77 +:100EF0000020BDE8F0810000287A002038000100C1 +:100F00002DE9FC4792461046C2F30B250C260CF047 +:100F1000A5F838B1012805D0324C54F82500817964 +:100F2000F1BB02E00020BDE8FC87002600F59470CC +:100F300005222D49F3F7C1FA90B354F82500C17882 +:100F4000FF2901D00220EEE72849D1F83B21009289 +:100F500091F83F118DF8041090F8491080690079DC +:100F6000C0F38100014228D0052168460AF062FEE4 +:100F700054F8251091F84A1081421ED9081AC1B2BE +:100F800000204FF001096A46C70800F0070C09FA73 +:100F90000CF312F807C0DBB21CEA030F09D100E022 +:100FA00019E04CEA030C891E02F807C011F0FF019A +:100FB00003D0401CC0B22528E6D954F82510009A69 +:100FC00001F58070C1F82D219DF8041080F83110D2 +:100FD0002846FCF7A5FE324642F214015046F9F7C6 +:100FE00043FA9FE7287A00206B76002030750020B6 +:100FF0003B3081880288C900B1FBF2F1B0F80720CC +:101000001144A0F80910704770B50646092004F095 +:1010100085FB040000F10C0501D0012000E0002058 +:1010200040F2B9120BA1F4F7DFFCA08820F4FF50C6 +:1010300000F59070A0800E202870681C0AF0F4FE65 +:10104000012000EB062022463146BDE87040012316 +:10105000FFF784BE626C655F6C6C635F6374726C77 +:101060002E6300002DE9F04105464E480E46ED1D69 +:1010700050F826404C484FF0010808EB0627D0F8FE +:10108000FD12C4F8A411B0F80103A4F8A80115F8E2 +:10109000050CA071A869C4F82801287F84F82C01E8 +:1010A000A869C4F82D01287F84F831011B20A4F819 +:1010B0007C01A4F880014FF4A4703B49A4F87E01A0 +:1010C000A4F88201B1F85221ED1F002A62D0A4F8E1 +:1010D0007821A269127902F00302022A53D0B1F8F2 +:1010E0005421824200D91046A4F87A01B1F84B018C +:1010F000A4F87601B1F84901A4F874010022114660 +:10110000204600F04FFA032084F83201042084F8CE +:101110003401002084F8DA00E08184F83A0184F890 +:101120006C8184F86D0184F86E0184F86F0184F895 +:10113000680184F86B0184F870014BF68030C4F8C4 +:1011400090014010C4F894010020C4E96C00022111 +:1011500038460CF001FA2A4631460020FDF7A1FE80 +:1011600004235A02052127200CF016F814210170DF +:10117000A0F80160A169097EC1F38011C170BDE8CA +:10118000F0410CF069B9B1F854014FF42962904272 +:10119000AAD8A8E7B1F84D01A4F87801B1F84F0139 +:1011A000A2E70000287A00203075002070B50446C0 +:1011B000012004F0B3FA050000F10C0601D0012073 +:1011C00000E0002040F2E91220A1F4F70DFCA8880D +:1011D000224920F4FF502030A88051F82400836970 +:1011E000002050331A79186060F306021A7151F822 +:1011F0002420936958331A79186060F306021A7133 +:1012000051F82430C3E96C000520307051F82400F7 +:101210008269107940F08000107151F8242040F06C +:1012200020009269107151F824002A4690F83A1172 +:1012300041F0020180F83A11012000EB0420214620 +:10124000BDE870400123FFF789BD0000626C655F57 +:101250006C6C635F6374726C2E630000287A0020EC +:101260002DE9F0470446012000EB042904F056FA6A +:10127000DFF88C80054600F10C0758F824008669D9 +:10128000361D280000D001204FF4B3721DA1F4F7E1 +:10129000ABFB06203870307820F0C00040F0300002 +:1012A000307058F82400464690F83A1141F0030196 +:1012B00080F83A1158F824008179C9B1D0F890210A +:1012C000494614480CF0AEF956F824004946D0F8C7 +:1012D00094211048401C0CF0A5F9A888214620F460 +:1012E000FF502030A8802846BDE8F047FFF754B8EB +:1012F00008484FF47A624946801C0CF077F9ECE715 +:10130000287A0020626C655F6C6C635F6374726C3A +:101310002E6300003800010070B505460A480C46EF +:10132000164650F82400CAB2314690F86831284673 +:10133000FDF730FA294605480BF016FD21462846F0 +:10134000BDE87040FDF736BC287A00203A00010065 +:101350002DE9FF47804635490C9851F82040FE2082 +:10136000A5692D1D161843F1000724B1A06A4FF09E +:10137000000920B110E0002004B0BDE8F087606BE8 +:1013800010B904F0B7FB60630146002204F12800A5 +:10139000F5F7F4FBC4F83490D4E90A01C4E9080174 +:1013A00004F12800F5F728FCC4F83090206A686042 +:1013B000606A4B46417941F020014171017921F089 +:1013C00010010171216A01602846FCF714FDC8B1C3 +:1013D000607A78B16372D4F8A00100B1012040F2C4 +:1013E000A12213A1F4F700FBD4F8A0112846491C50 +:1013F000FCF730F932463B462846CDF8008004F031 +:10140000D1FBB9E7281FCDE90008E978ADF80C3029 +:10141000C1F384018DF80810ADF80A302A6F6946CF +:101420004FF0021005F0A6FCA5E70000287A002086 +:10143000626C6535305F6C6C632E63002DE9F041A2 +:1014400005460E46022004F069F9044600F10C0737 +:10145000012000EB0528200000D0012040F20A22E4 +:1014600013A1F4F7C1FAA08820F4FF504030A08007 +:10147000022038707E70132E00D11626104F0123E3 +:10148000224657F82500294680F869614046FFF753 +:1014900065FC57F82500B0F88F204FF4FA708242AF +:1014A00000D302464146BDE8F04106480CF09EB824 +:1014B000626C655F6C6C635F6374726C2E630000BA +:1014C000287A00203A0001002DE9F04106460D4639 +:1014D000022004F023F9040000F10C0701D00120E0 +:1014E00000E000204FF4097208A1F4F77DFAA0880B +:1014F000314620F4FF504030A080072038707D70C6 +:101500002046BDE8F041FEF747BF0000626C655F12 +:101510006C6C635F6374726C2E630000F0B50546FB +:101520008C4614465189B5F89220D5E91A038E1AD3 +:10153000A96F89B04E430021301841EB0302A38903 +:1015400040F2E24673431E1806A8CDE9021042EBB2 +:10155000E37740F2E240019104910CFB00F200912C +:101560000F4B3046394605F0B2F8002815D00699E1 +:101570008E1B4FF0000105F073F9A86F6189B6FB6F +:10158000F0F008446081A86FB6FBF0F100FB116039 +:1015900040F2E241B0FBF1F0A08109B0F0BD0000E3 +:1015A000416901002DE9FC470546B0F87A01B5F81C +:1015B0007E418A46A04200D20446B5F87601B5F8CD +:1015C0008261B04200D20646B5F87411B5F88001C8 +:1015D000814201D20B4600E003461B2B03D9814216 +:1015E00002D2084600E01B20ADF80000B5F87811E3 +:1015F000B5F87C01814201D20B4600E003461B2B6B +:1016000003D9814202D2084600E01B20ADF8040055 +:10161000A8694FF001080079C0F3810108FA01F0D0 +:101620001043C0B200F0DAF84FF4A4794FF4296700 +:10163000022806D04846864200D33046ADF8020064 +:1016400004E0BE4200D23E46ADF80260A8690079CF +:1016500000F0030108FA01F040EA0A00C0B200F00D +:10166000BDF80646022806D04846844200D32046EC +:10167000ADF806001EE0BDF80010BDF802004FF402 +:10168000747202EB8112904202D3880100F57470EB +:1016900000F59670A96F80B2814201D9081A00E066 +:1016A000002080B2844200D30446BC4200D23C46B3 +:1016B000ADF80640BDF90600314610F091F901463B +:1016C000BDF80400814204D8BDF90600314610F08F +:1016D00087F9C0B285F88D011B2800D21B2085F840 +:1016E0008D01082205F5C2716846F2F7E6FE002872 +:1016F00004D0DDE90001C5E961010120BDE8FC87F6 +:101700002DE9F04100240D46064601270EE000BFFA +:1017100036F81400082802D30920BDE8F08107EB51 +:1017200000200BF09BFC28B1641CA4B2AC42EFD3A8 +:101730000020F2E70220F0E70CB5094AD2E90012D6 +:10174000CDE9001200216A46535C834201D1012099 +:101750000CBD491CC9B20729F6D300200CBD0000FE +:10176000784C0200074B012202EB002253F82000C4 +:10177000002805D080F86811012110460BF0ECBE5E +:1017800070470000287A002070B500252C460126FD +:1017900006EB04200BF062FC08B16D1CEDB2641C7A +:1017A000E4B2082CF4D3284670BD00002DE9F041C6 +:1017B000002406465FF0010707EB042528460BF0DE +:1017C0004DFC30B1641CA4B2082CF5D30920BDE84F +:1017D000F081C5F30B2030800020F8E7410701D5E8 +:1017E00002207047C00701D00020704701207047D9 +:1017F00070B50D460646002405E000BFF2F712FE64 +:101800003055641CA4B2AC42F8D370BD0B4A10B57D +:1018100052F82020B2F89230C91A89B247F6FF7305 +:10182000994209D292F8561021B12A21FFF79AFF66 +:10183000002010BD012010BD2821F7E7287A0020E4 +:1018400070B50646062003F069FF050000F10C04A0 +:1018500001D0012000E00020BA2212A1F4F7C4F860 +:101860000C2020700FF0F4FCC00701D00A2000E02B +:101870000820607040F2AC60608040F20110A080EF +:10188000A8880C4920F4FF50C030A88051F82610D9 +:10189000012081F8DB0031462846BDE87040FEF7A4 +:1018A0007BBD0000626C655F6C6C635F6374726C1F +:1018B0002E630000287A002010B51046C2F30B24D6 +:1018C0000BF0CCFB40B1012806D0022801D0022049 +:1018D00010BD2046FFF7B4FF002010BD70B50546CF +:1018E000002410F8011B00F05FFE002801DB122429 +:1018F0000CE028781D4958B101281ED0FF28F6D1E8 +:10190000012081F8620100BF00F036FC204670BD66 +:1019100091F86021D1F8580100EBC200D1F85C21A8 +:10192000904221D255F8012F0260AA88828091F856 +:101930006001401C81F86001E6E791F86021D1F870 +:10194000580100EBC202D1F85C0182420CD201F5D1 +:10195000AE710838086055F8012F0260AA888280AD +:101960004879401C4871CFE70724CFE73075002045 +:1019700010B5104C206928B90021032003F02CFE7B +:101980002061A8B12169002081F826000948216959 +:10199000103890F8450181F8230021690648086154 +:1019A000216906484861216903204867002010BD6D +:1019B000072010BD40750020D6BE898E55555500B4 +:1019C000064810B590F8F800002805D002F084FD14 +:1019D000BDE8104000F094BC10BD00003075002040 +:1019E00070B5044601690F23032213480BF0D4FBA2 +:1019F000054618340E222146401CF2F725FD2078BA +:101A0000B0B16288D4F80A000C49F2F71DFD00203D +:101A100028700B488168C90605D5816821F010013E +:101A20008160012028702846BDE870400BF014BD8D +:101A3000608861784218E5E745000300000208402D +:101A4000000008402DE9F0470F4681461E469046AB +:101A5000002168200BF052FE04460C2003F05EFECD +:101A60000546ECB368212046F2F715FD2765C4E969 +:101A700015862146484603F0AFFD6063FF2207212B +:101A800004F1380003F0FEFDA06B50B3606B40B36F +:101A90003DB32D60A88820F47F60C030A8802879ED +:101AA00020F00F00C01C2871606BC17921F07C010F +:101AB0005C31C171017E21F0010101760C4991F880 +:101AC000451180F8231085602821C185417921F0D6 +:101AD00004014171012180F826102046BDE8F087FD +:101AE00000E001E00020F9E7204600F01FF8F9E7E8 +:101AF0003075002010B504000ED02078012801D0E8 +:101B0000012000E00020482204A1F3F76DFF2046E9 +:101B1000BDE8104000F00AB810BD0000626C655FBF +:101B20006164765F636861696E2E630010B5044678 +:101B3000806B18B104F1380003F000FF606B28B12E +:101B4000806803F069FF606B03F0BCFEE06D10B1CC +:101B500018380BF035FA2046BDE810400BF074B988 +:101B60002DE9FF4706460C989046DDE90E2A817C58 +:101B7000994609064FF4967701D41E2100E03946B4 +:101B8000746BB0F81330241DC3F30C05E3784D4398 +:101B900062F38603E370027DEA3D5309227801F582 +:101BA000967163F383022270807C627D60F305028C +:101BB0006275207D20F001002075607820F004001F +:101BC0006070204603F015FE84F822A0EA2000226F +:101BD0000749CDE90240CDE9001218EB050049EBB9 +:101BE00002013B460DAA04F049FD7064BDE8FF8781 +:101BF00035B601002DE9FE4F07460C9D92469946E9 +:101C0000A87D800601D41E2601E04FF4967635F8B3 +:101C1000150F7C6BC0F30C007043A0F1EE0814F8B4 +:101C2000040F0022C0F38101FF200FF0F1FE834674 +:101C3000E07820F07C005830E070786B0079C0F3D9 +:101C40008101207861F3830020706868A061287AA0 +:101C5000217F60F304012177B5F80D002082E87B35 +:101C6000A074D5F80900E06006F59671204603F0EF +:101C7000C0FD207D002240F041002075288AE082CE +:101C8000012084F82200EA200092CDE901401AEBFD +:101C9000080049EB0201044B0BF1EA0204F0C6FC18 +:101CA0007864BDE8FE8F000035B60100416C19B1C3 +:101CB00001210170084670470020704770B5044646 +:101CC000856B0078012801D0012000E00020662209 +:101CD0000AA1F3F789FE284603F070FD606BC16826 +:101CE00065F31E01C160607820F003006070002081 +:101CF000A0802564C4E9120070BD0000626C655FBD +:101D00006164765F636861696E2E630070B50C0074 +:101D1000054601D0012000E000204FF4A07220A170 +:101D2000F3F762FE287A162817D0172815D018283E +:101D300026D1216C4879800608D5236D2046A26DF6 +:101D40009847206C417921F020014171206C006896 +:101D50002064A08800F10100A080216C48798006F1 +:101D600008D5236D2046A26D9847206C417921F05B +:101D700020014171206C00682064A088401CA08074 +:101D8000606C00280BD1606B216CC06820F00040B3 +:101D9000884204D12046BDE8704000F066B970BDAD +:101DA000626C655F6164765F636861696E2E630073 +:101DB00070B50C46017A00250226162911D0172984 +:101DC0000FD0182908D1408902280DD2606C10B1BB +:101DD00004F028FF656426702046BDE8704000F0DE +:101DE00044B940890028F1D070BD00002DE9FF41C1 +:101DF000476B0446851D007897F88280012869D1D9 +:101E0000B86F616C884201D1012000E00020F5220A +:101E100031A1F3F7E9FD606C18B104F003FF002075 +:101E20006064F868B8F1180F20F0004600D13668F9 +:101E3000316861F31E00F8606078C0074AD170799C +:101E4000800647D5307A10F02E0F43D1F07B00F09A +:101E50000301381D03F01CFF07468846D4E9120130 +:101E6000084301D1C4E912782946304609F091FDB2 +:101E700000282FD0A878C1060FD4800601D40320F3 +:101E800027E01948D0F89800002823D13A46434665 +:101E900020460095FFF7AEFE14E0B5F81300C0042D +:101EA00010D0287D114B4009012133F81000172272 +:101EB000EA3000950391CDE901023A4643462046B7 +:101EC000FFF74EFE606C002804D12078012801D174 +:101ED00002202070BDE8FF81626C655F6164765FFF +:101EE000636861696E2E630030750020C63E020093 +:101EF0002DE9FF470CA91546B1E810031E46074619 +:101F0000FFF7DCFEA078810606D52A463346384620 +:101F10000094FFF76FFE53E0C0064CD5217D2B4B9C +:101F20004909786B33F81120001D2949C160EA3254 +:101F300028490161B8F1000F36D04168B9F1000FAE +:101F400091F805C02CF0800C81F805C091F807C00D +:101F50002CF0030C0CF1010C81F807C002D04CF0FE +:101F6000080C01E02CF0080C81F807C0797802F524 +:101F7000167241F002017970217D4FEA511C0178FF +:101F80006CF301010170207D0221400933F810003B +:101F90000094104418220391CDE901022A463346E9 +:101FA0003846FFF7DDFD0BE0012017210094039078 +:101FB000CDE90121F2E7BD2207A10020F3F714FDCE +:101FC00004B03846BDE8F047FFF770BEC63E0200D9 +:101FD000D6BE898E55555500626C655F6164765F2B +:101FE000636861696E2E63002DE9FE4F0CA91646E9 +:101FF000B1E880071C460546FFF760FE00218DE82A +:10200000020643463A463046214604F00FFB686418 +:102010002846BDE8FE4FFFF749BE10B5044640789C +:10202000002140F001006070606C04F019FC002891 +:1020300004D00020606402202070012010BD000048 +:102040002DE9F04101250E460746002408E000BFB7 +:1020500057F8240018B1FFF7E0FF00B90025641C11 +:10206000B442F5DB2846BDE8F0810178022901D0B1 +:10207000032906D100210170426D002A01D0816D33 +:10208000104770472DE9F0470026204C3746B046F0 +:102090004FF0020926714FF4804A00BF07EB47005A +:1020A00004EB400515F8360F01282BD0032809D37F +:1020B0002FBBE06BC4F83600B4F840006087A9F18C +:1020C00001091AE0A9886A8891421BD86B78012B14 +:1020D00018D8514516D8042914D3524512D8042AC9 +:1020E00010D309F0A9FE68B108F1010000F0FF0863 +:1020F00068787F1C012800D120714F45CEDB56EA5D +:10210000080000D112263046BDE8F0874075002057 +:1021100070B50E4C054621B1012907D094F8450051 +:1021200012E00B490FF08BF860B9F7E70849891FF7 +:102130000FF085F830B994F8450028B1284606F02C +:10214000CFF908B1012070BD002070BD30750020AE +:102150006476002010B503F03FFF064C206003F0CA +:102160003BFF80306060002020726072BDE810404C +:1021700000F002B8887600200548027A417A42EAE7 +:1021800001220449CA6302684A6340688863704751 +:1021900088760020000009402DE9F041504CFFF7FF +:1021A00071FF10B11220BDE8F0810026A667E66736 +:1021B000C4F88060C4F8846084F848600120A0708E +:1021C000A68502F073F9FFF7D3FB0028EBD1256950 +:1021D000FF222D1D022104F1140003F053FA0C22FA +:1021E000012104F11C0003F0ABFAE069C0B16169A0 +:1021F000B1B12179C9B1017921F00F01C91C017177 +:10220000818821F47F61C0318180C17921F003018F +:10221000491CC17194F8342022B141F0080103E057 +:102220000720C0E721F00801C171002723460022E2 +:102230002C490320FFF706FC04EB8701C1F8B80026 +:1022400030B1217921B1406BE16980684968416012 +:102250007F1C042FEADB94F8341004F108022248B2 +:1022600009F07AFC00289ED16069A062D4E90701D8 +:10227000086095F8200040F0010085F82000E06932 +:1022800068606169A86861F31E00A860287D16492E +:1022900020F0400040F001002875687D0D3120F0ED +:1022A0003F002730687505F1180004F0B0FD667036 +:1022B000022103200BF050F901F0B6FA050005D019 +:1022C000002103200BF048F928466CE7B4F84420BD +:1022D0001AB1032105480BF089F9002063E70000DB +:1022E00040750020193701005E7600204C00030085 +:1022F00010B500F005F8BDE8104000F047B8000048 +:102300002DE9F0411D48F4F787FC054601200AF04D +:102310001BFD1A4F083F002655B1686920280BD0D5 +:102320002846FFF75DFB1648866028460AF048FEFF +:1023300087F8F860BDE8F08111230322114829696C +:102340000AF02AFF044610220F49401CF2F77CF8DD +:10235000287C01280DD00020C0F10F0123180A1994 +:1023600093F801C0517882F801C0401C59700828C8 +:10237000F2DB267020460BF06FF8D4E738750020AA +:102380000000084044000300100208400448806830 +:1023900010B1183002F01CB81020F4F7C3B90000D7 +:1023A000307500202DE9F041144688460646012587 +:1023B000876A0DE0022C10D302224146304600F01D +:1023C00015F800B900253868A41EA4B20068B062F0 +:1023D000002CEFD12846BDE8F0810122414630466D +:1023E00000F004F80028F5D10025F3E770B5846A01 +:1023F00016460546012A05D03EB3207A10F02E0F6E +:1024000015D033E0207A10F02E0F2FD1207900F074 +:102410000F000728F1D1204605F096FE8007ECD585 +:102420002146284601F056FD80F0010070BDE87895 +:1024300010B1204600F054FB022E17D12068017A1B +:1024400011F02E0F02D0E87860B10FE0017901F0B1 +:102450000F0104290AD1E97811B100F041FB05E030 +:10246000012100E00021204600F026F8012070BD87 +:1024700010B50446806AB2B1017A11F02E0F12D164 +:10248000017901F00F0108290DD2DFE801F0040401 +:10249000040C0C0C040EE17811B100F021FB02E0F9 +:1024A000002100F009F8012010BD0146204601F08E +:1024B00011FD80F0010010BD2DE9FC4105460079B9 +:1024C0000F4600F00F040C2009F0DAFB002824D09E +:1024D00000F06EFA060020D0A8690090A88BADF835 +:1024E0000400234890F8530020B12146684609F0C3 +:1024F000D9FC70B1B41C2946204601F0F9FF2879B7 +:1025000010F00F000BD001280BD0062819D0102096 +:1025100018E0A6F118000AF053FDBDE8FC81132075 +:1025200010E0152020800020E0756879C0F380104D +:102530002074D5F81E00C4F81100688CA4F81500AA +:1025400001E0122020807FB12968204601F0D0FFF1 +:102550000849E01C0EF073FE287910F00F0F01D02F +:102560001A2000E01B20208030460AF075FFD4E7D7 +:1025700030750020054802002DE9F04117460D4650 +:10258000064600240BE000BF06EBC40039460EF0FF +:1025900056FE10B12046BDE8F081641CE4B2AC42A6 +:1025A000F2D34FF0FF30F6E7094B21B1012907D0F4 +:1025B0004FF0FF30704793F86011D3F8583103E0C3 +:1025C00093F86111D3F85C3102461846FFF7D4BF87 +:1025D0003075002070B5064600240A4D09E000BFA2 +:1025E00005EBC4009D3008223146F1F766FF38B193 +:1025F000641C95F89C00A042F2DC4FF0FF3070BDE7 +:10260000204670BD3075002070B500210F4D044686 +:102610000A460B4605EB8300D0F8C80050B1066EA1 +:10262000A64200D1024611B9067806B901465B1CE4 +:10263000042BEFDB32B11078012801D0104670BDB9 +:10264000002070BD01B10C66084670BD30750020D9 +:1026500010B5084B0246002103EB8100D0F8C800FA +:10266000002806D0046E944203D0491C0429F3DBF1 +:10267000002010BD307500200449C08891F8421137 +:10268000C0F38710084440B2704700003075002046 +:1026900070B5214C032121480AF066FB1F48032135 +:1026A000401C0AF061FB0021206B04F0D9F868B3EC +:1026B0000026042104F1B8002663FFF7C1FC28B30B +:1026C0005FF0000504EB8500D0F8B800FFF712FAC0 +:1026D0006D1C042DF6DB883426636663A663E6630F +:1026E00054F888090AF0B0FB04F1100003F01AF95D +:1026F00004F1140003F022F904F11C0003F06CF95A +:10270000002103200AF028FF267070BDBDE870404C +:10271000012103200AF020BF407500204C00030077 +:102720002DE9F04389B0C76D4FF000098DF81C907A +:10273000436B2D4D0DF11C0C1B798846C3F38106AC +:10274000D5F88830BF1C1C785B7B0296CDE9054923 +:10275000CDE903C3D0E91210CDE900104146384657 +:1027600009F0F8FF0446082803D39DF81C00002850 +:1027700037D00D2009F084FA38B310230322052145 +:102780001A480AF009FD0E2101709DF81C1001B1D4 +:1027900007214170448098F81120761C12090271BB +:1027A000BA784271D7F80320C0F80620B7F807209E +:1027B00042810673B8F81720A0F80D2098F81D2064 +:1027C0005209C27311B10AF047FE03E0084951F8FB +:1027D00024108866D5F888000AF036FB0120C5F879 +:1027E000889009B0BDE8F083407500203C000300EC +:1027F000EC7A002010B508480A881C4642808A8876 +:1028000082808988C180002303222146034808F082 +:10281000EAFC002010BD0000307500202E000300EF +:1028200070B5154C1E460D462078012822D1FEF7C2 +:10283000ABFFF8B10020E0800AE005EB4002E18840 +:102840005288401C05EB4202C0B2528A1144E1801A +:1028500029788142F1D8E088A188884204D8297873 +:10286000A81CFEF74DFF28B112230322314603486E +:1028700008F0B9FC002070BD307500202F00030067 +:102880002DE9F0410022434903200AF0A9FA424908 +:1028900001200AF011FE4148016C406C4FF4427176 +:1028A0003F48F1F7F8FDFF2204213E48F1F7ECFD27 +:1028B0003C4C1F274F3C012684F8537084F84E602F +:1028C00044F29020A4F85F00FB21A4F85D10A4F866 +:1028D0006300A4F861101B20A4F866004FF4A470F4 +:1028E000A4F86800F1F79EFD60730025A573E573F9 +:1028F00026706760EC3C0EF0ABFCC00604D504F516 +:102900009A700EF0ABFC06E0264827493B380A686F +:1029100042638988018784F8F85084F8466108206A +:1029200009F098FA28B194F8460140F0020084F8C2 +:1029300046010B2009F08EFA28B194F8460140F0C8 +:10294000040084F8460104F5A274A078E0702071B8 +:102950003F2060702570A4F5A274FFF7FBFB104DBB +:1029600008352846F4F758F910B10AF029FBF8E7C2 +:102970002846F4F741F904F2F624322060806420FE +:1029800020806FF02F000949A0800B200860BDE86F +:10299000F0810000843E0200F122010000000940A5 +:1029A000307500206B7600200548020000000840CA +:1029B00010B501200AF030FA98B9FF23032205214F +:1029C00009480AF01DFF60B10D210170012141701D +:1029D000FF22027142737F228273002202824276BA +:1029E00010BD002010BD00003B000300FFF7CEBC6F +:1029F000034608680A46C16F002901D010461847EF +:102A00007047000010B50C460A4991F8451001299D +:102A100008D0032906D05CB12046BDE81040194615 +:102A2000FFF776BB1146FFF7BFFDC017401C10BD76 +:102A3000012010BD307500202DE9F041074600242B +:102A40000E4E14E006EBC405B87815F89D1F8842B9 +:102A50000BD1691CF81C0EF0F2FB30B1F87AE97961 +:102A6000884202D10120BDE8F081641CE4B296F8EE +:102A70009C00A042E6D80020F5E700003075002059 +:102A8000054890F84510012903D0032901D0012001 +:102A9000704790F8620170473075002010B50A4BFE +:102AA00000214FF6FF7400BF03EB4102B2F85A2039 +:102AB000A24206D0824201D1002010BD491C142937 +:102AC000F2D3012010BD0000307500200348D0F87B +:102AD0009800002800D001207047000030750020C9 +:102AE0007CB505460079184C00F00F01A8690090EC +:102AF000A88BADF8040094F85300012806D00129F2 +:102B000004D094F8F010890717D508E0684609F05A +:102B1000C9F994F8F01089070FD500280DD02B23A0 +:102B2000032205212A200AF037FB0446294608F033 +:102B300093FC18B120460AF08FFC7CBDA4F118006C +:102B40000AF03EFA7CBD00003075002010B5A1F1FE +:102B500018000446014600220648F4F72DF80548FF +:102B6000083890F8F80010B9204601F031FC012037 +:102B700010BD0000387500202DE9F041194C0E46BB +:102B8000002594F8D8001746410706D440F0080005 +:102B900084F8D800FFF79AFF08B10C2518E094F8E4 +:102BA0009C00052801D3072512E03046FFF712FDEF +:102BB000002801DB12250BE094F89C0004EBC00117 +:102BC000401C84F89C00306841F89D0F7068486094 +:102BD0002A4642F247013846F7F746FC0020BDE896 +:102BE000F08100003075002010B50D491446002218 +:102BF00091F8D830580706D443F0080081F8D8007F +:102C0000FFF764FF08B10C2202E0002081F89C006D +:102C100042F249012046F7F727FC002010BD0000D2 +:102C20003075002010B502F0B3FF002010BD000089 +:102C30002DE9F0410E4E087817463478002518B17A +:102C400034B1641EE4B204E0072C01D2641CF9E73D +:102C500043252046FAF794FD00B934702A4642F223 +:102C60005F013846F7F700FC0020BDE8F081000066 +:102C7000F40100202DE9F0472A4F0C46A7F110007F +:102C8000914690F8D81000264A0706D441F0080172 +:102C900080F8D810D7F8880008B10C2639E0B4F8CD +:102CA0000900B0F5FA7F0FD2B4F80B000A280BD355 +:102CB000B0F5804F08D82078C00720D1A07801282F +:102CC00002D860780F2801D9122622E0DFF8588058 +:102CD000002500BF58F8250068B13C30E11C0EF01B +:102CE000AEFA40B158F82500617890F82900884282 +:102CF00001D10B260DE06D1CEDB2082DEAD30021A9 +:102D00000E200AF03FFA0E222146C7F88800F1F79C +:102D10009BFB324642F244014846F7F7CBFB0020CA +:102D2000BDE8F08740750020EC7A002070B5174CA4 +:102D30001546A4F1100142F2450691F8D800420769 +:102D40001DD440F0080081F8D800D4F88800B0B154 +:102D50000AF07AF8002231462846C4F88820F7F7AE +:102D600083FB10230322052109480AF015FA0E21DE +:102D70000170442141700AF06FFB002070BD0C22ED +:102D800031462846F7F770FBF7E700004075002052 +:102D90003C0003001046104A10B592F8D810CB073B +:102DA00005D00C2242F23A01F7F75EFB11E041F048 +:102DB000020182F8D81002460323052107480AF0D1 +:102DC000EBF90021017040F27261A0F801100AF0E5 +:102DD00043FB002010BD00003075002035000300CB +:102DE00010460F4A10B592F8D810CB0705D00C2228 +:102DF00042F23B01F7F738FB0FE041F0020182F8A5 +:102E0000D81002460223052106480AF0C5F9002120 +:102E10000170082141700AF01FFB002010BD000066 +:102E2000307500203600030010460F4A10B592F8A6 +:102E3000D8104B0705D50C2242F24A01F7F714FBD4 +:102E40000FE041F0080182F8D81002460223052164 +:102E500006480AF0A1F900210170052141700AF02D +:102E6000FBFA002010BD0000307500203800030080 +:102E700010B5052319460C480AF08EF9002101709F +:102E80000A49B1F8422102EB82025200A0F8032065 +:102E9000B1F940110A2291FBF2F1A0F801100AF0F9 +:102EA000DBFA002010BD000039000300307500205F +:102EB00070B5032305210D480AF06EF904460C4D48 +:102EC0000020207095F844010EF082FD642690FBEE +:102ED000F6F0607095F845010EF07AFD90FBF6F083 +:102EE000A07020460AF0B8FA002070BD3700030039 +:102EF0003075002010B50523194608480AF04CF932 +:102F0000002101700721417008218170C1701421D6 +:102F100001710AF0A1FA002010BD00003D0003007D +:102F200010B500210846F3F7F3FF002240F60341F5 +:102F30000320F7F799FA012010BD000070B51A4C74 +:102F40001646002594F8D800420706D440F0080041 +:102F500084F8D800FFF7BAFD08B10C251CE008463C +:102F6000FFF738FB002801DA422515E000200AE0CF +:102F700004EBC00202F1A501D2F8A53042F89D3F52 +:102F800049685160401C94F89C10491E8142EFDC56 +:102F900014F89C0F401E20702A4642F24801304629 +:102FA000F7F762FA002070BD3075002070B5164644 +:102FB00010460AF053F8022820D1114BB3F85600FE +:102FC000B3F85450C401A54210D9102008F058FE9F +:102FD00048B10123324605210A480AF0DDF81121E3 +:102FE00001700AF039FAFFF753FB07E0012058742B +:102FF0000448621B314613300AF0F8FA002070BD15 +:10300000307500203A00030070B516460C4C10468F +:103010000AF024F8022811D1A4F110053146B5F8C0 +:10302000542008480AF0E2FA0020687494F843003B +:10303000022801D101F03AFA00F0F6FB002070BD41 +:10304000407500204C0003002DE9F0410C46097842 +:1030500012251646C80701D16078C0B1880701D48F +:10306000A078A0B10E4FC80706D1607808F00EFF17 +:1030700068B1607887F847012078800706D4A07887 +:1030800008F004FF18B1A07887F8480100252A4607 +:1030900042F231013046F7F7E7F90020BDE8F08150 +:1030A00030750020104610B5064A0B68C2F8FD3294 +:1030B0008988A2F80113002242F25D01F7F7D4F9E2 +:1030C000002010BD307500202DE9F0412D4E0C463A +:1030D000A6F110009846002590F8D81017464245F2 +:1030E00004D04A0723D441F0080103E00A071ED4A4 +:1030F00041F0040180F8D810207870B1607802287F +:1031000009D8A08801D130B100E030B1A088618831 +:10311000B0EBD11F01D812250AE0384609F09EFF16 +:1031200058B1012823D0022820781BD000B10C25EB +:1031300047451FD042F242011EE020780028F7D018 +:10314000002030702068C6F84200A088A6F846002B +:10315000474501D1012000E00020F070FFF71CF886 +:103160000546E5E70028E3D1FFF792FAE0E7022001 +:10317000BDE8F08142F20C012A463846F7F774F9AF +:103180000020F5E7407500202DE9F0411D46224E54 +:1031900014460F46AA4203D00EF05AF8C0070AD0D0 +:1031A0001D481038AC4290F8D81006D04A0710D409 +:1031B00041F0080105E0112221E00A0709D441F09D +:1031C000040180F8D810204609F048FF18B1012802 +:1031D00009D00C2213E03878032802D87878042824 +:1031E00004D312220BE00220BDE8F0810E22394602 +:1031F00006F13400F1F728F9FEF744FF0246AC422D +:1032000002D042F2410101E042F20B012046F7F701 +:103210002BF90020E8E7000040750020074910B5B1 +:1032200000200874032009F019FF022804D100F0DF +:10323000FBFA08B1FFF72CFA002010BD3075002012 +:1032400070B5B1F902301046002203F5A0644FF4C6 +:103250002065AC4205D8B1F9004004F5A064AC4249 +:1032600001D912220BE00A2493FBF4F4074BA3F8D4 +:103270004241098801EB81014900A3F8401142F263 +:103280004D01F7F7F1F8002070BD00003075002007 +:1032900010B5194609230322074809F07DFF0446AB +:1032A0000821401C01F0B0F80020207020460AF0F0 +:1032B000D3F8002010BD00004600030070B5134C89 +:1032C0001046194694F8D820930705D50C2242F2EF +:1032D0000701F7F7C9F816E042F0010084F8D800BA +:1032E000022303220A4809F057FF054694F84501D6 +:1032F0000EF06EFB642190FBF1F0687000202870E6 +:1033000028460AF0A9F8002070BD000030750020A2 +:103310004200030010B5194604230322064809F0B1 +:103320003BFF5F21C170FB21A0F80110002101705B +:103330000AF092F8002010BD3F00030010B51946B6 +:1033400009230322074809F027FF07490A68C0F844 +:1033500001204968C0F80510002101700AF07CF8CE +:10336000002010BD40000300743E020010B5194655 +:10337000092303220A4809F00FFF401C002100F82E +:10338000011C08490A8882804A88C2808A88028093 +:10339000C9884180401E0AF05FF8002010BD00007F +:1033A000480003007976002010B519460523032252 +:1033B000084809F0F1FE002101700749B1F85221D7 +:1033C000A0F80120B1F85411A0F803100AF044F855 +:1033D000002010BD490003003075002010B51946CB +:1033E00009230322074809F0D7FE07490A68C0F8F5 +:1033F00001204968C0F80510002101700AF02CF87E +:10340000002010BD470003007C3E020010B51946A5 +:1034100002230322054809F0BFFE0021017010219C +:1034200041700AF019F8002010BD000043000300AD +:1034300010B50748D1E90021C0E900211C4600234E +:1034400003222146034807F0CEFE002010BD0000F5 +:10345000207600203E00030070B51D460C464FF458 +:10346000006009F0FBFD022807D0032009F0F6FDFB +:10347000022802D005F020F808B10C2305E00B4922 +:1034800020460DF0DCFE38B11223032229460848FD +:1034900007F0A9FE002070BD064821680023C0F88F +:1034A0002E11A188A0F83211EFE7000005480200B4 +:1034B00041000300307500207CB5064615460C46D9 +:1034C000104609F0CBFD0228207809D0012809D048 +:1034D0000C2242F20C012846F6F7C6FF00207CBD04 +:1034E0000028F5D10021ADF80210ADF804102078C5 +:1034F0008DF8000060788DF801002B461A46694669 +:103500003046FFF7E1FD7CBD1FB54B798DF80030EB +:103510008B798DF8013000238DF80230B1F801303D +:10352000ADF804300B788DF80330B1F80310ADF826 +:10353000061003218DF8081013466946FFF724FE94 +:1035400004B010BD10B508480A881C46A0F85221E6 +:103550004988A0F85411002303222146034807F0AC +:1035600042FE002010BD0000307500204A0003001C +:103570002DE9F04792460F464FF000093A4C0D7A7C +:10358000104609F06BFD06005CD0C846012E07D03E +:10359000162D61D01BDC042D42D0052D1BD125E05A +:1035A000162D0DD004DC042D07D0052D0CD104E020 +:1035B000172D05D0182D07D102E0C4F8308003E0A4 +:1035C00039462A48FFF714FAFFF762F83AE0172D58 +:1035D00042D0182D40D0C5B35FF0000040F6E11294 +:1035E00023A1F2F701FA206B48B32BE07868216B36 +:1035F000884201D1012000E0002040F6CD121CA13C +:10360000F2F7F2F9206B18B103F00CFBC4F830802C +:103610001B4803F08BFA80F0010040F6CF12DFE781 +:10362000206B18B103F0FEFAC4F830807989A08CC1 +:10363000814202D9081A1FFA80F9022E06D02046CC +:1036400000F028FF0020BDE8F0870AE04A46514616 +:103650002046FEF7A7FEC6E739460448FFF7C8F93B +:10366000C1E70120BAE7000040750020B11D01004C +:10367000626C6535305F6C6C636F6D2E63000000AB +:103680003D44010070B516460D46204C104609F029 +:10369000E5FC022838D1697AA06A04E0027A12F0C7 +:1036A0002E0F0FD000680A00A1F10101C9B2F5D1B7 +:1036B000287A052809D0162822D0172820D01828C3 +:1036C00022D11DE00020A085F2E76D7AA08C2A4669 +:1036D0002844A08431462046FEF7CAFEA06A08E0CE +:1036E000417921F020014171C17921F08001C1713E +:1036F00000682900A5F10105ADB2F1D1A06203E097 +:1037000029460348FFF774F9002070BD407500207A +:103710000D1D01000020704770B58EB004460020DA +:1037200016468DF830000D460CAB01AA204600F07D +:1037300072FB78B16078800701D5A08878B19DF8D8 +:103740003000009001AB32462946204600F07EFC56 +:10375000002802D12046FEF760FC0EB070BDE06D7F +:10376000418841F0080141809DF830000028F4D0E4 +:1037700001AA2946204600F031FBE9E72DE9FF5F69 +:1037800084B08468129D06469346A87C04F1040424 +:10379000000601D41E2701E04FF49677B5F8130018 +:1037A0000022C0F30C007843A0F58179287D4109FF +:1037B000FF200EF02DF900F1FE0AE078D6F80C801B +:1037C00020F07C006430E070607820F004006070CD +:1037D000287D4109207861F383002070207D20F04E +:1037E00001002075A87C617D60F305016175A16809 +:1037F000204668F31E01A16007F5967101F0F9FFFC +:10380000404601F0DBFF00220294CDE90026079933 +:103810001BEB09005141034B524602F007FF08B071 +:10382000BDE8F09F75B601002DE9F04F8C4C87B0D4 +:10383000A4F1100B20699BF81110071D002973D10A +:10384000002871D0032009F009FC0228F7D1206B71 +:103850000028F4D194F8480040F2712200EB4001B6 +:1038600004EB410504EBC0003635D0E91E1668882C +:103870005043C21711EB0008A08D5641401CA08593 +:10388000606901F09BFFE06901F0A3FF60694FF000 +:10389000000AA062A4F824A094F8480084F8490023 +:1038A000F8784FF0010920F07C001430F87087F8A8 +:1038B00022902978C9B1387820F00C00083020F027 +:1038C0000300801C38707878664A20F00400787015 +:1038D00094F83510788861F38900788010F47F7F40 +:1038E0002BD09BF8601101B320E0397821F00F0153 +:1038F000397069780129E6D1E17811B9A1780029F8 +:10390000E1D020F07C01584A87F822A01031F970EC +:103910001088401C1080C007D5D021F07C0087F8AB +:1039200022901430F870CEE77AE001219BF8610113 +:1039300000B9012041EA0020D06397F820004C4BE9 +:1039400040F0010087F82000A988388C61F34E0010 +:103950003884A888A0F101007885E0697860616901 +:10396000B86861F31E00B860387D40495FEAC07CEA +:1039700011D05FEA406C0ED497F815C00CF03F0CE4 +:10398000BCF1250F07D3D7F80CC08C4503D1D7F86D +:1039900010C09C450BD020F0400040F0010038756D +:1039A000787D20F03F0027307875F9603B61916A9F +:1039B000072060F30201916202F012FB642280187A +:1039C00041F10001B8EB0002CDE9040176EB010200 +:1039D00002D3B8EB000000E06420A98840F2712215 +:1039E000514394F8482004ABCDE9002ACDE902A365 +:1039F000EA31564600231F4A02F0EFFD206310B162 +:103A0000287820B110E0432007B0BDE8F08F687837 +:103A1000012809D1A07828B10020A070012803D086 +:103A20000020F1E70120F8E794F84820DDE90401DF +:103A300004EBC202C2E91E0194F84820494629EA73 +:103A4000020000EB400204EB420292F83620032A07 +:103A500002D284F8480001E084F84860A170DFE7F2 +:103A6000407500200000094018040020D6BE898E51 +:103A7000555555003D4401002DE9F0410546087AB1 +:103A80008EB00C4610F02E0F54D103A9204607F03B +:103A900080FF00284ED09DF80E00C1064AD5BDF823 +:103AA0001F10C90446D0000744D5D5F8880038B99E +:103AB000BDF81C00C0F30B00FEF7F0FF002839D062 +:103AC000BDF81C00FEF7A0FD060033D0E07B00F03F +:103AD00003012869001D02F0DBF86FF00902841869 +:103AE0009DF80D0041F1FF3580070DF10C080AD556 +:103AF000124F97F8580000EB400007EB400090F899 +:103B00004700012807D0304600F083FB0020CDE9B4 +:103B10000080029009E0304600F07BFB97F84400FB +:103B20000122CDF80080CDE9012022462B46304607 +:103B3000FEF7DEF90EB0BDE8F08100003075002020 +:103B4000014800F0A7BC00004075002010B51946E0 +:103B500007230322084809F01FFB0849D1F8342144 +:103B6000C0F80120B1F83811A0F80510002101704B +:103B700009F072FC002010BD3400030030750020F5 +:103B800010B5194608230322064809F005FB002159 +:103B90008180A0F80110C170C180017009F05CFC47 +:103BA000002010BD3300030010B519464123032245 +:103BB000074809F0F1FA044640220649401CF0F794 +:103BC00043FC00202070204609F046FC002010BD78 +:103BD00031000300343E020010B5194609230322C8 +:103BE000094809F0D9FA002141708170C170017152 +:103BF0006022427181714022C2710172017009F02C +:103C00002BFC002010BD00003200030010B5194647 +:103C10000A2303220D4809F0BFFA04460020207051 +:103C20000DF016FBC00701D00A2000E0082020712B +:103C3000607040F20110608040F2AC61E180208150 +:103C4000204609F009FC002010BD000030000300F0 +:103C50002DE9F041C46D804691F82B009188A41C99 +:103C6000C1F3071188423DD2091A1832CDB2871824 +:103C700036E0E07DC0F1E501CEB2B54234D904F1C1 +:103C80001801084432463946F0F7DEFBE520E075BE +:103C9000A81B3744C5B2FEF78BFE060013D01922CD +:103CA0003046D8F85C10F0F7CFFB208840F02000B9 +:103CB00020800C2007F0E4FF0028D8F85C0007D033 +:103CC00009F0CAFB07E04046BDE8F04100F0A1BAA8 +:103CD000183809F075F9B41C0020C8F85C607076DB +:103CE000002DC6D1BDE8F081C1B204F1180008442E +:103CF0002A463946F0F7A8FBE07D2844E075F1E755 +:103D000070B50546002410F8011BFEF74DFC002895 +:103D100001DA122070BD2A7822492AB1012A1DD069 +:103D2000FF2A37D012243AE008230CE0D1F85821BA +:103D300003EBC00602EBC0053244401C16682E603F +:103D400052686A6000B291F86021521E8242EDDC36 +:103D500091F86001401E81F860011EE06FF00703DA +:103D60000DE000BFD1F85C2103EBC00602EBC005FB +:103D70003244401E16682E6052686A6000B2012804 +:103D8000F0DA01F5AE714879401E487108680830D4 +:103D9000086002E0002081F86201FEF7EDF920469C +:103DA00070BD00003075002010B54FF6FF729042D4 +:103DB0000CD0094B002100BF03EB4104B4F85A407A +:103DC000944204D103EB4101A1F85A0010BD491CF3 +:103DD0001429F1D310BD00003075002070B51446D1 +:103DE00005460A46A0780021800701D504F10901A3 +:103DF0005079C0F38013C209E01CFEF703FE08B13E +:103E0000012070BD2DB1E86D183809F0D9F80020F7 +:103E1000E865002070BD2DE9F0410646087A1F468E +:103E20000D46144610F02E0F3AD1F06DC0B3114676 +:103E3000284607F0AEFD98B3F26D0120921C9178F0 +:103E4000FF290FD1A178C9070CD069794FEAD111A8 +:103E50009170D4F80310C2F80310B4F80710A2F858 +:103E600007103870A178890710D5118841F0040136 +:103E700011806979C1F380111174D4F80910C2F866 +:103E80001110B4F80D10A2F815103870A0780007C2 +:103E90000DD5D07AFF2806D0617CB0EB111F02D07F +:103EA0000020BDE8F081607C4FEA1010D072A0784D +:103EB000400602D594F827001073706B0079C0F3A8 +:103EC0008100401C90722846FEF7D6FB50730120FB +:103ED000E7E70000F0B55C4D07468BB095F8EC00C5 +:103EE0000E46E0B3B5F8F000C00440D5307A10F0CB +:103EF0002E0F3CD16946304607F04BFD002837D0E5 +:103F00009DF802000DF10904C10710D000218007BF +:103F100000D52146D5F8980048B97079C0F38013D0 +:103F2000C2090DF10300FEF76DFD002820D09DF8B9 +:103F30000200C00604D432466946384600F018F93B +:103F40009DF80200800707D57079C0F380112046E4 +:103F5000FEF7DEF800280BD0BDF8100000E006E008 +:103F6000FEF776FB050002D0E86D18B107E00020EF +:103F70000BB0F0BDFEF71CFDE8650028F8D0EC6D35 +:103F80009DF8010024F8020F97F8490000EB40006B +:103F900007EB400090F83600401C60723046FEF798 +:103FA0006BFB60739DF80200C0070BD070794FEA7D +:103FB000D010A070DDF80300C4F80300BDF80700BE +:103FC000A4F807009DF8020080070FD5208840F074 +:103FD000040020807079C0F380102074DDF809009F +:103FE000C4F81100BDF80D00A4F815004FF6FF70DD +:103FF00068809DF80200000714D5D7F8880038B90A +:10400000BDF81000C0F30B00FEF748FD0028AFD04C +:104010009DF811004FEA1010E072BDF81000C0F3D7 +:104020000B0068809DF80200400602D59DF827002D +:104030002073BDF81300C00401D0012098E7284682 +:1040400000F0E7F893E70000307500202DE9F04715 +:10405000C56D1646AD1CDDF82080AA781C46894641 +:104060000746FF2A2AD0A078800627D5D6F88810E0 +:1040700021B3087810F0010F12D02846FEF7DCFCBF +:10408000E0B14A4621463846FEF74AFBB0B1208AE5 +:10409000C0F30B00FFF788FEB4F81700E88134E0A6 +:1040A000887882420AD1C91CE81C0DF0C8F828B1F2 +:1040B000D6F88810E87A49788842E2D0B8F1000F43 +:1040C00006D0224649463846FFF788FE00281AD017 +:1040D0004A4621463846FFF7BBFDFA6DA07802F14B +:1040E0000202C1060AD4800603D5B4F81700D081B5 +:1040F00008E03146384600F00DF809E0B4F8130046 +:10410000C00402D00120BDE8F087384600F081F8F5 +:104110000020F8E770B50446C06D154600281ED093 +:104120000C2007F0ADFD0026D0B1032008F096FF6B +:10413000022815D1A878FF2802D1FEF7A1FC78B19A +:10414000288820F060002880084890F8530010B1BB +:104150006088FFF729FEE06D09F07EF9E66570BD25 +:10416000E06D183808F02CFFF8E7000030750020EB +:104170002DE9F04116460C460746F0F753F9FEF7D5 +:1041800043FA050043D0FEF713FCE86500283ED053 +:10419000821C6078108097F8490000EB400007EB24 +:1041A000400090F83600401C50723046FEF764FA2A +:1041B0005073A078C0070BD070794FEAD010907080 +:1041C000D4F80300C2F80300B4F80700A2F807000F +:1041D000A07880070FD5108840F004001080707917 +:1041E000C0F380101074D4F80900C2F81100B4F8BC +:1041F0000D00A2F81500A078400602D594F827001B +:10420000107339462846BDE8F041FFF783BFBDE88B +:10421000F08170B50446C06D00281BD0032008F063 +:104220001DFF022816D10C2007F02AFD002590B1B1 +:10423000E06D801C8178FF2904D1C17AFF2901D16A +:10424000C17D41B1018841F040010180E06D09F07C +:1042500003F9E56570BDE06D183808F0B1FEF8E7C8 +:1042600070B51D460C46FDF78FFA48B121780B4812 +:1042700041B1012908D0022904D0032906D103E065 +:104280000C2304E0002100E001210170002303223F +:104290002946034806F0A7FF002070BD30750020B6 +:1042A0002D00030010B51C46094AD1E90030C2E9CF +:1042B0000030A2F1DC01C0F3407081F8EC00002373 +:1042C00003222146034806F08EFF002010BD0000A7 +:1042D0000C7600202C00030010B506480A68026026 +:1042E00049684160002240F663410320F6F7BCF8BC +:1042F000002010BD1476002010B50446014610229F +:104300000848F0F7A1F8102204F110010648F0F770 +:104310009BF80449012010394860BDE81040102086 +:10432000F2F726BA100008400002084070B50446B3 +:10433000254821210646F0F7AEF8244D286840F0C4 +:10434000400028602078012821D06288D4F8161017 +:104350003046F0F779F81D48D4F80E1010221030CE +:10436000F0F772F81948D4F812100D223830F0F72F +:104370006BF80B202860A2886AB11448D4F81A1090 +:104380002830F0F761F8A08828B1012204E06088A5 +:1043900061784218DAE70022607808280FD0002000 +:1043A000A37842EA4000D9B240EA810040EAC32043 +:1043B00028622078012804D00220686070BD0120A6 +:1043C000EEE70420F9E70000000208400000084082 +:1043D000094A012182F8F810416918301E2909D0D4 +:1043E000202905D04FF4A47204A10020F1F7FCBAF3 +:1043F000FFF782BFFFF79ABF30750020626C655FE0 +:104400006C6C636F6D2E630070B50D460646F0F759 +:1044100019FB094C606840F4801060602946304602 +:1044200042F6C5429047606820F480106060BDE8A5 +:104430007040F0F711BB0000000007402DE9F84381 +:10444000124C0746154620691E4600F10408002854 +:1044500011D00F48A1680164E1684164A08D17285C +:104460000BD901F0F7F92A4633464046009701F090 +:1044700099FB0021A185BDE8F883EA202A1843F1C1 +:1044800000034046009701F08DFBF4E740750020E3 +:10449000000009400178002905D1012101700321A4 +:1044A000014801F0F1BD70474E00030010B5FF2236 +:1044B00028210748EFF7E8FF8C210648EFF7EBFFCC +:1044C0000448BDE810404FF482718C30EFF7E3BF31 +:1044D0008A75002094760020044881680907FCD57D +:1044E000016841F0200101607047000000000840B1 +:1044F00070B5034648790025C00998708869C3F8EB +:104500000300888BA3F80700012058729D72FF20DA +:10451000D8727F200C4618732046FEF7ADF858730A +:10452000DD81A088C0F30710801FC2B2DA75E52ACA +:1045300007D804F11E01BDE8704003F11800EFF741 +:1045400083BFDD7570BD000070B510460D46C2F327 +:104550000B2408F083FD022823D1134E012156F8C5 +:104560002400FCF7B1F8E0B956F82400807901285E +:1045700005D00C2201212046FCF750FA11E0E98811 +:104580002046FDF743F900280CD056F8240054309B +:1045900002218170E9880180D5F80110C160697934 +:1045A0000174002070BD0000287A00202DE9F04140 +:1045B000DFF88C80C2F30B2610460D4658F82640D3 +:1045C0004F8908F04BFD022837D158F8260000210A +:1045D000FCF77AF888BB58F826008079012804D0C7 +:1045E0000C213046FCF732FA27E069893046FDF7A6 +:1045F0000DF9002822D05734012024F8037C04F858 +:10460000010CD5F801102160D5F805106160697AB8 +:10461000217284F81801A888A18E573C88420CD1D9 +:10462000E888B4F88D10884207D12889B4F88F1033 +:10463000884202D1002084F86F010020BDE8F0819B +:10464000287A00202DE9F04117468846C2F30B2452 +:10465000104608F003FD324D002855F8246057D06D +:10466000012855D0B078FF2809D02A2214212046ED +:10467000FCF7D4F92A212046FDF774F848E005201C +:1046800007F0E8FBE8B355F82420D8F80130C2F869 +:104690007C31D8F80500C2F88001002255F82400CA +:1046A0001146FCF77FFF98B10C233A4605211D48BF +:1046B00008F072FD07210170448055F8242002F5AE +:1046C000C071D2F8842142608968816008F0C4FE1C +:1046D0001420B070092001F021F80246918821F4DD +:1046E000FF5101F590719180152100F80C1F55F8CC +:1046F000241001F58073D1F87411C0F80110996F7E +:1047000000E008E0C0F8051021461046FBF744FE23 +:104710000020BDE8F08114212046FCF7D5FEF7E724 +:10472000287A00202E00010070B510460D46C2F315 +:104730000B2408F093FC28B1012803D02946204619 +:10474000F9F7DEFE002070BD70B515460E46C2F3C7 +:104750000B24104608F082FC01002FD001292DD037 +:10476000174803290BD050F8241091F83A219308E8 +:104770000BD03D2200212046FAF76EF808E050F8F1 +:104780002400C089B0B1022070BD8B79012B04D008 +:104790001A212046FCF75AF910E042F0180281F87D +:1047A0003A2150F82400C08920B10321284608F09E +:1047B000D3FEE8E731462046FAF778F8002070BDCE +:1047C000287A002070B50E461446C2F30B25114618 +:1047D0000C4808F0C9FA204608F040FC78B10128DE +:1047E0000DD0094850F82500817941B9C1780329D5 +:1047F00005D1FF21C17031462846FAF7CDF80020D7 +:1048000070BD00003A000100287A002070B5104603 +:104810000D46C2F30B2408F021FC114850F8240087 +:104820008178FF290AD02A2208212046FCF7F6F8D1 +:104830002A212046FCF796FF022070BD81790129CC +:1048400006D00C2208212046FCF7E8F8002070BDB5 +:104850000821817029462046FAF730F9F6E7000072 +:10486000287A00202DE9F0411148C2F30B270D46AC +:1048700050F82760144611460E4808F075FA204695 +:1048800008F0ECFB80B101280ED0FF20F070D5F8C5 +:104890000100C6F83201D5F80500C6F836016A1CD9 +:1048A00039460020FBF796FF0020BDE8F0810000AC +:1048B000287A00203A0001002DE9F0411648C2F3A1 +:1048C0000724154650F824600F46104608F0C6FB32 +:1048D00020B1012802D002281CD102E00020BDE84E +:1048E000F081022000F01AFF020013D01E21117384 +:1048F0000A490023097851739088214620F4FF501B +:10490000403090802846FCF729FA79783046F9F74C +:1049100043FAE3E70220E2E7287A0020F4010020CE +:1049200070B50D460E49C2F30720144651F82060B9 +:10493000104608F093FB28B1012803D0022803D0C9 +:10494000022070BD002070BD2146064808F00CFA18 +:1049500069783046F9F720FA034881780170F1E769 +:10496000287A00203A000100F40100202DE9F041EE +:104970002448C2F30725174650F825400E46104636 +:1049800008F06CFBF8B1012837D0022838D1E07963 +:10499000800713D5A069007900F0030002280DD02C +:1049A000D4F8A00101220178707883099A4011425D +:1049B00004D000F01F00801E132805D320221A21E6 +:1049C0002846FCF72BF818E0032000F0A7FE0200B1 +:1049D00016D01B2111739079002340F001009071D3 +:1049E0007078D0729088294620F4FF502030908053 +:1049F0001A20A0703846FCF7B1F90020BDE8F0811C +:104A00000220FBE7287A002070B50C49C2F307208A +:104A1000144651F82050104608F020FB28B1012818 +:104A200003D0022803D0022070BD002070BDFF20FB +:104A3000E8702146024808F097F9F6E7287A002046 +:104A40003A00010070B50C461049C2F30726104623 +:104A500051F8265008F002FB022815D1A87978B940 +:104A6000102007F0F7F958B1607868B1A0780228F3 +:104A70000AD3252808D8B4F80100A5F8490003E0B6 +:104A800019213046FCF720FD002070BD287A002057 +:104A90002DE9F04F1046C2F3072A4FF0000B85B006 +:104AA000614A8DF810B01E460C465D4652F82A70D9 +:104AB000D94608F0D3FA00287CD001287AD0022801 +:104AC00025D197F8A401002822D0607E04F11B01B3 +:104AD000C0F3001007F036FAA0F57F40FF3869D127 +:104AE000172007F0CDF838B11423324605214F487E +:104AF00008F052FB05000AD0B4F81500B7F8921080 +:104B0000401AB0F5804F06DDA0F5803008E00220A5 +:104B100005B0BDE8F08F10F5804F01DA00F5803068 +:104B2000B96F4143D7E91A20561840EBE1780029C4 +:104B300009DAB4F8050040F2E2425043494291FBE1 +:104B4000F0F01FFA80F901F04BFA831B71EB0801BA +:104B500017D2311AB4F8050040F2E24200FB02F22B +:104B600091FBF2F100290CDD40F2E2424A4350434E +:104B7000361A68EBE078B4F81300A0EB0100A4F853 +:104B80001300A07E04ABB0FA80F0C0F11F00A07645 +:104B900007F5D271CDE90039CDE9021B3246434613 +:104BA000204607F003FF064697F8A40102280ED01E +:104BB000002100E030E0304607F030FD65B31820FA +:104BC0002870A6F57F40FF3803D1012002E00121C3 +:104BD000EFE700206870A5F802A034F8011FA98053 +:104BE000EE80217E01F00F012972217EC1F30011B8 +:104BF0006972D4F81A10C5F80A10E18BE981617E58 +:104C0000491C2974A188A5F81110217E4909E9746D +:104C100018B1284608F020FC03E0054850F82600AB +:104C20008566002074E70000287A00203400010027 +:104C3000EC7A00202DE9F8430E462F49C2F30728ED +:104C4000914651F82850484608F008FAA8B30128C0 +:104C500033D0022834D116212846FBF735FD60BB3E +:104C6000052000F05BFD04002AD0A879002804F19B +:104C70000C0027D0A18821F4FF516031A1801721B9 +:104C80000170B17895F8D12011404170727895F893 +:104C9000D2100A40827041782846FCF783FC162027 +:104CA000A8700023224641464846FCF757F84FF4C7 +:104CB0007A624946114808F099FC0020BDE8F88363 +:104CC0000220FBE707460E4823466A4690F8460155 +:104CD0008DF801008DF80000711C2846F8F790FD52 +:104CE000BA7879782846FCF75DFC002322464146D5 +:104CF0004846FCF733F8E0E7287A00203A00010044 +:104D0000307500202DE9F0412548C2F307261746EB +:104D100050F826408846104608F0A0F960B10128F6 +:104D20000AD0022802D00220BDE8F081A07928B183 +:104D300018213046FCF7C8FB0020F5E73946194832 +:104D400008F012F8E178FF201629E07004D02A213B +:104D50003046FCF707FDEFE7052000F0DFFC05001B +:104D600018D0034604F1CF0208F101012046F8F7FC +:104D700047FD00232A4631463846FBF7EFFF94F8FB +:104D800056000028D8D10023324605213846FCF7CA +:104D900037F8D1E707213046FCF7E4FCC3E7000011 +:104DA000287A00203A0001002DE9F0412548C2F39D +:104DB0000726174650F826400D46104608F04EF9D3 +:104DC00090B1012810D0022802D00220BDE8F08165 +:104DD00016212046FBF778FC30B9A079012805D0D0 +:104DE00018213046FCF770FB0020EFE7FF20E07051 +:104DF0003946154807F0B8FF687808B9A878A8B10F +:104E0000B5F803103046FCF701FD0028ECD015F88A +:104E1000012F20466978FCF7C5FB03205434A070AD +:104E2000688820802888A4F81100DDE760790028D0 +:104E3000DAD0002060710346324605213846FBF780 +:104E4000DFFFD1E7287A00203A0001002DE9F04188 +:104E50004B4EC2F30B2410460D4656F8247008F052 +:104E6000FDF8002833D0012831D0022802D00220DA +:104E7000BDE8F0810F213846FBF726FC00287DD1E4 +:104E8000012006F0E7FF18B3052006F0F9FE20B375 +:104E9000B5F80500B0F5FA7F14D2B5F80120062A5E +:104EA00010D3B5F803004FF4486398420AD8B5F818 +:104EB0000710994206D80A2904D3697A814201D29F +:104EC00090420DD220461E220F21FBF7A7FD55E090 +:104ED00020460F21FCF7F8FA50E020461A22F3E7AB +:104EE00056F824001822A8302946EFF7ADFA56F8F4 +:104EF0002400012290F8B11009B980F8B12056F8C9 +:104F0000241040F2E24CBB6F91F8B10000FB0CF0B2 +:104F1000B3FBF0F0B5F8013080B2834228D8B5F881 +:104F20000330834224D3B5F80500B7F88D3098429A +:104F30001ED1B5F80700B7F88F30984218D188799C +:104F400088B101F1A80510202870B1F8AB1056F80F +:104F500024002A46FCF7E2FA2046002318222946BC +:104F6000FBF71CFF0AE0E0B20022FBF74DFE05E074 +:104F700087F86F2120462946FBF79AFD002077E746 +:104F8000287A00202DE9F04115460E46C2F30B2485 +:104F9000104608F063F807462946274807F0E4FE64 +:104FA000264D55F824008179012942D03FB3012FC5 +:104FB0003FD0022F02D00220BDE8F081FF21C17056 +:104FC000B6F80500B0F5FA7F14D2B6F8010006284D +:104FD00010D3B6F803104FF4486399420AD8B6F8D4 +:104FE00007209A4206D80A2A04D3727A8A4201D24A +:104FF000814205D220461E221021FBF70FFD18E04A +:1050000055F824001822A8303146EFF71DFA55F85C +:105010002400012690F8B11009B980F8B16055F864 +:105020002410E0B20022FBF7EFFD55F8240080F8D1 +:105030006E610020C0E700003A000100287A0020DD +:1050400070B51546C2F30B24104608F007F8E8B116 +:1050500001281BD0022819D1042006F0FBFEB8B1AC +:10506000012000F05BFB020017D013211173908820 +:10507000002320F4FF502030908021462846FBF783 +:105080006DFE0749122051F824108870002070BD71 +:1050900012212046FCF718FAF8E7022070BD000044 +:1050A000287A002070B50D48C2F30B26144650F83C +:1050B000265011460A4807F057FE204607F0CEFF5B +:1050C000022809D1E878122804D02A213046FCF7BA +:1050D00049FB01E0FF20E870002070BD287A002025 +:1050E0003A00010070B51546C2F30B24104607F0D4 +:1050F000B5FF01001AD0012918D0164803290ED097 +:1051000050F82410CA78FF2A01D00A7982B18A792E +:10511000012A0FD01A212046FBF798FC06E050F830 +:105120002400C08920B92046FBF762F8002070BD3A +:10513000022070BD91F83A2142F0180281F83A211C +:1051400050F82400C0890028EDD00321284608F03B +:1051500003FAEDE7287A002070B51446C2F30B2558 +:105160001146094807F000FE204607F077FF48B1D6 +:10517000012807D00549FF2051F82510C87028469E +:10518000FBF77EF8002070BD3A000100287A00206D +:105190002DE9F8430C4680461F461546C2F30B2600 +:1051A0001146164807F0E0FD284607F057FFB8B152 +:1051B000012815D01248617850F82600C278914233 +:1051C00011D003290CD1817951B990F83A114907CE +:1051D00006D4002180F83A11A2783046F9F73CFB5A +:1051E0000020BDE8F883A0788DF801003B462A46F0 +:1051F0006946404600F006F8F3E700003A00010077 +:10520000287A00202DE9F0410C461646C2F30B2502 +:1052100011462C4807F0A8FD304607F01FFF70B17B +:1052200001280CD0284F57F82500C1780A291DD035 +:1052300008DC41B3032919D0052909D116E0002063 +:10524000BDE8F0810F291CD0162929D01A2932D0A7 +:1052500090F83A01C00604D5627800212846F9F793 +:10526000FBFA57F82510FF20C870E8E7817900297C +:10527000F7D190F83A114907F3D4002180F83A1198 +:10528000EAE7817931B100F1880260782946F8F7C0 +:10529000E3FFE6E7EAB201461046FBF7F9FCE0E778 +:1052A00000221146FCF77EF96378EAB20521304608 +:1052B000FBF7A6FDD5E7627831462846FBF738FDB7 +:1052C000CFE700003A000100287A002070B51046B0 +:1052D0000E46C2F30B2407F0C1FE40B3012835D0BF +:1052E0001B4D55F8240090F83A11090701D502200A +:1052F00070BD8178FF2909D02A2208212046FBF7BA +:105300008DFB2A212046FCF72DFAF0E7807910B1B9 +:1053100001281BD116E0032006F09CFD40B155F892 +:1053200024100820887031462046F9F7C7FB0DE0AD +:10533000721C21461A20FBF74DFA0E212046FCF77D +:10534000C3F803E00C212046FBF780FB002070BD72 +:10535000287A002070B51546C2F30B241146154873 +:1053600007F002FD284607F079FE00B301281ED0A1 +:10537000114951F824008369002050331A791860CC +:1053800060F306021A7151F82420936958331A7990 +:10539000186060F306021A7151F82430C3E96C00FA +:1053A00051F82410052088702046FBF759FF002093 +:1053B00070BD00003A000100287A00202DE9F0417C +:1053C0001646C2F30B24104607F048FE31461D482E +:1053D00007F0CAFC304607F041FE48B1012807D06B +:1053E000194DFF2755F824008179012903D006E0E3 +:1053F0000020BDE8F081C7702046FBF731FF55F86B +:105400002400877055F8241091F83A0120F0180014 +:1054100081F83A0155F82410420708D520F004001D +:1054200081F83A0100212046F9F72CFA04E0002225 +:1054300001212046F9F710FA0221304608F08CF8D5 +:10544000D6E700003A000100287A00202DE9F0415B +:105450001646C2F30B251146374807F085FC304647 +:1054600007F0FCFD88B101280FD0344C002754F818 +:105470002520D0780A2812D00ADCC8B303280ED021 +:1054800005280CD0082851D139E00020BDE8F08172 +:105490000E2834D00F281AD01A2847D13BE092F8B2 +:1054A000320120F0010082F8320154F8250090F812 +:1054B0003A11490706D480F83A711A220021284689 +:1054C000F9F7CAF90221304608F046F82EE092F8C2 +:1054D000320120F0020082F8320154F82510887958 +:1054E00038B101F1880229461A20F8F7B5FE1DE00F +:1054F00003E0E8B2FBF7CCFB18E08832F3E7507921 +:10550000A0B102F5997229461A20FBF763F954F805 +:10551000250047710AE092F83401314620F004007A +:1055200082F8340100222846FBF702FC54F82510CB +:10553000FF20C870A9E700003A000100287A002087 +:105540002DE9F04117460E46C2F30B24104607F032 +:1055500085FD022802D0032838D109E01C4D55F8FA +:10556000240090F8DB1049B990F83A01000702D501 +:105570000220BDE8F0812046FCF762F955F82400CE +:1055800090F8DA1011BB717880F8D41055F8241017 +:105590007088A1F8D60055F82410B088A1F8D8007A +:1055A00055F82410012081F8DA0055F82400C0785D +:1055B0000C280BD13946074807F0D6FB55F82410C4 +:1055C000FF20C87021460020FBF724F90020D0E717 +:1055D000287A00203A00010070B50D460646EFF724 +:1055E00031FA0C48F1F718FB0446EFF735FA7CB1B5 +:1055F0006667E567208C20F4F8604030208494F8DA +:10560000210020F0F800603084F82100204670BDB1 +:10561000002070BD3878002002214FF4027008F09D +:105620006DB82DE9F041044616460D461F46184652 +:10563000B047002810D0002101602060606006E0C3 +:105640003846B047002807D02168016020606D1EF1 +:105650002D042D0CF4D10120BDE8F08110B5FB28FC +:1056600001D8001D80B20221183008F047F8002848 +:1056700006D000214160C27942F04002C27141610E +:1056800010BD000070B516460D46044600F056F9F0 +:105690000DB1012000E000204FF4C0720AA1F0F724 +:1056A000A3F933460D4A29462046FFF7BAFF18B141 +:1056B000D4E90012116070BD206810B1204600F0DE +:1056C0003DF9002070BD0000626C6535305F6C6C88 +:1056D000645F656370742E63000000005D56010016 +:1056E0002DE9F04106460F460846FFF7B7FF0500D3 +:1056F0000FD0761E36040446360C0CD03846FFF721 +:10570000ADFF08B12060F4E72560284600F036F9C7 +:105710000020BDE8F08105602846FAE710B5044690 +:10572000FB2801D8041DA4B2022104F10C0007F0EB +:10573000E5FF002802D044720021416010BD000046 +:1057400070B516460C46054600F046F90CB101202E +:1057500000E0002040F2711209A1F0F745F933464C +:105760000C4A21462846FFF75CFF08B1204670BD71 +:10577000286810B1284600F02FF9002070BD000005 +:10578000626C6535305F6C6C645F656370742E634A +:10579000000000001D570100417921F020014171F6 +:1057A000C17921F08001C1717047417921F0200158 +:1057B0004171C17921F08001C171704770B5044613 +:1057C000050005D02046FFF7E7FF2468AC42F9D179 +:1057D00070BD02000CD0417921F080014171016857 +:1057E000814205D0002903D0914201D00846F2E75A +:1057F000704730B5027890F82030C2F3810440F24F +:105800007122B1FBF2F24FF41C75022C10D0A942A8 +:1058100005D343F0010180F82010921C11E023F021 +:10582000010280F82020028C61F34E02028430BD18 +:1058300043F0010380F82030A94201D3D21C00E0DC +:105840000322018C62F34E01018430BD0048704791 +:105850003C0C0A4010B5144CD4F80C111348084401 +:1058600021B1826F90F8821001F070FA00F018FCFC +:105870000020C4F80C01206988B1002040F25922B0 +:105880000BA1F0F7B1F8D4F80C0150B15FF00000B3 +:10589000BDE8104040F25A2205A1F0F7A5B801205A +:1058A000ECE70120F4E7000000000940FCFFFF3FA7 +:1058B000626C6535305F6C6C645F656370742E6319 +:1058C0000000000070B5050001D0012000E00020BC +:1058D000B3220EA1F0F788F8EFF7B4F81048046887 +:1058E00009E0AC4201D0012000E00020B92207A16C +:1058F000F0F77AF82468002CF3D1002229460848F2 +:10590000F1F73CF9BDE87040EFF7A6B8626C653579 +:10591000305F6C6C645F656370742E630000000020 +:105920003878002010B504460068002803D0FFF73F +:10593000C9FF0020206010BD07F086BA10B50446EC +:105940000122D4E9000100F005F82046BDE810402E +:10595000F1F752B970B515460C4600280DD003E09A +:10596000066800F01BF83046A042F9D1002D04D0A3 +:105970002046BDE8704000F011B870BD03680146D4 +:1059800001221846FFF7E6BF10B50446006800285C +:1059900003D0FFF7F3FF0020206010BD10B5040016 +:1059A00001D0012000E000204FF4907205A1F0F733 +:1059B0001BF8606907F048FA2046BDE8104007F080 +:1059C00043BA0000626C6535305F6C6C645F656380 +:1059D00070742E630000000010B504460122D4E963 +:1059E000000100F005F82046BDE81040F1F704B9C9 +:1059F00070B515460C4600280DD003E0066800F08F +:105A00000BF83046A042F9D1002D04D02046BDE865 +:105A1000704000F001B870BD10B5040001D0012045 +:105A200000E000204FF48D720349EFF7DDFF2046C0 +:105A3000BDE8104007F008BAB43E02002DE9F0417D +:105A4000204E0BF005FC800600D4FEE71E48002126 +:105A50001E4C016041608160C16040F2BC71204613 +:105A6000EEF719FD1A4D2C605FF00004286804EB76 +:105A7000441700EB870100221348F1F77FF82868EC +:105A8000641C00EB8700A4B241790F2C21F01001B7 +:105A900041F020014171C17B41F08001C173E5D328 +:105AA0004CF6691206F63C41022007F089FB0949D1 +:105AB000052007F001FDBDE8F0410749002007F08F +:105AC000FBBC000000000A403878002000040A40B7 +:105AD0001C040020015F01007D5F01000448016992 +:105AE000D0F80C0150EAC17000D0012070470000CE +:105AF0000000094010B50020FFF710FE040001D09F +:105B0000012000E000204FF4CF720EA1EFF76CFFF0 +:105B1000A08820F4FF50A0802079617920F0030054 +:105B200021F08001401C41F02001617120F0100043 +:105B30002071A07920F00100A07100202060204693 +:105B400010BD0000626C6535305F6C6C645F65632E +:105B500070742E630000000010B50446C07940F058 +:105B60004000E0716069002803D007F06DF9002063 +:105B7000606110BD10B50446406920B9FFF74CFDC7 +:105B80006061002803D0E07920F04000E07110BD92 +:105B900010B5EEF757FFFFF75DFEBDE81040EEF7DA +:105BA0005BBF00002DE9FF41324F944605460A9A3B +:105BB00038691946D7F80C312C1F00F0010E2E4E13 +:105BC0005EEA030E13D0C00702D03089401C30813A +:105BD000E878C0F38401204601F0B8F83089012844 +:105BE00001D9FFF737FE002004B0BDE8F0810020A6 +:105BF0003081E878C0F38400A4F882001F48A267CF +:105C0000426842F40012426003A8009002AB01AA6D +:105C100060460BF0D9FF07F580770298786001980D +:105C2000B860FD60BDF80C00E8840120386094F88D +:105C3000821088401249084201D0124801E0114800 +:105C4000401E11490860B4F882007081688DB081EF +:105C5000002007F053FC0D480078C00707D034F847 +:105C6000740FC0F30722A17B00200BF067FD2846CC +:105C7000BAE7000000000940387800200000074023 +:105C80005000000391F225001C0409401C00002074 +:105C9000F0B5C36D40F27127A3FB075CB0F862203A +:105CA000002602FB07C203FB0622B0F86030007832 +:105CB000C3F51C73DC17EB186241C0F381000228A6 +:105CC00002D06FF0370002E0012904D00348181811 +:105CD00042F1FF31F0BD0148B030F8E77CFDFFFF35 +:105CE0004CF69942904200D31046074A1378074A6F +:105CF00032F8133032F81110194448435221484306 +:105D0000000C103080B27047F4010020943E020075 +:105D100010B5094CD4F80C0100280BD04FF002103C +:105D200001F038F80020C4F80C010448416821F45F +:105D30000011416010BD0000000009400000074054 +:105D4000054A08B5116C526CADF800200160BDF831 +:105D50000010818008BD00000000094070B50A4AAB +:105D600051684FF41C701268A0EB112040F27125AD +:105D7000A2FB0536C9B201FB0561002402FB041138 +:105D80001818614170BD00004403094010B500229D +:105D90000649022007F024F84FF405710448EEF795 +:105DA0007AFBBDE8104000F005B80000A43E0200F8 +:105DB000F801002010B5484C0120216860F3000173 +:105DC0002160F1F78DF82168002060F39A6121606D +:105DD000216860F3DB61216020684049084040F49D +:105DE00060202060206D40F4A6702065206D40F09A +:105DF000C04020652168012060F304112160216802 +:105E000060F341012160206835490843206035482E +:105E1000A0673548E06735494FF011300860091D2B +:105E20000860091D0860091D0860091D0860002040 +:105E30002064606C6FF30F0060642168002060F3E1 +:105E400049212160A16A072060F30201A1620020BC +:105E5000C4F80C0120482649083018220A6001685D +:105E600021F0C001403101602248D4F8001290F8BE +:105E7000FC026FF3080141F480710843C4F800028A +:105E80001D48816821F4002181601C4C216821F0AB +:105E90001C0141F008012160216821F4E0712160BA +:105EA000216821F47F0141F4B8112160216821F0BB +:105EB0007F412160816841F40021816007F016FE76 +:105EC0000120211D0860206840F002002060206849 +:105ED0008006FCD510BD000000000940FFFF00FC5B +:105EE000040000804F002F01565218208005094001 +:105EF00060010440307500200000074000040940A4 +:105F000070B5114D0520B5F9164206F01DFF14E0DD +:105F100004EB440005EBC0061023D6E90101022280 +:105F200007F03AF90C364ECE80E84E0007F094FAAE +:105F3000641C24B2162C00D30024B5F91402A0422C +:105F4000E6D1A5F8164270BDF40100200A4800BF52 +:105F5000D0F81413C907FBD1D0F8381311F0010F92 +:105F6000FAD142680A2161F303024260416811F0EC +:105F70000F0FFBD1704700000000094010B5002052 +:105F800006F0E2FE0C490D484A89082A0FD0092A7A +:105F90000DD00A2A0BD08A894FF4C8610A328A428E +:105FA00000D80A46BDE81040032107F03BBBBDE81E +:105FB0001040032106F0D8BE387800204F000300BF +:105FC00042F21C110160014870470000D8DB0A4012 +:105FD00000487047A8D50A4000487047BC0B0A40EB +:105FE00070B5EEF72FFD10480121C0F8381300BF3F +:105FF000D0F8381311F0010FFAD100F54B70466854 +:1060000005688068C0F51C74EEF726FD40F2712229 +:10601000A5FB0203002106FB023205FB012100194A +:1060200041F1000170BD00000000094070B5EEF7BD +:1060300009FD0F4CB4F9141201EB410004EBC0064A +:10604000491C361D0DB2162D00D30025B4F91602D9 +:10605000A84201D0012000E0002040F2B31205A1C7 +:10606000EFF7C2FCA4F81452EEF7F6FC304670BD10 +:10607000F4010020626C6535305F6C6C645F6563B1 +:1060800070742E630000000070B50D460446FFF7E3 +:10609000CDFFC0E90045BDE87040052007F02EBAED +:1060A0002DE9F047204CD4F840A0D4F844900025C6 +:1060B000D4F81403C007FBD1D4F8380310F0010F53 +:1060C000FAD1EEF7BFFC276DB80404D5FFF746FE02 +:1060D0000646884601256168012060F3041161606D +:1060E0006068C0F300100028FAD1FFF763FE206D4E +:1060F00038432065C4F840A0C4F84490FCF73CF84D +:10610000EEF7AAFC3DB1EEF79DFC3046414600F0AB +:10611000DFFBEEF7A1FC780504D5BDE8F0470320CE +:1061200007F0ECB9BDE8F0870000094070B50E46F5 +:10613000040000D00120DA2209A1EFF755FC00F09D +:106140002BF905460020E86232462946204600F039 +:1061500057FC0028284602D100F0F4FB002070BD57 +:10616000626C6535305F6C6C645F7363686C2E6362 +:10617000000000002DE9F0470468DDF820A0164675 +:1061800012EB0A081D46074643F1000908B1012039 +:1061900000E000204FF48E7231A1EFF725FCD7E923 +:1061A0000401301A75EB010030D30CE0D7E904018B +:1061B000301A75EB010004D3D4E90410891BA841FF +:1061C00004D227462468002CF0D13EE0B4B3D4E9D1 +:1061D0000201B0EB080271EB090236D2227FD3072D +:1061E00017D0920712D54FF4FA72821841F10000CD +:1061F000B11A75EB000009D36FF0F900311845F1C1 +:10620000FF30C4E90410274624681EE00020BDE8E2 +:10621000F087B8EB00004FF0FA01421821463846EB +:1062200000F080F80028F2D03C68D4E90230B3EBEB +:10623000080270EB090002D3012001E005E0002014 +:1062400040F2451206A1EFF7CFFB00F0A5F800F1F0 +:106250000C018660A1E8200738600460D7E70000E1 +:10626000626C6535305F6C6C645F7363686C2E6361 +:10627000000000002DE9F05F1546DDE90A8B076894 +:10628000D8F800101C4611EB050A064643F1000938 +:1062900008B1012000E00020F1221DA1EFF7A4FBCE +:1062A000D6E90401281A74EB010021D318E000BFDD +:1062B000D6E90401281A74EB01000FD3D7E90201D3 +:1062C000421BA1410AD3401B584507D3D8F8001000 +:1062D000814200D20846C8F8000003E03E463F680D +:1062E000002FE5D1D6E90401281A74EB010002D28F +:1062F0000020BDE8F09F00F04FF8C0E90254C0E96B +:1063000004A9D8F80010816130600760F1E700004F +:10631000626C6535305F6C6C645F7363686C2E63B0 +:10632000000000002DE9FC41086816460C46A8B1A3 +:1063300081682269891AB14210D2027FD20706D041 +:10634000A26902B02146BDE8F04100F059BB721AC3 +:1063500001462046FFF7E6FF002812D0D4E90205E7 +:1063600000278619D4F82CC07D41BCF1000F0AD05B +:10637000CDE90065D4E9082300216068E04710B149 +:106380000020BDE8FC81C4E90265A06980196F4165 +:10639000C4E904070120F4E770B5074C206C18B974 +:1063A000606C206400206064256C0DB900F03CFD39 +:1063B00028682064284670BD487800202DE9FE4FEB +:1063C00004460CA89846E0C891468A46EEF73AFB88 +:1063D00000F0C0FA2146FFF7A9FECDE90057434679 +:1063E0004A465146029600F0D9FB0446EEF734FBCC +:1063F00014B16068BDE8FE8F0020FBE72DE9FE4F79 +:1064000090461C4681460025EEF71CFB00F0A2FAE0 +:1064100006460768D0E90420B2EB0801A04134D257 +:1064200018EB090B44F1000A01E03E463F68FFB15A +:10643000D7E90220B2EB0801A041F6D3D6E9041255 +:10644000B8EB010074EB02001FD3D7E90231B3EBC4 +:106450000B0271EB0A0120D3FFF79EFFC0E9034B4B +:106460000546C0F80880C5E905A93060076014E05A +:10647000FFF792FFC0E9034B0546C0F80880C5E965 +:1064800005A900213060016007E0DDE90C233046FA +:10649000CDF8009000F056F80546DDE91101012223 +:1064A0008DE807000EAC28460ECC00F077FB0446C2 +:1064B000EEF7D2FA14B16068BDE8FE8F0020FBE76A +:1064C0002DE9F0471546DDF820A00746066812EBD7 +:1064D0000A0243F10000FA2112EB010840F1000921 +:1064E000D7E904101C46491BA04104D35146384645 +:1064F00024E03746366886B1D6E90410491BA0412E +:10650000F7D3D7E90410491BA04115D2D6E90223DD +:10651000B8EB020179EB03000ED2FFF73DFFFA2141 +:106520006A1800F10C0344F100018260A3E802073D +:1065300038600660BDE8F08751463046BDE8F04758 +:10654000FFF7F4BD2DE9F0470446089E0568D4E93D +:106550000401101A4FF0000873EB01003BD315E063 +:10656000D4E904C71CEB060C47EB0807B1EB0C01A0 +:10657000E146B84108D3FFF70FFFD4E9041200F158 +:106580000803A3E8060220E02C462D682DB1D5E9CA +:1065900002108F1A70EB0307E2D3D4E90407111A33 +:1065A000BB4118D3801947EB080780462DB1D5E9C8 +:1065B0000212401A77EB02000DD2FFF7EDFED4E98C +:1065C000041200F10803A3E80601C0E90576206083 +:1065D0000560BDE8F0870020FBE72DE9FF4F83B0A1 +:1065E000054610A80E46B0E8000FEEF72BFAFFF7AD +:1065F000F7FC04460F4600F0ADF9621947F10003BD +:106600000096FFF75DFFCDE9009BCDF808A0DDE91E +:106610000512434600F0C2FA0446EEF71DFA1CB11B +:10662000606807B0BDE8F08F0020FAE72DE9F04779 +:1066300086B004460EA89A46B0E8800316460D467A +:10664000EEF700FA00F086F922462B460096FFF797 +:1066500091FD012104AACDF80090CDE90121434626 +:106660003A46514600F09AFA0446EEF7F5F91CB1A5 +:10667000606806B0BDE8F0870020FAE72DE9F04F2A +:1066800087B0044610A81F46B0E8000F16460D4616 +:10669000EEF7D8F900F05EF922462B46CDE9006707 +:1066A000FFF7E8FD032204ABCDF800B0CDE90132DD +:1066B00053464A46414600F071FA0446EEF7CCF9DB +:1066C0001CB1606807B0BDE8F08F0020FAE72DE943 +:1066D000FE4F9A46DDE90F87DDE90DB916460446FF +:1066E0000D46EEF7AFF900F035F922462B4600963D +:1066F00097B1FFF727FF0123CDF80090CDE9018383 +:106700005B4651460C9A00F049FA0446EEF7A4F9AC +:106710002CB16068BDE8FE8FFFF7D2FEEBE70020EA +:10672000F8E72DE9FF5F88B08246DDE91E54DDE918 +:106730001C76002083468146DDF86C80EEF782F9F6 +:1067400004F108002099059079B30120CDF800806C +:10675000CDE90340CDE90176DDE9091250461A9BE7 +:10676000FFF7B5FF2860002864D0D4E90013189A19 +:1067700050468A18924500D31046DDF814C0CDE982 +:106780000476CDF818C01A9E4FF0000ACDE9000A31 +:10679000CDF80C800296DDE916208A1843410A984C +:1067A000FFF72CFE6860F0B33AE0FFE70020CDF879 +:1067B0000080CDE90340CDE90176DDE909125046BC +:1067C0001A9BFFF784FF286090B90020CDF8008065 +:1067D000CDE90340CDE90176DDE9183209991AEBDC +:1067E000030051411A9B0A9AFFF771FF286008B312 +:1067F0000598CDE90560CDE903871A980290D4E9A0 +:106800000003DDE9182182185941CDE90021DDE9B5 +:10681000162182184B410A98FFF7F0FD686080B19D +:10682000D4E9023000E013E0D4E90012B3EB010B2D +:1068300060EB0209EEF710F90CB058464946BDE886 +:10684000F09F0021286800F00BF800202860F1E795 +:106850000021286800F004F8C5F800A0EAE700006D +:1068600070B50E46050008D0EEF7ECF8174A106830 +:106870004068A84203D1012302E0012070BD00233B +:10688000124CE06B4168A94208D116B10021E163C6 +:1068900009E0EEF7E1F8002070BD02469AB11068F9 +:1068A0004168A942F9D10168116000F04BF8B4F8D1 +:1068B0004800401EA4F848002BB1FFF791FBC4E943 +:1068C000040100F0EDF8EEF7C7F8D6E748780020AD +:1068D0002DE9FF4105460C46FFF782FB07460E46B1 +:1068E000002008F099FA2820391846F10000691AAA +:1068F00074EB000004D22846214600F0C3F918E0EA +:1069000003A8009002AB01AA284621460BF05CF9CF +:106910000A480299C0F84413BDF80C10019AC1F559 +:106920001C7142EA0121C0F84813C16D41F40051C5 +:10693000C165012008F070FABDE8FF810000094040 +:106940000020704702494A6C0260486470470000AA +:106950004878002010B5094CE06B00280BD1FFF7F8 +:106960003FFB2268C4E9040122B1D2E90234C01A13 +:10697000A14101D2014810BD104610BD4878002049 +:1069800010B500F009F8010002D0D1E9020110BDF4 +:106990000020014610BD000070B5050004D0EEF7E0 +:1069A00051F80748046805E0002070BD6068A842FF +:1069B00002D02468002CF9D1EEF74EF8204670BDC5 +:1069C0004878002010B5FFF703FB044650210B4820 +:1069D000EDF761FD4FF4C6612046EDF75CFD074819 +:1069E0000021046401EB410004EB0010491C00F19C +:1069F000300289B202601F29F4D910BD4878002006 +:106A00002DE9FC41076814460D46060001D001201F +:106A100000E000207F221DA1EEF7E6FF4FF0000806 +:106A200004F5FA7001E03E463F685FB1D7E902C164 +:106A3000D6E90423BCEB020261EB0301121A71EBED +:106A40000801F0D3D5F82CC0BCF1000F0CD0D6E96A +:106A50000401CDE90001D5E9082300216868E04779 +:106A600010B10020BDE8FC81D6E90410FA22891893 +:106A700040F10000C5E90210091940EB0800AC61C3 +:106A8000C5E90410356001202F60EBE7626C6535C5 +:106A9000305F6C6C645F7363686C2E630000000091 +:106AA0002DE9FC41204D06460F4695F84A00002886 +:106AB00038D108F0B1F9E86B38BB23E0D4E9021013 +:106AC000891BB84122D220682860B5F84800401ED2 +:106AD000A5F84800D4F82CC0BCF1000F07D0CDE9D0 +:106AE0000067D4E9082301216068E04707E0D4E9A2 +:106AF0000801CDE90001201DA16A0DC88847204684 +:106B0000FFF720FF2C68002CD8D106E02CB1D4E987 +:106B10000201BDE8FC41FFF7DBBEBDE8FC410120FE +:106B200008F07AB9BDE8FC814878002070B50546C8 +:106B30000024EDF787FF0748016805E0886AA8424E +:106B400001D1012402E009680029F7D1EDF784FFA3 +:106B5000204670BD4878002010B5EDF773FFFEF7B2 +:106B6000BDFF10B90C48C16B19B1EDF775FF0020DE +:106B700010BD04684CB1FFF733FAA1680C1A322C2F +:106B800001D9323C03E0002401E04FF0FF34EDF77F +:106B900063FF204610BD0000487800202DE9F04733 +:106BA0001E46DDE909A8DDF8209017460D460400D1 +:106BB00002D025B1012003E00020BDE8F0870020CD +:106BC0004FF4FF7211A1EEF70FFF84F81C80C4E9A7 +:106BD0000A571348C4E90869816B491C816301D1D4 +:106BE000012181636160D4E90212CAE90012B0F8A0 +:106BF0004810491CA0F848100068A04203D1FFF7D4 +:106C0000EFF9FFF74DFF2046D7E70000626C6535CE +:106C1000305F6C6C645F7363686C2E63000000000F +:106C20004878002070B50646EDF70CFF104CE56B78 +:106C3000CDB16868B04216D10020E0632068A84258 +:106C400011D1FFF7CDF9C4E9040128682060284676 +:106C5000FFF778FEB4F84800401EA4F84800D4E9D5 +:106C60000401FFF71DFFBDE87040EDF7F5BE000021 +:106C70004878002010B5FFF771F8BDE8104000F02B +:106C800001B800002DE9FC411A4D064600202C6891 +:106C9000E863C5E90C610F4634B3D4E902017040E2 +:106CA0007940084310D1D4E90801CDE90001A16A77 +:106CB00032463B466068884760B1EC63D4E9040122 +:106CC000BDE8FC41FFF704BED4E9040170407940FF +:106CD000084309D1206828602046FFF733FEB5F845 +:106CE0004800401EA5F8480030463946BDE8FC4142 +:106CF000FFF7D6BE4878002010B5EDF7A3FE0D4C87 +:106D0000002084F84A00E06B88B100204FF44B72F9 +:106D100009A1EEF769FE206828B1FFF761F9C4E91F +:106D20000401FFF7BDFEBDE81040EDF795BE012060 +:106D3000ECE7000048780020626C6535305F6C6CD1 +:106D4000645F7363686C2E63000000001FB58DF8EC +:106D50000810FE218DF809100021CDE90002ADF8E0 +:106D60000A10ADF80C10426F69464FF0021000F0A7 +:106D700001F81FBD70B516460D460446FFF756F9DB +:106D8000C0E900461ECD08301EC0BDE87040052099 +:106D900006F0B4BB70B50546FFF748F9044600F1AC +:106DA00008061348006840F08041091F886FC6E953 +:106DB00000106431887F307211F83E0C7072C88800 +:106DC00070818888B081256008696060052006F0C0 +:106DD00095FB08480078C00708D0A088317ABDE844 +:106DE0007040C0F3072201200AF0A8BC70BD00006B +:106DF0000C0109401C00002010B5C478036864F33E +:106E00001F631360808861F31F40506010BD0A68E3 +:106E100002600A79017962F304010171704701226D +:106E200011460720F4F7C0BB012202210720F4F726 +:106E3000BBBB00002DE9F04788462C49044600689A +:106E400051F8285088B04FF0000920B1A04202D07C +:106E5000E96B884203D1002008B0BDE8F0875835BF +:106E60006864E86BFFF78CFD0646E0790F4600F09A +:106E700003022868817DA088C0F307100AF0C8FDCE +:106E800082462068C179808801F003022968C0F336 +:106E90000710897D0AF0BCFD0246204600F06CFC1C +:106EA000504483B2206800F067FC104482B2002096 +:106EB0000DF1180C0294CDE903C0F118CDE90008DA +:106EC00047414FF49670081847F10001084BFE3215 +:106ED000FFF7FDFB286430B10698811B204601F0C6 +:106EE00063F84846B8E74FF04309FAE7487A0020CC +:106EF00073B501002DE9F04F05467E484FF0000BB9 +:106F000097B050F82540DA46D4E9227657EA0600D1 +:106F10007ED1FFF765F84FF4487201278018A783E8 +:106F2000E28B41F100014FF4487810AE012A55D0B0 +:106F30000DF1300CE389CDE9073CCDE9096A6E4BD0 +:106F4000CDE9043A0695A36D40F2712CD3F80620E2 +:106F500022F07F4202FB0CF24FEAE27CCDE9022CE8 +:106F6000D3F8032040F2712322F07F425A43D31713 +:106F7000CDE90023626AFE32FFF7D3FBC4E92001AA +:106F800008430CD0DDE910018834C4E900010C98F5 +:106F9000A060883C00210D98FFF762FC9CE014344F +:106FA000002334F8060CCDE90276CDE90050524AB0 +:106FB00040462169FFF711FBE067DDE91001C4E9F4 +:106FC0001D01606C40F27121D0F8060020F07F4076 +:106FD0004843C117C4E91B01143C7DE0143400236D +:106FE00034F8060CCDE90276CDE90050424A40461D +:106FF0002169FFF7F2FAE067DDE91012C4E91D121A +:107000000021C4E91B11143C002865D1432000E095 +:1070100002E017B0BDE8F08FFEF7E2FF0246084637 +:10702000C82112EB010840F10009D4F8900008B122 +:107030005846ECE7A08B401CA4F81C00EDF7F2F9D1 +:10704000C0B20621B0FBF1F201FB12014FF47A70DD +:107050004143C817D4E92023C91970418F1840EB68 +:107060000306B7EB080176EB090001D247464E460E +:107070003A4633462146284600F04EFA0028C6D14B +:107080001C48D4F824B050F82500A04201D10120BA +:1070900000E0002040F6434218A1EEF7A5FCE0898D +:1070A00014AA0495CDE905021348CDE9020A41F27C +:1070B0008830381846F10001CDE900013A463346E0 +:1070C0005846FFF79BF9C4F89000DDE91412C4E9B3 +:1070D000221238B1A4F820A02946204600F014F866 +:1070E000C0B294E7208C401C80B220846428A5D9CB +:1070F00003208CE7487A0020CDB70100626C65352B +:10710000305F6C6C6D2E63002DE9F0470446406CD7 +:1071100088B08A4600684FF00008D0F80090D9F88F +:107120000050002D78D04D45FCD0E87900F00302E6 +:10713000A06D817DA888C0F307100AF069FC06469F +:10714000A06DB0F80110CA0715D0E97901F003026B +:10715000817D22200AF05CFC0746E87900F00302FA +:10716000A06D817D0C200AF053FC3844064406F5DE +:107170009676434F1BE0890718D5E97901F00302A1 +:10718000817D0C200AF044FC0746E87900F00302F8 +:10719000A06D817D28688088C0F307100AF038FC54 +:1071A0003844064406F59676364F00E0364FD4F85C +:1071B000940090B35FF0000040F6D12233A1EEF7C7 +:1071C00013FC002006ABCDF80890CDE90330CDE9E3 +:1071D000000A54F8242F4FF4167CD4E9193112EB2D +:1071E0000C0C40F1000213EB0C0051413B4606F140 +:1071F000FE02FFF76CFA2067243C00B1012040F644 +:10720000D82222A1EEF7F0FBD4F8940040B1A06D93 +:10721000807D012806D00EE02EE0FFE70120CBE7BD +:10722000432028E0DDE906016FF00902821841F1F0 +:10723000FF30CDE90620D4F888100698421A20467F +:10724000616C04F0B9FB1048874206D151462846CC +:10725000C4F89C50FFF7EEFD0DE00A4887420BD1C1 +:107260002868C4F89C00CDF800A02B68DDE9060171 +:10727000324600F011F8804608B04046BDE8F0877D +:1072800085B5010097B5010073B50100626C6535E5 +:10729000305F6C6C6D2E63002DE9F04F89B08B462A +:1072A0002749DDF848900746186851F829601C46C0 +:1072B00015464FF0000820B1A04202D0F16B884281 +:1072C00003D1002009B0BDE8F08F58367064E07932 +:1072D00000F003023068817DA088C0F307100AF037 +:1072E00097FB82462068C179808801F003023168EB +:1072F000C0F30710897D0AF08BFB0246002006AB25 +:107300000294CDE90330CDE900097B194BEB000174 +:1073100040F29D30181841F100010A4BFE32FFF790 +:10732000D6F9306448B10698C01B411B11EB0A0125 +:10733000204600F039FE4046C4E74FF04308FAE724 +:10734000487A002073B5010070B505461548B5F5BB +:10735000006F046807D000205E2213A1EEF744FB03 +:10736000A06810B107E00120F6E700212846FEF7EB +:1073700033F9A06098B1A168002081F82600A168C7 +:107380000D480861A1680D484861A06845670C4830 +:10739000A16890F8450181F82300002070BD072006 +:1073A00070BD000068040020626C6535305F6C6C55 +:1073B0006D5F692E63000000D6BE898E555555005D +:1073C0003075002070B50D460D4951F82040206BF6 +:1073D00028B900212846FEF7FFF8206368B1216B29 +:1073E000002081F82600216B06480861216B0648C1 +:1073F0004861206B4567002070BD072070BD00000C +:10740000487A0020D6BE898E5555550010B50446E1 +:10741000D4E900020AB10023136001291BD002291C +:1074200018D110B10068002814D12522022120466D +:10743000FEF786F92068818821F47F6160318180C0 +:107440000068818821F47F6160318180417921F079 +:107450009001417110BD252201212046FEF770F9EF +:107460002068818821F47F616031818010BD002215 +:1074700040F603410320F2F7F7BF000010B5806D1E +:10748000C07C0AF0A5FA0A496422B1F84011084408 +:1074900001B291FBF2F302FB131158B2322901DD64 +:1074A000401C03E011F1320F01DA401E40B210BD62 +:1074B0003075002010B5022902D1406D407970B9B5 +:1074C000032005F0CBFD022806D1074890F84500BF +:1074D000012804D0032802D000F0F6FF08B10020F4 +:1074E00010BD012010BD000030750020094810B506 +:1074F000006850B1416A41B1012180F83010406A02 +:107500000021FFF7ADF9002803D0BDE8104000F0DE +:1075100079BD10BD6804002070B5D1E920452C4329 +:1075200003D10B7F0022432116E0CD8B4DB18C8B14 +:10753000AC4206D9E3B20022432103F03DFE4320D2 +:1075400070BDD1E9285455EA040609D0AA1A9C4115 +:1075500006D20B7F00223C2103F02EFE3C2070BDA2 +:10756000002070BD00B5024601F10C0000F024FEC1 +:10757000C107064804D0916A0164D16A416400BD24 +:10758000426C002161F31042426400BD00000940DA +:10759000490012B1012A04D101E01E3101E001F5D8 +:1075A000967189B2FEF725B92DE9F04706466E4877 +:1075B0000D460022046811464FF4486701EB0110A4 +:1075C000284410F8093F032B38D2B0F80330B0F844 +:1075D00001C0634571D8B0F80530B0F807C0634505 +:1075E0006BD8062B69D3BC4567D8B0F80B90B9456A +:1075F00063D8B9F10A0F60D3B0F80980B8F5FA7F03 +:107600007ED208F1010808FB0CF8B8EB890F77DC93 +:10761000B0F80D80B0F80FC0E04571D8B8F1000F98 +:1076200002D0BCF1000F03D1401D038103884381C8 +:10763000521C491CC9B2D2B20329BFD3EAB30020FD +:1076400084F86D00012084F888003C22294604F16A +:107650003100ECF7F9FE3046FFF776FE002850D1F6 +:10766000FF22022104F10C00FEF70CF82222012176 +:1076700004F11400FEF764F8E068E8B36069D8B379 +:10768000A1690860A06894F83120C18862F389017B +:10769000C180E268C16862F31E01C16061698160F6 +:1076A00094F8332090F8361062F3000180F8361019 +:1076B000616B0163218F818600E021E094F8321034 +:1076C00022462A4804F048FA00281AD1ECF7AAFE0C +:1076D00020F07F47606900F10C06818821F47F610A +:1076E00001F508718180417921F010014171A9787B +:1076F0000029C17909D000E005E041F0040106E06D +:107700001220BDE8F0870720FBE721F00401184AAA +:10771000C17192F8632162F30101C171304604F036 +:10772000F7FA3771380A7071380CB0711048D0F818 +:107730003B11316190F83F0130750220F0710C204F +:10774000B7FBF0F100FB1171707D491D61F304007E +:1077500008497075097861F3471070752046BDE8D7 +:10776000F04702F073BB0000680400205E76002042 +:1077700030750020F40100208179C90703D0C07A58 +:10778000C006000E70470020704700002DE9F0434E +:1077900095B09946DDE91E47DDE920650DF11C0E27 +:1077A00000230DF1400C0DF13008AEE80811DFF8B0 +:1077B00084C00A93CDE904C340F2E24C07FB0CF706 +:1077C0004FEAE77CCDE9027C40F2E2477C43E717D1 +:1077D00006938018CDE9004759414A46FEF7A1FFBC +:1077E00004460F46084311D000210C98FFF738F8E3 +:1077F00000210D98FFF734F80FA800900BAB0EAAEC +:10780000204639460AF0E0F90E9818B1002015B06C +:10781000BDE8F0830B9840080B903080ECF702FE37 +:107820000B99B0FBF1F201FB1200401C28800120F3 +:10783000EDE700004169010070B5044605022846E5 +:1078400005F00CFC022804D100222146284600F055 +:10785000FFFC002070BD10B5044603F009FB10F0DA +:10786000FF0003D12046FFF745FBC0B210BD00006A +:107870002DE9F047A74992B051F82040276BE56BFE +:107880003F1DCDB1A44A616D00EB400002EB40000A +:10789000097AFE3004F1280204F05EF906000CD1EA +:1078A000216C82462046C1F800A004F033F9A88874 +:1078B00010F47F6F04D007E0072012B0BDE8F08716 +:1078C00020F47F606030A880606D8179287961F351 +:1078D00003002871286860B1818811F47F6F03D19B +:1078E00021F47F6160318180017921F00F01091D50 +:1078F0000171D4E90F010860787820F008007870F1 +:10790000616D20F004004A79798862F389017980F9 +:10791000F97821F07C01091DF9707870387820F031 +:107920000F003870606D007CF877E06B7860616BF9 +:10793000B86861F31E00B860387DFA2140F001009C +:107940003875787D20F03F002730787597F8200053 +:1079500020F0010087F82000388C61F34E00388455 +:10796000082087F82200606B00B1012040F6F44245 +:107970006AA1EEF739F8606BFDF720FF606DC07902 +:1079800010B140F2E24001E040F2DC50E0814500FD +:10799000E06B002211468088C0F307100AF038F827 +:1079A0000544208B68B1002205F596751146182014 +:1079B0000AF02EF80544208B801D002280B211466B +:1079C00003E000229635114622200AF021F80544F2 +:1079D000606D0DF130094FF00108C07980B14FF4AE +:1079E0000060788550486062E0890DF1040A4546E0 +:1079F0004D490094AAE82102FE3100234B4A77E06A +:107A000005F51C7040F27121B0FBF1F081B279856F +:107A100040F27120414332316162606D40F2712366 +:107A200002885343AB4202D34088824201D91226D6 +:107A30006DE0E08B012853D0FEF7D2FA0DF1400C37 +:107A4000E389CDE9073CCDE9099A384BCDE9043A01 +:107A500006946422636D801840F2712C5A8841F1BB +:107A6000000102FB0CF24FEAE27CCDE9022C1A88FD +:107A700040F271235A43D317CDE900234F4605F155 +:107A8000FE02FEF74EFEC4E920014246A4F81C8027 +:107A900008430BD0DDE90C018834C4E900011098DB +:107AA000A06000211198FEF7DBFE30E0E089CDE90F +:107AB0000227CDE9004054F8241F00231B4A64200C +:107AC000FEF78BFDE066DDE90C01C4E91901206BCE +:107AD00040F2712140884843C117C4E9170116E0FC +:107AE000E28901A845460094A0E824020F4A002339 +:107AF0006420FEF772FD1C346067DDE90C12C4E9F6 +:107B00001B120021C4E91911258000B94326304613 +:107B1000D3E60000487A002030750020626C65359D +:107B2000305F6C6C6D2E6300008813009DB6010001 +:107B300010B5044603F09CF910F0FF0003D1204675 +:107B400002F03EFBC0B210BD10B50446ECF76AFC73 +:107B5000410703D500F00100001D01E000F0030023 +:107B6000034944EA001040F08000886210BD000024 +:107B700000000940FEB5446B16460546DBB1207A8D +:107B800010F02E0F17D1207900F00F00052812D128 +:107B9000E07B00F00301286B001DFEF779F80B462F +:107BA00002AA0021CDE90012296B0246091D2046D8 +:107BB000F7F78AF808B10020FEBD0023BDF80820C1 +:107BC0001946304603F0F8FA0120FEBD70B5446B4B +:107BD000154643B1227A12F02E0F04D1227902F019 +:107BE0000F02032A01D0002070BD806D007E98B185 +:107BF0000A46092305212D2005F0CEFA1321017034 +:107C000045706179C9098170A169C0F80310A18B21 +:107C1000A0F8071005F020FC012070BDF0B5446B02 +:107C20008BB015460F4606461BB1207A10F02E0F7A +:107C30001CD0314850F82500406DC07978B1F06B08 +:107C40006A46D0F81210CDF80310C08AADF80700CC +:107C500000213C20F7F725F93C200BB0F0BD1BB10B +:107C6000207A10F02E0F01D0104641E0207900F06C +:107C70000F00032824D0052839D1E07B00F0030150 +:107C8000306B001DFEF704F80B460AAA0121CDE96E +:107C90000012316B0246091D2046F7F715F830BB7C +:107CA000082D06D20023BDF828201946284603F0E7 +:107CB00083FA00222946384600F0CAFA0020CCE7B1 +:107CC000706D407C98B10A46092305212D2005F0EE +:107CD00063FA1321017045706179C9098170A16946 +:107CE000C0F80310A18BA0F8071005F0B5FB2846DB +:107CF00002F0AEF9B1E70000487A00202DE9F04724 +:107D00000646214800251F46046891468A46A84633 +:107D1000002C36D0606A30B1FEF784FF002060622C +:107D200094F8300048BB052E04D0062E1AD0192E28 +:107D300020D117E00026E7680DE0387900F00F0049 +:107D4000072805D13A465146204600F01DFB88B968 +:107D50003F68761CF6B24E45EFD3204602F076F827 +:107D6000804607E03B464A465146204600F04AFB23 +:107D70000500F2D055EA080503D0BDE8F04700F051 +:107D800041B9BDE8F0870000680400202DE9F04704 +:107D90000F468146089849681D46904619B328B198 +:107DA0003946484600F02FF800281AD1C5B17C6842 +:107DB000A088C0F30710C0F1FF06AE4215D3A0881B +:107DC0002A46C0F3071020440C304146ECF73CFB38 +:107DD000A0884FEA303000EB05604FEA3050A080B9 +:107DE0000020BDE8F0871220FBE720440C3032462B +:107DF0004146ECF729FBA088B04440F47F60A080A6 +:107E0000A81BC5B2CCE70023FF2200F001B8000098 +:107E10002DE9F04F4D6804469DB0894605F10C00F0 +:107E20009A46904603260EA9834603F03FFD18B1FB +:107E30009DF8380020B104E01F201DB0BDE8F08F90 +:107E400004269DF83A0040F2777240F30010401C7F +:107E500051A1EDF7C9FD9DF83A0040F010008DF8F2 +:107E60003A00A06D817D9DF84C0061F347108DF8BC +:107E70004C004C48007805289DF84A0002D340F099 +:107E8000400001E020F040008DF84A004046FDF738 +:107E900045FC04002BD02C6000272760C9F8044063 +:107EA00020792C2220F00F00C01D20710EA903A8FC +:107EB000ECF7CAFA9DF83A008DF80D708DF8347021 +:107EC00000F00C008DF80E00BAF1000F03D020F086 +:107ED00004008DF80E000022214603A801F074FD75 +:107EE000A088C0F30711414503D8012002E0072014 +:107EF000A3E7002040F28F7227A1EDF775FDA88857 +:107F00006A7AC0F307118819824227D2801A87B291 +:107F10004819C11BA0880C31C0F3071020440C3055 +:107F20003A46ECF791FAA088C0F30711394461F39F +:107F30000B10A080A888C0F30711C91B61F30B10B8 +:107F4000A880A088C0F30711414501D8012000E0B6 +:107F5000002040F29B7210A1EDF746FDA888C0F307 +:107F600007119DF863000A1A00EB0B01431906F193 +:107F70000C001844ECF768FAA8880022C0F3071038 +:107F8000841929460EA801F01FFDA88864F30B1080 +:107F9000A880002051E70000626C6535305F6C6C92 +:107FA0006D2E6300F401002070B50D4600F0D5F889 +:107FB000040001D0012000E0002040F62A220DA19B +:107FC000EDF712FD0E488542207804D220F08000A3 +:107FD00020701E2004E040F0800020704FF4967066 +:107FE000B5FBF0F0B4F8011060F30C01A4F8011037 +:107FF00070BD0000626C6535305F6C6C6D2E630087 +:10800000C4BF030070B50F4D2C68002C19D094F834 +:10801000300028B100224FF6FF710220F6F741FF31 +:10802000A06808B1FDF74EFC04F10C00FDF786FCDA +:1080300004F11400FDF7D0FC204604F005FF0020F9 +:10804000286070BD6804002070B5040001D00120D4 +:1080500000E0002040F2611214A1EDF7C5FC04F12C +:108060003000FDF75FFC04F13400FDF767FC04F11C +:108070003C00FDF7B1FC04F14400FDF7ADFCE06C01 +:1080800004F0E2FE0025E564A06D10B104F0DCFE12 +:10809000A565E06D10B104F0D7FEE565606D0028C0 +:1080A00002D004F0D1FE656570BD0000626C6535DC +:1080B000305F6C6C6D2E630070B5154DC2F30B24F0 +:1080C000104655F82410897901BB04F0C7FFE8B1C8 +:1080D00001281BD0022801D0022070BD55F82400D1 +:1080E000052200F22D11481FECF7E7F970B155F8A1 +:1080F0002400052100F22D1003F09CFD18B9012188 +:108100002046F5F7C7F92046F5F70AFE002070BDB6 +:10811000287A002000B50C30024600F04DF80146E8 +:10812000000701D4002000BD02F10200CA0701D0FF +:1081300000F106008A0701D500F106004907F2D5D3 +:10814000401C00BD801C7047818811F47F6F02D0F5 +:10815000007E800970470020704700B50C30024651 +:1081600000F02AF80146C00601D4002000BD02F14B +:108170000200CA0701D000F106008A0701D500F10C +:1081800006004A0701D500F101000907EED5801C61 +:1081900000BD00B5024600F00FF80146400701D4CB +:1081A000002000BD02F10200CA0701D000F1060064 +:1081B0008907F6D5801D00BD0178890601D0407879 +:1081C00070470020704700B50C300246FFF7F4FFFF +:1081D0000146800601D4002000BD02F10200CA075A +:1081E00001D000F106008A0701D500F106004A0718 +:1081F00001D500F101000A0701D500F10200C9060E +:10820000EAD5C01C00BD00B50C300246FFF7D4FF14 +:108210000146400601D4002000BD02F10200CA0759 +:1082200001D000F106008A0701D500F106004A07D7 +:1082300001D500F101000A0701D500F10200CA06CC +:1082400001D500F103008906E6D5123000BD00001B +:108250002DE9F047DFF878800D46174658F825409D +:10826000814654B30021D4F89000FEF7F9FA30B3F8 +:108270000021D4F89400FEF7F3FA00B30021D4F8FB +:108280009800FEF7EDFAD0B1002644F8906F6660D2 +:10829000A660903CB7B12046FFF7D6FE082D11D05E +:1082A0000021484605F058F9444658F8250004F0E6 +:1082B000CBFD44F82560BDE8F087002103E027717D +:1082C000032100E001214846BDE8F04705F044B92C +:1082D000487A002010B500221249104604F080FDB3 +:1082E00024211148ECF7D7F8082000F021F80021EC +:1082F000122004F047FF0C4C00220223216A48653B +:108300000A498A70CB700A8009218171082003F024 +:108310000BFE03F0CBFC206A406DBDE8104003F07B +:10832000F1BD0000F0470200487A0020460400201A +:1083300070B5114D044655F82400D0B15FF000002F +:1083400040F21B620DA1EDF74FFB0021A82005F0C4 +:10835000D5F945F8240000280DD0A821ECF79BF8AA +:1083600055F8240004822002BDE87040012105F088 +:10837000F3B80120E4E770BD487A0020626C6535EF +:10838000305F6C6C6D2E630030B50446107A8DB092 +:10839000154610F02E0F09D101A9104603F0F9FA85 +:1083A000002804D09DF80600C00602D400200DB0BD +:1083B00030BD9DF80500C007F9D0BDF81700C00416 +:1083C000F5D06169A0684A7922F090024A71816013 +:1083D0009DF818104A09017962F301010171E87BE7 +:1083E00000F00301A068001DFDF752FC01AA0092F5 +:1083F00002460B462046FBF7C1F960620028D6D042 +:108400000120D4E72DE9F04105464169D5E9020490 +:10841000001D267906F00F070026072F02D0012B3A +:1084200045D11CE02368022A41D11A7A12F02E0F9E +:108430003DD1C979007801F00302C0F38101222007 +:1084400009F0E6FA00F19607E07B00F00301A86866 +:10845000001DFDF71DFCC01B61EB060117E0012AA2 +:1084600025D1E17B007801F00302C0F38101A088EF +:10847000C0F3071009F0CCFA00F19607E07B00F09A +:108480000301A868001DFDF703FCC0197141C5E98F +:108490001C01207900F00F00072801D0012300E023 +:1084A0000023214628466A69F5F7F2FD10B1002045 +:1084B000BDE8F0810120FBE702480068002800D0F9 +:1084C000012070476804002004480068002804D098 +:1084D00090F83100012800D0002070476804002087 +:1084E000C2780168808862F31F610122B2EB903F7D +:1084F0000FD101F07F42C0F30D031A4307D0FF22D2 +:10850000B2EB116F05D1A0F5FE41FF3901D1012079 +:1085100070470020704700002DE9F0411E461446C8 +:108520000F46C2F30725104604F098FD01460A489D +:1085300050F82500FEF7BEFF58B13846F9F7CEF9DE +:10854000034622463146222002F04DFE0020BDE8BF +:10855000F0810C23F5E70000487A002000207047E6 +:108560002DE9F0411F461546C2F3072600241046A8 +:1085700004F074FD0146094850F82600FEF79AFF02 +:1085800050B1F9F7E7FD23462A463946212002F08B +:108590002AFE0020BDE8F0810C24F4E7487A002090 +:1085A00070B51D4616460C24FFF786FF10B1FEF786 +:1085B0009DFF0024234632462946202002F013FE68 +:1085C000002070BDF0B507468FB01E460C4615461C +:1085D000104604F043FD01280CD0032808D00C23DA +:1085E0002A463146282002F008FE00200FB0F0BDD8 +:1085F0000220FBE7641C2B46E0788DF80000E07A4F +:108600008DF80100D4F80500CDF80300B4F8090096 +:10861000ADF8070020798DF8020000208DF80900E0 +:10862000E089ADF81000A089ADF80E00208AADF801 +:108630001200E08AADF81800A08AADF8160034F8F0 +:10864000010CADF80A00B4F80100ADF80C00608A26 +:10865000ADF8140003208DF81A001A466946384612 +:1086600000F08CF8C2E7000070B5144916460025EA +:1086700091F8D800C2070CD140F0020081F8D80070 +:108680000024200204F0EAFC50B1012803D00328A2 +:1086900012D00C2508E0012221463046FFF7D8FD14 +:1086A000641CE4B2092CECD32A4642F23D01304668 +:1086B000F1F7DAFE002070BD022070BD3075002099 +:1086C0002DE9F041487816460C46C2F3072742F2DE +:1086D0003305FF2803D10120607042F21D05E078C8 +:1086E000FF2810D042F24F05104604F0B7FC0128D5 +:1086F0000ED003280AD00C2229463046F1F7B4FEEA +:108700000020BDE8F0810020E070EDE70220F8E7EE +:108710003A462146304601F0BBF90246ECE72DE926 +:10872000F041C87816460C46C2F3072742F23405DA +:10873000FF2803D10120E07042F21E052079FF28B6 +:1087400010D042F25005104604F088FC01280ED0EB +:1087500003280AD00C2229463046F1F785FE002076 +:10876000BDE8F08100202071EDE70220F8E73A46ED +:108770002146304601F04CFA0246ECE72DE9F04183 +:108780001D4614460E46AA4203D008F061FDC007FC +:1087900009D01C48AC4290F8D81006D04A070DD436 +:1087A00041F0080105E011221FE00A0706D441F05C +:1087B0000401154F80F8D810386808B10C2214E075 +:1087C0000021902004F0DEFC90213860EBF763FE7E +:1087D0003868AC4201D1012100E0002180F8891005 +:1087E00031462046FEF7E0FE0246AC4202D142F29C +:1087F0000D0101E042F243012046F1F75BFE00204B +:10880000BDE8F081307500206804002070B5124981 +:108810001546002491F8D800C2F30726C2070AD1F2 +:1088200040F0020081F8D800284604F017FC012827 +:108830000CD0032808D00C24224642F23C012846E2 +:10884000F1F712FE002070BD022070BD01223146FA +:108850002846FFF7FDFCEFE7307500202DE9F043D7 +:108860000E462E48C2F307272D4950F8274091465F +:1088700091F8D80000258BB0C20734D140F0020037 +:1088800081F8D8008846484604F0E8FB022805D065 +:10889000032810D102200BB0BDE8F083A06D18B101 +:1088A000B0F80100F8B906E0606D8079D8B1012810 +:1088B00019D0042817D007EB470108EB4100D6F880 +:1088C000011040F8FE1FB6F8051081802A4642F2DA +:1088D00035014846F1F7C8FDF4B1A06DE0B1E56B94 +:1088E00005F10C0416E00C25F0E76946204602F07D +:1088F000DDFF78B19DF80200C0070BD0D6F801006B +:10890000CDF80300B6F80500ADF80700214668462B +:1089100003F080F8002DE8D10020BCE7487A002061 +:108920003075002010B510460E4CC2F3072200230C +:1089300054F8222042B1D46D44B149780029917A8B +:1089400006D041F0040105E0422304E00C2302E0DC +:1089500021F0040191721A4642F25201F1F784FDAE +:10896000002010BD487A00202DE9F0410C46244932 +:10897000C2F30720174651F820500026104604F095 +:108980006DFB012803D0022801D042262FE0A078F9 +:1089900010B12079022808D3E078102805D820B13A +:1089A0002079082806D9112621E0207912260828E6 +:1089B000F9D81CE0296B11F8222F60F306020A7027 +:1089C000286B22796C30611DEBF73EFD6078A17851 +:1089D00040EA81106871E078A87105F1440004460E +:1089E000EEF714F918B92146284601F069FF32461E +:1089F00042F251013846F1F737FD0020BDE8F08121 +:108A0000487A00202DE9F8430D465749C2F3072064 +:108A1000002651F8204055499046374691F8D80035 +:108A2000C20701D00C2694E040F0020081F8D80083 +:108A3000404604F013FB012806D0022804D0032886 +:108A400051D10220BDE8F883E878FB284BD868783C +:108A5000042848D8A8782072606D30B12A46214693 +:108A6000404602F035FD064673E06878042811D0D0 +:108A7000A06D00B1012040F661023DA1ECF7B4FF0A +:108A8000A06D407880072ED46878012806D003288E +:108A900004D01AE0EBF7C6FC60835AE0EBF7C2FCA7 +:108AA00060830020E082A06D4078C00703D020469C +:108AB00001F018FF07E06878012801D0E87818B3C2 +:108AC000204601F0AAFF060043D1A06D4078C00700 +:108AD0001AD0E06BEA780768B888C0F30710C0F1D5 +:108AE000FF018A4201D9122633E038440C30291D97 +:108AF000EBF7AAFCB888E9784FEA303000EB016068 +:108B00004FEA3050B88019E0E08AEB7840F27261A9 +:108B10001844884201D907261BE0A878012804D10F +:108B2000687808B1022800D101272A1D04F13C0110 +:108B300020460097FFF72AF906000AD1E08AE97873 +:108B40000844E082687803280BD0022809D000206E +:108B50006070324642F237014046F1F785FC002052 +:108B600070E70120F4E70000487A0020307500200B +:108B7000626C6535305F6C6C6D2E63002DE9F05FC3 +:108B80000C4654499346002791F8D800C2075ED19D +:108B900040F0020081F8D8006078082855D8217884 +:108BA00061B980B9082060705FF0000004EB8001BB +:108BB0008870401C6178C0B28142F7D820780128C3 +:108BC00001D1607890B30020617806E004EB800268 +:108BD0009278082A39D2401CC0B28142F6D80025CA +:108BE0006BE000BF04EB85093B4999F802804FEA2E +:108BF000082A51F82860D6B3207838B1514640464B +:108C0000FEF7E0FB070062D1C6E92200F06D002804 +:108C1000207810D00028B07A09D040F00100B0725E +:108C200052464146304602F094FC44E00DE020F00C +:108C30000100B0723FE0B0B3707840B1307830B12D +:108C4000504604F00BFA012803D0122738E00C2715 +:108C500036E0B9F8030058B1FDF7C2F9B9F80320BE +:108C600042F210735A43801841EBE27102E022E0B5 +:108C700000200146C6E9280199F80500F08300208C +:108C8000B083B06D002899F8020002D0FEF7E3FD32 +:108C900001E0FEF7EDFD10F0FF0711D10221504673 +:108CA00004F05AFC07E0FFE799F80200FEF7C4FD64 +:108CB00010F0FF0704D16D1CEDB26078A84291D886 +:108CC0003A4642F239015846F1F7CEFB0020BDE8A2 +:108CD000F09F000030750020487A00202DE9FF4FFA +:108CE00085B00D4607980026C0F3072708F0B0FAB4 +:108CF000DFF83CA2C00705D08E4991F8D800C20722 +:108D00000ED101E01126EEE040F0020081F8D8001B +:108D1000079804F0A3F978B1012807D0032801D0FF +:108D20000C26E0E0022009B0BDE8F08F5AF82700D9 +:108D300010B1FFF789F902E03846FFF7F9FA5AF85F +:108D4000274084B30020C4E92200D5F8030020F0B6 +:108D50007F42D5F8060020F07F418A427DD8D5F8C1 +:108D60000900C3B2072B78D8AB7C032B75D8202A17 +:108D700073D3B1F5804F70D8E97A03296DD8A97AF9 +:108D800003296AD8400768D0B5F801004FF0000801 +:108D9000410701D585F81280C006A06D4FF0010B88 +:108DA00045D418B107E0FFE707269CE00021192011 +:108DB00004F0E8F9A065606D18B104F045F8C4F856 +:108DC000548019222946A06DEBF73EFBA16D087D6A +:108DD000401E0875A06D817D491E8175A06D007DC6 +:108DE00003F02AF8C8B3A06D807D03F025F8A0B386 +:108DF000A06D642190F91300484305F009FEA16DB0 +:108E0000C874B5F80100010744D4C043800741D0BD +:108E1000EBF708FB00F00F00E07184F801B084F874 +:108E200000B06878800763D584F8008060E018B1EE +:108E300004F00AF8C4F85880606D20B900211220AF +:108E400004F0A0F960658146B5F80300ADF80000B4 +:108E5000E888ADF80200A87A00E01BE08DF8050074 +:108E6000E87A8DF80600E868CDF80700288AADF8A2 +:108E70000B00687A8DF80D00A87C8DF80E00B5F80F +:108E8000010010F007011AD002291AD0032903D0DB +:108E9000052904D0122626E08DF8048006E000079C +:108EA00001D5012000E004208DF804003946684611 +:108EB00002F0BCF90646287E28B1012104E0032017 +:108EC000F2E70220F0E7002189F8111095F913006C +:108ED0006421484305F09CFD89F8100084F801B036 +:108EE00084F800B026B1012239460798FFF7B0F99F +:108EF000DDE907210223262004F04EF906707F21C8 +:108F000041705AF82710044661B14A6D002002B141 +:108F1000107C896D01B1C87C08F05AFD642190FB7A +:108F2000F1F06070204604F097FA0020FBE60000A4 +:108F3000487A0020307500202DE9F8430E463B4961 +:108F4000C2F30720002451F82050394990462746A3 +:108F500091F8D800C20701D00C245CE040F0020078 +:108F600081F8D800404604F079F8012806D002289C +:108F700004D0032809D10220BDE8F8832DB1F07890 +:108F8000FB2802D87078032801D9122443E0B07876 +:108F90002872686D30B132462946404602F0BBFA6D +:108FA000044638E0A86D40788007EED57078012837 +:108FB00001D0032809D1EBF735FA68830020288314 +:108FC000284601F0B9FE040025D1F3781BB3288BA5 +:108FD00040F272611844884201D907241BE0B0783E +:108FE000012804D1707808B1022800D10127321D70 +:108FF00005F13C0128460097FEF7C8FE04000AD19F +:10900000288BF17808442883707803280BD0022835 +:1090100009D000202870224642F238014046F1F77C +:1090200023FA0020A8E70120F4E70000487A002096 +:1090300030750020F8B50D462E49C2F307201646BC +:1090400051F820402C4991F8D800C20701D00C22D9 +:1090500046E040F0020081F8D800304603F0FEFF01 +:10906000012805D0022803D003280CD10220F8BD26 +:109070004CB1A06D38B1E06D28B1A878FC2802D8B9 +:109080006878032801D912222AE00027012801D09C +:10909000032808D1EBF7C6F96083E782204601F088 +:1090A000ABFD02001CD1E08AAB7840F2726118443B +:1090B000884201D9072213E0EA1C04F13C01204652 +:1090C0000097FEF763FE02000AD1E08AA9780844FF +:1090D000E082687803280AD0022808D00020607057 +:1090E00042F23F013046F1F7BFF90020F8BD012000 +:1090F000F5E70000487A0020307500202DE9F047A0 +:109100000F464E7824482549914650F8264091F85C +:10911000D8000025C2072AD140F0020081F8D8000B +:10912000082E0ED26CB1A06D58B1E06D48B130027E +:10913000804603F093FF012808D0022819D00328A5 +:1091400001D0122520E00220BDE8F0873878D8B1A0 +:10915000607860B10020C4E92200A07A424640F065 +:109160000200A0723146204602F0F3F90CE00C2513 +:109170000AE0387840B9A07A002220F00200A072FC +:1091800031464046FFF764F82A464FF401514846FD +:10919000F1F76AF90020D7E7487A002030750020FF +:1091A0002DE9F0410F463B49C2F307203A4D51F8F3 +:1091B0002040164695F8D800C1070BD140F00200B8 +:1091C00085F8D800104603F049FF78B101280FD088 +:1091D000032809D00C252A4642F23E013046F1F719 +:1091E00043F90020BDE8F0810220FBE74225F2E7C9 +:1091F000B7F80100B7F80310884204D8A06D10B189 +:109200004078800701D01225E5E7E06D28B90021FC +:10921000072003F0B7FFE065C0B339680160B98883 +:109220008180B9798171EBF7FDF8074614F8610F79 +:1092300020F0800020701848D0F83B01C4F80300EB +:1092400095F83F11E07961F304001449E071097861 +:1092500061F34710E071613C04F1690002F058FDD0 +:1092600084F86D70380A84F86E00380C84F86F004A +:109270000020E082204601F0BFFC0546D4F86910CA +:10928000074A04F17200EDF72AFDA4E7FFE707257E +:10929000A1E70000487A002030750020F40100208A +:1092A0006B76002070B51D4614460E46104603F03E +:1092B000D5FE01460A4AC4F3072052F82000FEF703 +:1092C000F9F850B13046FAF71BFD0346224629460D +:1092D000232001F088FF002070BD0C23F6E700007A +:1092E000487A00202DE9F05F0E461F4992464FF064 +:1092F000000991F8D800C2F307279B464D46820724 +:1093000001D50C2527E040F0010081F8D800307825 +:109310001F280AD8DFF8548058F82700C46B34B1EE +:10932000207900F00F00012809D1122513E03C300C +:109330001F220121FCF704FA58F82700C46B327889 +:10934000711C04F10C00EBF77FF83078A188801DC8 +:1093500060F30B11A1802B46524659461D2001F0A7 +:1093600042FF4846BDE8F09F30750020487A002053 +:109370002DE9F0410C461D491546C2F3072791F827 +:10938000D8001E46820713D440F0010081F8D800AF +:10939000284603F063FE022808D0032803D0207873 +:1093A00001280CD004E00220BDE8F081207808B14B +:1093B0000C2412E03846FEF73FFAC4B20DE029460D +:1093C0003846FDF7FFFF3846FEF752FA10F0FF046B +:1093D00003D10221284604F0BFF823462A4631462D +:1093E0001F2001F000FF0020DEE7000030750020A4 +:1093F0002DE9F0411E4614460F46C2F307251046DC +:1094000003F02CFE022804D00B4991F8D800820703 +:1094100001D50C2308E040F0010081F8D80029466E +:10942000384601F003FF0346224631461C2001F076 +:10943000DAFE0020BDE8F0813075002002490120ED +:1094400081F83A0100207047307500202DE9F04185 +:109450001D4E1D46904696F83A010C4648B36422CC +:1094600041462F2004F0C2F8002086F83A01052179 +:10947000204602F0DFFBF0B125281CD830462168D9 +:10948000C0F83B112179002480F83F115FF00107FB +:1094900007EB0426304603F0E1FD20B14246314699 +:1094A000312003F0EDFF641CE4B2082CF0D300235C +:1094B00002E00C2300E0122342462946242001F05A +:1094C00092FE0020BDE8F081307500202DE9F047C4 +:1094D0000E4629499146002791F8D800C2F3072586 +:1094E0009A4682073DD4DFF8948040F0010081F86D +:1094F000D80058F8250044463C300221FDF786FF8D +:1095000054F82500C06B0468484603F0A7FD44B337 +:109510003278711C04F10C00EAF796FF58F8252008 +:10952000317811833178A288891D61F30B12A280F2 +:10953000217921F00F01091D2171617921F0B0011C +:10954000617158F82500406D007A0028E07902D05A +:1095500040F0080001E020F0080020F00400E07175 +:1095600000E00C273B464A4651461E2001F03BFED8 +:109570000020BDE8F087000030750020487A002008 +:1095800010B5104603F06AFD042804D0002001F055 +:109590003EFE002010BD084801218170C07818B13E +:1095A000082002F089FBF4E7044901204A6860F3CF +:1095B000D3424A60EDE70000460400200000094065 +:1095C0002DE9F8430546046D99461746184603F001 +:1095D00045FD012803D0032801D004283AD1688A28 +:1095E0004FF0000638446882DFF870802FE0207A60 +:1095F00010F02E0F20D1B8F80010404601F1010103 +:10960000A8F8001098F80210B1B96179490613D58D +:109610004279217CB2EB911F0ED198F8040001F041 +:109620001F01814208D1CDF80090286B0022001D57 +:109630002346114603F00AF86079761C20F02000DA +:109640006071E079F6B220F08000E0712468BE42DB +:10965000CDD32C650020BDE8F8830000460400202F +:109660002DE9FF4F81B00D460398BF49C0F3072B8A +:1096700095F8088051F82B404046B8F1050F28D0E6 +:10968000062826D0192824D0039803F0E7FC06000A +:1096900024D0012EFCD0002CFAD02868216B8842FF +:1096A0001CD10027032E1AD06989608AB5F80C9066 +:1096B000081A1FFA80FA4046B8F1110F74D077DC0F +:1096C000092805D06ADC01287BD0B8F1080F6ED1DB +:1096D00096E0AB896A890399FEF710FB27E14046C3 +:1096E000B8F1110F45D00EDC092821D005DC012886 +:1096F00012D0B8F1080F4FD11AE00A2818D0B8F1EB +:10970000100F49D120E0A8F11200062844D2DFE86A +:1097100000F0303A3A433F3FD4F8900040B36968D4 +:10972000814201D1012000E0002041F22B0216E02D +:10973000D4F89000E0B16968814201D1012000E0D5 +:10974000002041F230020AE0D4F8900080B169684C +:10975000814201D1012000E0002041F2330283A1C7 +:10976000ECF742F9D4F89000FDF75CFAC4F8907079 +:1097700012E0D4F8940078B1FDF754FA943460689C +:1097800064E8250708E054F8940FFDF74BFAF6E774 +:10979000D4F89400FDF746FA22799CE00A282FD0ED +:1097A000B8F1100F03D153E067E001E009E077E082 +:1097B000A8F11200062873D2DFE800F05F7A92CA9F +:1097C000BDBDD4F8900080B16968814201D101200B +:1097D00000E0002041F2540264A1ECF705F9D4F84E +:1097E0009000FDF71FFAC4F89070022E2FD1534657 +:1097F0005A46CDF8009020460399FEF70FFA94E000 +:10980000D4F8900080B16968814201D1012000E064 +:10981000002041F25B0255A1ECF7E6F8D4F8900085 +:10982000FDF700FAC4F89070042E10D1BAF1000FC1 +:1098300006D00AF0FF0259462046039BFFF7C0FE00 +:10984000A18A01EB0900A082584602F035FA6EE0C9 +:10985000D4F8900058B36968814201D1012000E03A +:10986000002041F2660241A1ECF7BEF8D4F8900066 +:10987000FDF7D8F9C4F8907052E0D4F89400B0B174 +:10988000696888420DD1FDF7CDF994345946606876 +:10989000C4E90007A068943CFDF7CCFA38B119E0A0 +:1098A00056E0D4F8980088423AD1C4F8987037E06E +:1098B00054F8940FFDF7B6F9606864E82507022EA6 +:1098C00035D153465A46CDF8009020460399FEF70D +:1098D00051F928B3002259460398FEF7B9FC26E057 +:1098E00054F8940FFDF79EF9606864E82507022E8E +:1098F0001DD153465A46CDF8009020460399FEF7F5 +:1099000065F928B15946D4F89C00FDF793FA07E0B1 +:109910000021D4F89400FCF7A3FF08B1C4F89470B8 +:109920005A463146204600F039FC0028D2D105B015 +:109930000020BDE8F08F0029F9D16868FDF772F9C1 +:109940006868D4F894108842F1D1C4F89470EEE7B6 +:10995000B8F1000F06D0002041F2A50203A1ECF7F8 +:1099600043F8E4E70120F7E7487A0020626C6535A8 +:10997000305F6C6C6D2E63002DE9F0410A48C2F334 +:109980000726144650F826500F46104603F066FB93 +:1099900030B12DB17A7A234631462846FFF710FEC2 +:1099A0000020BDE8F0810000487A002000207047C8 +:1099B00010B5012904D10348006808B100F046FA47 +:1099C000002010BD680400202DE9F04116460F4626 +:1099D000054601F10C0402F05FF8002856D0287803 +:1099E000697840EA8110207095F82B10B88861F3EF +:1099F0000B10B8802878E8B3A8786070A87804F1D4 +:109A00000204C00707D0D5F803002060B5F80700AE +:109A1000A08004F10604A878800707D5D5F80900CE +:109A20002060B5F80D00A08004F10604A878400776 +:109A300002D5E87B04F8010BA878000702D5288A34 +:109A400024F8020BA878C00605D5688A2080287DF6 +:109A5000A07004F10304A878800607D5122205F14E +:109A600015012046EAF7F0FC04F11204A87840063C +:109A700005D500E009E095F8270004F8010B95F8FA +:109A8000282031462046EAF7DFFC0120BDE8F081BE +:109A90002DE9F0439046574A0D46097852F8284080 +:109AA00087B0272902D86978032903D9122007B083 +:109AB000BDE8F083216B19B90021FBF78DFD206310 +:109AC0004D4F01264FF00009FE70A7F80090FF22CD +:109AD000082104F13400FBF7D5FD606B2065A4F884 +:109AE0001290206BC17921F07C012431C171216B6E +:109AF00042480861216B42484861D4E90C02C168C0 +:109B000062F31E01C160FBF7A1FE216B8860206B30 +:109B100080F82660206B017E21F001010176287813 +:109B2000F3F789FA216B4A7E60F305024A76216BCE +:109B300068780A79401E60F383020A71206B2D2237 +:109B400010F8241F41F001010170206B818C62F339 +:109B50004E018184206BC6852A48016866F3451151 +:109B6000016029494FF49670C862002005F03CF965 +:109B7000002005F031F9206BAA7910F8221F62F35A +:109B800006010170206B697910F8202F61F34512EE +:109B90000270E878387128797871E87890B1D4E962 +:109BA0000C070179C1F38101022921D0AA796C3017 +:109BB000E91DEAF749FC3846FBF7DCFF3F68606BBC +:109BC000B842F8D104A9CDF80090CDE9016143462F +:109BD00000220E496FF00040FCF7F0FBC4F8900043 +:109BE00030B14FEA0820042103F0B6FC00205EE704 +:109BF0000C205CE7487A0020460400202941767159 +:109C0000555555002004094000000940E1B6010007 +:109C10002DE9F0479046844A0D46097852F82840CD +:109C200086B027290DD8A97807290AD8E978042908 +:109C300007D82A795AB16A793AB1AA79921E072AC5 +:109C400003D3122006B0BDE8F08703297ED2216B32 +:109C500019B90021FBF7C0FC20634FF0000A5746FA +:109C6000A4F812A0FF22012104F13C00FBF768FDDB +:109C7000FF22012104F13400FBF704FDD4E90F01B8 +:109C8000DFF8AC9108606948E26BC770A8781646A7 +:109C9000082814D2DFE800F0040C0C040C0C0C0CA7 +:109CA000D9F8002060F38202C9F80020012004E006 +:109CB0000C32697802F05EF8002005F09DF8A97872 +:109CC000307961F3030030716978B08861F30B106B +:109CD000B080F07920F00301F171E87804287DD09C +:109CE000401EC7B2206BAA7910F8221F62F306014A +:109CF0000170B07920F00100B071287970B1206B4B +:109D0000AA796C30E91DEAF79FFBB07940F00100B9 +:109D1000B0712879697940EA8110F072D9F8002091 +:109D2000012161F34102C9F800206978D9F80020C7 +:109D3000404B1A4042EA0121C9F80010D9F800202E +:109D4000012161F30412C9F8002000E069E000205D +:109D500005F04AF8002005F03FF8F079394600F0A8 +:109D60000302687807F054FE2979F93000EBC1004E +:109D700080B200F51C7040F27121B0FBF1F0484355 +:109D80002D4980B2C862206BC17921F07C0120315D +:109D9000C171216B29480861216B29484861216BF9 +:109DA000E06B8860D4E90C02C16862F31E01C160F7 +:109DB000206B017E21F0010101762878F3F73BF951 +:109DC000216B4A7E60F305024A76206B017967F3C6 +:109DD000010101711B4890F8450100E01BE0216B77 +:109DE00004AA434681F82300216B0120C885CDF8E1 +:109DF00000A0CDE90102002213496FF00040FCF7FA +:109E0000DDFAC4F8900060B14FEA0820042103F0A5 +:109E1000A3FB002016E721F00300401CF07102278D +:109E200060E70C200EE70000487A0020460400207E +:109E300020040940FF00FEFF00000940294176711F +:109E40005555550030750020A9B701002DE9F043A4 +:109E5000044690F86D00A66800EB0010361D051949 +:109E6000F078676920F07C0087B01430F070787962 +:109E700007F10C0920F010007871387920F00F00FC +:109E8000401D387115F83A0F10B102281ED1D0E0EC +:109E900094F8890018B994F8880000287DD0F078EB +:109EA00020F07C001830F0700E2001F0D3FF79799B +:109EB00060F30411797194F888000028EED0002036 +:109EC00084F88800307820F00F003070307DC107B2 +:109ED00008D0410606D4717D01F03F01252901D348 +:109EE000272909D920F0400040F001003075707D2D +:109EF00020F03F002730707596F8200040F00100F8 +:109F000086F8200035F8031F308C61F34E00308452 +:109F100028887085707820F004007070E068FBF786 +:109F20004DFC6069FBF755FC2E8840F271204643DA +:109F3000A889FE36ED1E02210346022800D80846F5 +:109F400040F27121484381B2B5F80D000222022887 +:109F500000D8104640F271225043022280B2022BF8 +:109F600000D81346B5F807C0B5F8058040F2712255 +:109F70008DE80311534309F10802971CCDE90472DF +:109F8000D4E9200106F6C412FDF700FCF0B36D1C05 +:109F90002989A9F80C10698900E048E0A9F80E1099 +:109FA000FCF71EF8642280182F886A8841F10001AE +:109FB000974210D9D4E9202352EA03050BD040F28E +:109FC00071256F43BA1843EBE775831A71EB0503EC +:109FD00001D210462946002304F18002CDE9032373 +:109FE000194AFE258DE83400184B3246FCF76FFB0A +:109FF000606258B194F88800002815D094F86D007C +:10A00000401CC0B2032800D3002000E019E000EBA0 +:10A010000011214491F83A10032900D3002004F8DC +:10A020006D0F0120E076002007B0BDE8F08301202D +:10A0300046E7307820F00C00083020F00300801C48 +:10A0400043E70720F0E70000B19901004DB6010099 +:10A05000F0B506464C488BB050F82640206BE56BB7 +:10A060000146001D626B002C7ED000297CD0D4F804 +:10A070009010002978D1002D76D0A18B491CA183A6 +:10A08000417821F0040141701046FBF797FBA87955 +:10A0900020F0FE00A871687920F0A000687128689F +:10A0A00060B1817921F0FE0181712868417921F048 +:10A0B00080014171286821F020014171204601F0A2 +:10A0C00029FD072700258034D4E9023074E82012E6 +:10A0D00059185041CDE90810EAF7A4F990FBF7F1BF +:10A0E00007FB11004FF47A71DDE908234843C117DB +:10A0F00080185941CDE90801FBF772FF64228018EE +:10A10000DDE9083241F100011B1A8A4101D2CDE993 +:10A110000801DDE9082321463046FDF7FDF9002856 +:10A120002DD1E08908A90494CDE905011748CDE9AE +:10A130000205DDE9082340F6B830111843F10000AC +:10A14000CDE9001020346068FE30FCF757F9014675 +:10A150002067DDE90802C4E91A0234F82009B0F5E5 +:10A160007A7F00D269B100E008E02584080000D0C1 +:10A17000012040F6A84206A1EBF736FC00200BB008 +:10A18000F0BD401C20849EE7487A00209DB6010067 +:10A19000626C6535305F6C6C6D2E6300022905D1F1 +:10A1A000D0F8901011B9D0F8941009B10020704780 +:10A1B000C06D0028104601D0FDF7BABCFDF74BBBBF +:10A1C0002DE9F04F894A8146002052F829408DB090 +:10A1D000D4E92265A17A89071DD5A16C0860A27A0D +:10A1E000204604F14401520702D500F0F1F901E0E4 +:10A1F00000F0DFFA10F0FF0A7ED1A06C0060216B46 +:10A200007B480861D4E92201084307D10120A081DD +:10A21000484600F0F7F80DB0BDE8F08F606C0068BC +:10A220000068D0F80080D8F80070F87900F00302D8 +:10A23000A06D817DB888C0F3071007F0E9FB0346E5 +:10A240004046FDF7C0FFFE3383464FF000080393FE +:10A25000A089684B401CA081D4E92001CDF8008082 +:10A260008619CDE901974D4130462946039AFCF7FE +:10A27000DDF9C4F8980000287ED0A0892034401E63 +:10A28000ABF81000C4E91A65002020802067E7675A +:10A29000606714F8160C203CC0076ED0FBF7A0FED8 +:10A2A00064228718606C41F100060068006807901E +:10A2B000D0F800B09BF8070000F00302A06D817D8C +:10A2C000BBF80400C0F3071007F0A2FB0546606A64 +:10A2D0000C90D4E9222305F51671084496464FEAFE +:10A2E00080189C46B2EB080263F10003D11B73EBAC +:10A2F000060103D23A4600E075E03346E6890021C4 +:10A300009046BEEB00003C4A6CEB010CCDE902210B +:10A31000CDE9000C0AAFCDF81090CDE905670C9897 +:10A320004246FE30FCF76AF8C4F8900030B308AB40 +:10A330000799CDE90513314902AA0026A2E8420295 +:10A34000243405F1FE00D4E91921121A2C4B61EBDB +:10A350000601D21841F1FF31CDE90021DDE90A23E0 +:10A3600021688A1846EB03014FF49673D21841F125 +:10A370000003FCF743F802E013E025E021E020674A +:10A38000243CB8B108990A980A1A2046616C01F079 +:10A3900013FBD4F888100898091A584601F01EFBE0 +:10A3A0000FE0208C401C80B2208464287FF650AFE0 +:10A3B000032017E00021D4F89000FCF751FAC4F80C +:10A3C0009060D4F8940070B944344946606D2065BB +:10A3D0000020606520680068006800680068A0656B +:10A3E000FCF728FD8246504615E70000487A002019 +:10A3F000D6BE898E05B70100CDB7010073B5010047 +:10A40000D4FEFFFF2DE9F04F07466D489FB04FF097 +:10A41000000A50F827401AA95546E0890097039191 +:10A42000CDE9010A616A5346FE31664AC820FCF74D +:10A43000D4F8C4F89000606C0068D0F80090D9F8A7 +:10A440000060F07900F00302A06D817DB088C0F358 +:10A45000071007F0DDFA18A9CDE903158DE8A00271 +:10A460008046DDE91A12606A574B411845EB02003D +:10A470004FF4967211EB020C40F1000108F1FE025C +:10A480006046FCF724F9834618991A980A1A204660 +:10A49000616C01F091FAB1463668F07900F0030280 +:10A4A00054F8580F817DB088C0F3071007F0B0FA58 +:10A4B000024612A80EA9CDE90810444804A907963F +:10A4C0000A95A1C1616840F2E243491C488858439B +:10A4D000C317CDE90203088840F2E2414843C1179F +:10A4E000CDE90001DDE9183113EB080069414FF4B3 +:10A4F0009673C01841F10001FE321192FCF711F978 +:10A50000C4E90A01DDE91223C4E90C23583C0843DD +:10A5100020D1E06D40F2E2412C4BB0F803004843FB +:10A52000C117C4E9200112A802960F95CDE90305D1 +:10A53000CDE90057DDE9182012EB080168414FF41E +:10A5400096728F1840F100013846119AFCF7BFF857 +:10A550000E9040B300210F98FCF782F96434C4F8E0 +:10A5600030B00E9860634846FDF72DFE0546D4E9ED +:10A57000070140F2E2420023E9F722FF688024F855 +:10A58000020C688840F2E2414843C117C4E9070160 +:10A5900012991898091A484601F020FAA6631FB0CC +:10A5A0005046BDE8F08F54F8900F0021FCF758F9A1 +:10A5B00000215846FCF754F94FF0430A2560EEE7B6 +:10A5C000487A0020CDB7010073B5010005B701003E +:10A5D0002DE9F34F8FB083468679C08A0D9010988D +:10A5E000006800F0D5F85FEA000804D0D8F8004011 +:10A5F000A079C00703D0002011B0BDE8F08FFF2084 +:10A60000FBF78CF805004BD0287920F00F00C01D17 +:10A6100028719BF805008DF817009DF80A0000F0DE +:10A620004000001D8DF80A009DF8321004F10C0066 +:10A630000A18294602A8FFF7C7F9A879761E40F044 +:10A640000100A8719BF80500E872A988687AC1F337 +:10A65000071106F0FF09401A86B20195009570E0D7 +:10A6600004F10C0002A9054601F020F9A088C0F30E +:10A6700007119DF83300091A2844CFB20E905AE012 +:10A680008EBB0D980B3082B2FF2A00D9FF22B9F1A0 +:10A69000000F17D0002369465846FDF7B9FB98B163 +:10A6A00001980028A8D010992046C1F80480002104 +:10A6B000C8F800100A46FBF79BF96846FBF78CF9CF +:10A6C000072099E70123E6E70198B9F1000F0AD0C6 +:10A6D000817941F0010181719BF80510C172A9F1E6 +:10A6E000010000F0FF09BE4201D9384600E03046C3 +:10A6F000DDF804A0C5B22A46BAF80400C0F3071179 +:10A7000001EB0A000C300E99E9F79EFEBAF804003E +:10A710004FEA303000EB05604FEA3051781BC7B28A +:10A72000701BAAF8041086B20E9828440E900D985B +:10A73000401B80B20D90002FA2D120462468FBF769 +:10A740006BF9002C8CD10099C8F8001001980460B6 +:10A7500010980199416013E000230B22584610998C +:10A76000FDF756FB78B910984068817941F00101F6 +:10A7700081719BF80510C172A9F1010000F0FF0979 +:10A78000B9F1000FE8D110984068046033E7000089 +:10A7900000B5024609E000BF02F10C00FDF70CFD18 +:10A7A000800601D5104600BD1268002AF4D10020B1 +:10A7B00000BD2DE9F0418CB00F460868FFF7E8FFB7 +:10A7C0000025002878D00468A079C00774D03CE048 +:10A7D000A0886946C0F3071604F10C00804601F01A +:10A7E00065F8002868D09DF80200400763D5A0886E +:10A7F00004F10B03C0F307119DF82B000A1A00EBBC +:10A8000008011844E9F720FE9DF80200002220F01C +:10A8100004008DF8020021466846FFF7D5F8A088AD +:10A82000761E66F30B10A080A07920F00100A071C5 +:10A830009DF82B00401EC0B28DF82B00A188C1F3FB +:10A840000711884204D025462468002CC0D132E08C +:10A850008CB315B9254624686CB3A0886946C0F34B +:10A86000071605F10C00804601F020F89DF8020063 +:10A8700020F010008DF802009DF82A1004F10C0061 +:10A880000A1821466846FFF79FF8A988F01E60F372 +:10A890000B11A9809DF82B0005F10F01321A01441C +:10A8A0004044E9F7D1FD7D60002228681146FBF79E +:10A8B0009FF80020286000200CB0BDE8F081000067 +:10A8C00030B50546D1E90030D0F8004003F10C0066 +:10A8D000FDF75FFC002804D0697901701B68A34272 +:10A8E000F4D130BDF0B505463C308BB0FF220321DA +:10A8F0000746FAF725FFB0B105F134002522012102 +:10A900000646FAF7BFFE70B16946284600F0E2FB42 +:10A9100004000AD03846FBF75FF83046FBF70EF824 +:10A9200020460BB0F0BD0720FBE7EC6B4FF00106B3 +:10A93000207920F00F0000F107002071E07920F06D +:10A940000C00E071607920F0100060718DF80160FA +:10A950004FF018008DF80200A86D817D29B940786C +:10A96000400602D558208DF8020000222146684694 +:10A97000FFF72AF82468207920F00F0000F1070083 +:10A9800020719DF82910E07961F3C30020F00400E4 +:10A99000E071607920F0100060718DF801604FF077 +:10A9A00009008DF80200A86D4078400602D54920C4 +:10A9B0008DF80200A86D407840070BD59DF8020085 +:10A9C00040F002008DF80200A86DC17AE07961F3D1 +:10A9D0008200E071002221466846FEF7F5FF2168FB +:10A9E000087920F00F00083008719DF82920C879F7 +:10A9F00062F3C30020F00400C8714879002220F0FF +:10AA00001000487100208DF8010003208DF802002D +:10AA10006846FEF7D9FF002083E730B5044634309E +:10AA20008BB00546FAF78AFFFF22022104F13C00B1 +:10AA3000FAF786FE30B3252201212846FAF722FED6 +:10AA400000B36946204600F045FB00281BD1E16BAE +:10AA50004FF00005087920F00F0000F107000871A1 +:10AA6000C87920F00C00C871487920F010004871B6 +:10AA70008DF801504FF018008DF80200A06D827D16 +:10AA80001AB108E007200BB030BD4078400602D56F +:10AA900058208DF8020000226846FEF795FFB0B3FB +:10AAA000E06B0168087920F00F0000F107000871E1 +:10AAB000C87920F00C00C871487920F01000487166 +:10AAC0008DF801504FF008008DF80200A06D40781D +:10AAD000400602D548208DF80200A06DB0F80100B4 +:10AAE000420715D59DF8020040F002008DF80200E3 +:10AAF000A06DC27AC87962F38200C871A06D4078F7 +:10AB0000800613D49DF8020040F0030006E014E034 +:10AB100080060BD49DF8020040F001008DF8020081 +:10AB20009DF82920C87962F3C300C87100226846E5 +:10AB3000FEF74AFF08B10020A5E7FF20A3E710B504 +:10AB400004468CB0FF2201213C30FAF7F9FDE8B34E +:10AB50002522012104F13400FAF794FDB0B36946CF +:10AB6000204600F0B7FA002842D1E16B087920F0C6 +:10AB70000F0000F107000871C87920F00C00C871BF +:10AB8000487920F0100048714FF000008DF8010066 +:10AB90008DF80200A06D4078800608D401208DF861 +:10ABA00002009DF82920C87962F3C300C871A06D26 +:10ABB0004078400605D59DF8020040F040008DF831 +:10ABC0000200A06D407840070DD500E012E09DF82E +:10ABD000020040F002008DF80200A06DC27AC87930 +:10ABE00062F38200C87100226846FEF7EDFE002085 +:10ABF0000CB010BD0720FBE770B505468CB0FF22F6 +:10AC000003213C30FAF79CFD00287CD0252201214D +:10AC100005F13400FAF736FD002874D0694628465D +:10AC200000F058FA00286FD1EC6B002632462079EC +:10AC3000214620F00F00C01D2071E07920F00C00AB +:10AC4000E071607920F0100060718DF801601820CB +:10AC50008DF802006846FEF7B7FE2468122205F15F +:10AC60006001207920F00F00C01D2071E07920F0F4 +:10AC70000C00E071607920F0100060718DF80160C7 +:10AC800028208DF802000DF11500E9F7DDFBA889F9 +:10AC9000ADF82500A86D4078800608D429208DF8ED +:10ACA00002009DF82910E07961F3C300E071A86DFE +:10ACB0004078400605D59DF8020040F040008DF830 +:10ACC0000200A86D407840070BD59DF8020040F0C7 +:10ACD00002008DF80200A86DC17AE07961F382006C +:10ACE000E071002221466846FEF76EFE2168087971 +:10ACF00020F00F0000F107000871C87920F00C0067 +:10AD0000C871487901E015E012E020F010004871A8 +:10AD10008DF801608DF80260E86D4079400602D53B +:10AD200040208DF8020000226846FEF74DFE00200C +:10AD30000CB070BD0720FBE770B505468CB0FF2254 +:10AD400003213C30FAF7FCFC38B32522012105F140 +:10AD50003400FAF797FC00B36946284600F0BAF9C8 +:10AD600000281BD1EC6B4FF00206207920F00F0079 +:10AD700000F107002071E07920F00C00E0716079AB +:10AD800020F0100060718DF801604FF018008DF810 +:10AD90000200A86D817D19B108E007200CB070BDDC +:10ADA0004078400602D558208DF802000022214646 +:10ADB0006846FEF709FE2468207920F00F0000F1B4 +:10ADC000070020719DF82910E07961F3C30020F09D +:10ADD0000400E071607920F0100060718DF801606E +:10ADE0004FF009008DF80200A86D4078400602D5AA +:10ADF00049208DF80200A86D407840070BD59DF8DA +:10AE0000020040F002008DF80200A86DC17AE079DE +:10AE100061F38200E071002221466846FEF7D4FD0E +:10AE20002168087920F00F0000F1070008719DF8F3 +:10AE30002920C87962F3C30020F00400C871487962 +:10AE400020F0100048714FF000008DF801004FF025 +:10AE500001008DF80200A86D4078400602D541201F +:10AE60008DF8020000226846FEF7AEFD002095E74F +:10AE70002DE9F0478F49804651F82840E9F7D2FA8A +:10AE8000252690FBF6F106FB1100C5B20CB101209E +:10AE900000E0002040F6941287A1EAF7A5FDDFF854 +:10AEA0002492E36B1BB1607808B12078F0BB04F109 +:10AEB0004400EBF7ABFE68B1A06D4078C0072046B8 +:10AEC00002D0FFF70FFD01E0FFF739FE00286DD13A +:10AED000E36B30E0A06C002101602046656CFCF75C +:10AEE000CDFA034605E02846FDF78DF900B1037061 +:10AEF0002D68002DF7D16CE01846FDF70BF90746D9 +:10AF00001846FDF72AF927B1628B398862F30B01E5 +:10AF1000398048B1017865F305010170E079284472 +:10AF2000B0FBF6F106FB1105587900E003E020F0D4 +:10AF3000200058711B6818680028DDD1587902215B +:10AF400020F020005871606C8088C0F3071204F173 +:10AF500044000546FAF7F4FB38B304F13C012846F7 +:10AF6000EBF766FE656C00272868066806F10C0A98 +:10AF700070686860B0885146C0F3071205F10C0094 +:10AF8000E9F762FA7F1C2D68FFB2022FF0D3606CE4 +:10AF900099F803134A4621FA08F1C37901F0010137 +:10AFA00061F30103C37101230BE00720BDE8F087C3 +:10AFB0005B1C032B05D192F8041321FA08F101F070 +:10AFC00001010068C57961F30105C571A56C854271 +:10AFD000EED1A06D08EB4802666C817A09EB420065 +:10AFE000FE3004F1280200F0B7FD0500DED1206B31 +:10AFF0003549001DC16035490161417821F00801E2 +:10B000004170A16D8A7C418862F389014180C178D9 +:10B0100021F07C014031C170A16D0A7D017862F39D +:10B0200001010170A16DC97CC177616C4160626BE7 +:10B03000816862F31E018160427D017D22F03F0242 +:10B0400021F040012732427541F00101017520498C +:10B050001830FBF7DCFEF07900F00302A06D017DF3 +:10B06000B088C0F3071006F0D3FC00F5967189B2E2 +:10B07000E18100EB4100226B0A2100F50270D185CD +:10B080006062A26D40F27123D2F8031021F07F417B +:10B090004B43834205D3D2F8060020F07F40814223 +:10B0A00001D9122504E0606CFAF793FBA06C0060F4 +:10B0B00028467BE7487A0020626C6535305F6C6C0F +:10B0C0006D2E630030750020D6BE898E5555550013 +:10B0D0006B76002070B5054600200C4681F82800EC +:10B0E000698B208A61F30B002082A86DC17D607C92 +:10B0F00061F307106074A07C20F03F00A074A96D7C +:10B100008A7D217D62F3471121751249097805294D +:10B1100002D340F0400001E020F0400009346072AA +:10B120002846FCF7ABF9A077A86D0B4AC1682160EF +:10B13000008AA080A86D093C04F12903817A288A3D +:10B1400000EB400002EB4000FE30E21C00F042FE4B +:10B15000002070BDF40100203075002010B50446B9 +:10B16000C06C002809D10021402002F00BF8FF211B +:10B17000E0640170E06C80F8201010BD30B50C4820 +:10B1800087B00825046A606B2065FAF717FB00207A +:10B19000608204AA01218DE8070002462B4605497A +:10B1A0006FF00040FBF70AF9C4F8900007B030BD1B +:10B1B000487A0020E1B601002DE9F04116461D460F +:10B1C0000F4604460202062305212C2001F0E4FF6D +:10B1D0001221017084704770A0F803604571BDE8CA +:10B1E000F04102F039B910B51C46012301F0D4FF3B +:10B1F0000470BDE8104002F02FB910B51C460123C1 +:10B2000001F0CAFF0470BDE8104002F025B910B586 +:10B21000044604235A020521252001F0BDFF448085 +:10B2200000210170BDE8104002F016B92DE9F04789 +:10B230000C4606460188408881427DD8727B072AE9 +:10B24000FBD8B27B032AF8D8B279032AF5D87279F1 +:10B25000032AF2D820296FD3B0F5804FEDD87D4D69 +:10B2600009204FF0000955F824104FF00108496DEE +:10B27000887155F82410496D81F8079030790528B8 +:10B280005AD2DFE800F078036995080055F82400E9 +:10B29000406D80F8078055F82400222234300121C7 +:10B2A000FAF7F0F955F8240002213C30FCF7AEF82B +:10B2B00055F82400406D80F8068055F82400C76BCF +:10B2C000387968F303003871B88820F47F60C030A3 +:10B2D000B8800E2000F0BEFD0146787961F30410BD +:10B2E00020F0800040F02000787155F82400406D77 +:10B2F000007A0028F87902D040F0080001E020F040 +:10B30000080020F00400F871B179F01D00F04AFC4B +:10B31000002866D155F82410B079496D487255F867 +:10B320002400D6F80710406DC0F80A10B6F80B10CC +:10B33000C18155F8240000E08AE0406D417AF87937 +:10B3400061F38200F87155F82400406DD0F80A10BE +:10B35000F960C089388244E055F824002222343054 +:10B360000321FAF78FF955F8240002213C30FCF74D +:10B370004DF806202AE055F824002222343003211B +:10B38000FAF780F955F8240002213C30FCF73EF82A +:10B3900055F82410496D81F8069055F82400C76BC4 +:10B3A0000E2000F057FD797960F30411797118E0EF +:10B3B00055F82400222234300121FAF763F955F8B8 +:10B3C000240001213C30FCF721F8022055F824101C +:10B3D000496D887155F82400C06B417921F0100146 +:10B3E00041713079012826D0042824D055F8241042 +:10B3F000B07B496D48713079012822D055F824106E +:10B400007088496D4880308855F82410496D08804F +:10B4100055F824107079496D0872012106F10D006C +:10B4200000F008FCA0B155F82410707B496D08713C +:10B430000020BDE8F08755F82410496D81F805908B +:10B44000D9E755F824104FF40060496D4880DBE7D8 +:10B450001220EEE7487A002070B5022604460670F6 +:10B46000012060700D460846F7F706F984F82A00B7 +:10B470002879002100F00F00A07007280AD2DFE829 +:10B4800000F00B1A04090B0907000320A07003E069 +:10B49000A67001E001280ED0A888C0F30710801F15 +:10B4A000C2B2A2721F2A10D805F11E0104F10B00CE +:10B4B000E8F7CAFF00E0A172A8696060A88B20814C +:10B4C0006879C009E070012070BDA172002070BDD4 +:10B4D00070B5C86B14460D46007900F00F000128C6 +:10B4E00003D06078032805D101E0122070BDE07818 +:10B4F0001F2802D900200870F7E70846FFF72EFE44 +:10B50000E86CE278401C211DE8F79EFFE96CE078CA +:10B510000870002070BD70B5507814460D460328A1 +:10B5200002D1E0781F2803D900200870122070BDD6 +:10B530000846FFF713FEE86CE2782130211DE8F79A +:10B5400083FFE96CE07881F820000120287000205A +:10B5500070BD10B5807A1446C043800708D10846F4 +:10B56000FCF7E6FA2046BDE81040022101F0F4BFE6 +:10B5700010BD3EB51225DDE906148DE8320000F05D +:10B5800013F83EBD3EB51325DDE906148DE8320003 +:10B5900000F00AF83EBD3EB51425DDE906148DE83D +:10B5A000320000F001F83EBD2DE9F84308A98046BD +:10B5B000B1E881021E4951F82050B5B3FE2016189B +:10B5C00043F1000338462C6BFCF7C7FD396802468F +:10B5D000487920F080004871E77969F38607E771C0 +:10B5E000A86D877D207967F301002071AF6DBF7D65 +:10B5F00067F383002071607920F004006071207E81 +:10B6000020F0010020761078627E60F305026276F9 +:10B61000A1602846FBF7A6FFCDF80080286B3246D4 +:10B62000001DFAF7BFFABDE8F883FFE70020FAE74C +:10B63000487A002038B50546DDE90404A21843F134 +:10B6400000030095FAF7AEFA38BD0000F8B50646DB +:10B65000DDE906450649A068001DAA18256843F1E2 +:10B6600000030D6464684C640096FAF79BFAF8BD19 +:10B6700000000940F8B50446DDE90610FE25521920 +:10B68000054D0E6843F100032E6449686964009417 +:10B69000FAF788FAF8BD0000000009402DE9F843E8 +:10B6A0008146DDE90858FE201718686D2E6B43F1BE +:10B6B0000004361D0079FCF747FA08481FFA88F1A4 +:10B6C000C162A96A0164E96A41643A462346304688 +:10B6D000CDF80090FAF766FABDE8F883000009405B +:10B6E00038B5074C049954F82110FE240090121923 +:10B6F000086B43F10003001DFAF754FA38BD00004F +:10B70000487A00202DE9F8438146DDE908072549FC +:10B7100051F82050F5B32C6BFE201618E07943F158 +:10B72000000820F07C004830E071207E20F001000D +:10B730002076A889401E81B205F17200EBF7B1FABC +:10B74000617E324660F305016176A86D4346817DD6 +:10B75000207961F301002071607920F004006071AC +:10B76000207E40F040002076A889401E6083A760BC +:10B77000D5F869002061B5F86D00A08295F86F00DA +:10B78000A075787920F080007871CDF80090286B52 +:10B79000001D00E003E0FAF705FABDE8F883002099 +:10B7A000FBE70000487A002038B5074C049954F8AC +:10B7B0002110FE2400901219086B43F10003001DB4 +:10B7C000FAF7F0F938BD0000487A00202DE9F84377 +:10B7D0008146DDE90808304915461E4651F82040EB +:10B7E000F4B3A06D407AFCF7AFF9216BFE202D1861 +:10B7F000C87946F1000620F07C004030C871A06D89 +:10B80000027D087962F301000871487920F0040094 +:10B810004871606C8860087E20F0400040F00100B4 +:10B820000876487E20F03F0027304876676C606BD2 +:10B83000797921F08001797139684A7922F08002A2 +:10B840004A71396809684A7922F080024A7141795F +:10B8500021F0200141713868B84205D0012004E090 +:10B86000FFE70020BDE8F883002040F621120BA17D +:10B87000EAF7BAF839462046FBF774FE0A491FFA80 +:10B8800088F0C862CDF80090206B2A46001D334630 +:10B89000FAF788F9E6E70000487A0020626C65351F +:10B8A000305F6C6C6D2E6300000009402DE9F041A3 +:10B8B000074604460078012510F03F000E46087048 +:10B8C00021784FEA9111717000F1010186F82B1077 +:10B8D00053D06078B07004F10204C10709D0216828 +:10B8E000C6F80310A188A6F8071004F106044FF06B +:10B8F000070581070AD52168C6F80910A18805F156 +:10B900000605A6F80D1004F106042DB2410705D571 +:10B9100014F8011B05F10105F1732DB2010705D5DE +:10B9200034F8021B05F1020531822DB2C10608D59B +:10B9300021887182A17805F10305317504F10304B2 +:10B940002DB280060AD51222214606F11500E8F72D +:10B950007BFD05F1120504F112042DB2B07840060A +:10B9600005D514F8010B6D1C86F827002DB2307830 +:10B97000A84207DA0020BDE8F0810020B07086F808 +:10B98000280004E0401B06F8280FE01BB0700120DF +:10B99000F1E770B504460D461830FFF787FF002821 +:10B9A00007D0A18895F82B00C1F30711884201D870 +:10B9B000012070BD002070BD2DE9F041C7891646F9 +:10B9C0000C46002531462046FCF7EEFA6D1CF61BAE +:10B9D0002468EDB2032DF5D3BDE8F08100B50B4628 +:10B9E000FCF7F1FB0A498B42417804D221F0200197 +:10B9F00041701E2104E041F0200141704FF4967126 +:10BA0000B3FBF1F1028861F30C02028000BD00007B +:10BA1000C4BF030070B50546807801F10204C00779 +:10BA200007D0D5F803002060B5F80700A08004F126 +:10BA30000604A878800707D5D5F809002060B5F876 +:10BA40000D00A08004F10604A878400702D5E87B29 +:10BA500004F8010BA878000702D5288A24F8020B05 +:10BA6000A878C00605D5688A2080287DA07004F1DA +:10BA70000304A878800607D5122205F11501204697 +:10BA8000E8F7E2FC04F11204A878400602D595F824 +:10BA900027002070012070BD10B50121827800239D +:10BAA00042B3D40700D00721940702D501F1060163 +:10BAB00009B2540702D501F1010109B2140702D5F8 +:10BAC00001F1020109B2D40602D501F1030109B264 +:10BAD000940602D501F1120109B2520601D5491CA2 +:10BAE00009B290F82820114409B23F2909DD0370FA +:10BAF000002010BD0370012180F82B1080F8283041 +:10BB000006E00170491C80F82B10891A80F82A1071 +:10BB1000012010BD2DE9F041C76CC46B002F19D076 +:10BB200000264FF0FF088CB107EB46152A781F2A34 +:10BB30000CD8691C04F10C00E8F786FC2978A08871 +:10BB4000891D61F30B10A08085F800802468761CA5 +:10BB5000022EE8DBBDE8F08170B51446054631B130 +:10BB600001290DD0022902D003290DD108E00C488B +:10BB70000A49054605F063FB30B92246002107E07B +:10BB8000064905F05CFB08B1122070BD2246012178 +:10BB90002846FBF731F9002070BD0000054802007F +:10BBA0006476002010B5C3780268002463F31F6236 +:10BBB000838849B113F4404114D0B1F5804F21D0AE +:10BBC000B1F5404F2ED104E0184905F038FB04468A +:10BBD00027E0C3F30D00104324D0521C24D14FF6AC +:10BBE000FF701BE0C3F30D01114305D0521C04D1BB +:10BBF000A3F57C51FF3900D101240D4905F01FFB4D +:10BC000080B90EE002F07F40C3F30D01084309D074 +:10BC1000FF20B0EB126F07D147F6FF70834201D0CF +:10BC200002E00CB1122010BD002010BD054802003A +:10BC30006476002070B502780024D20801D0012972 +:10BC40001BD00023002907D817E0042B04D1027869 +:10BC5000520901D0262410E00578002225FA02F6C8 +:10BC600006F00106521C3444D2B2E4B2082AF5D3DD +:10BC70005B1C401CDBB28B42E7D3204670BD00004A +:10BC8000094991F8EC2062B1420901EB820100F010 +:10BC90001F02D1F8F01001209040014201D0012094 +:10BCA0007047002070470000307500208C2101484B +:10BCB000E8F7F1BB94760020134A10B5D17804461A +:10BCC00002291FD09078B8B10020907001B110887F +:10BCD0000221D170FFF79BFAFAF7E2F90B4850F80E +:10BCE0002400D0F89000FAF79DFF20022146BDE81D +:10BCF00010400122FCF7ACBA012903D1BDE8104085 +:10BD0000FFF73CBA10BD000046040020487A00202E +:10BD100070B50446E8F786FB1449C2B214488B7824 +:10BD2000C55C0B7865F31F1323708B780D78C35CAB +:10BD30001B0143EA151363708B78C35C104663F3F1 +:10BD40001F10A0700A4B48789B1C185C000140EA49 +:10BD50001210E07048780322401CB0FBF2F302FBA3 +:10BD6000130048700878401C087070BD29760020C8 +:10BD70000048020070B5002415460E4608280FD270 +:10BD8000DFE800F00E04060E08180A0CF02411E09B +:10BD9000AA240FE0FF240DE00F240BE0552409E056 +:10BDA000082801D2012000E0002040F20B2205A16A +:10BDB000E9F71AFE224631462846BDE87040E8F70A +:10BDC00063BB0000626C655F6C6C6D5F7574696C61 +:10BDD0002E63000070B51C461546064611B10129B8 +:10BDE00012D10DE00D490E4805F029FA60B9002086 +:10BDF00020700C48D0F834112960B0F838010AE0FE +:10BE0000064905F01CFA08B1122070BD012020700F +:10BE100030682860B088A880002070BD0548020006 +:10BE2000647600203075002002490A680260496883 +:10BE300041607047743E020005490122824091F83A +:10BE40004611114201D001207047002070470000C8 +:10BE500030750020064900F0070201EBD0010120F7 +:10BE600009789040014201D00120704700207047BE +:10BE7000743E020000EBD10001F0070200780121BE +:10BE80009140084000D0012070470000044991F81B +:10BE90004611884301D00020704701207047000000 +:10BEA000307500202DE9F041154C00250126804613 +:10BEB00016FA01F6C5EBC507E05D68B13919491CF2 +:10BEC000404605F0BCF9A8B1C5EBC500205C304286 +:10BED0000DD00020BDE8F081C5EBC5000119D8F8F0 +:10BEE000002041F8012FB8F804008880E05D30435D +:10BEF000E05503E06D1CEDB2142DDBD30120E9E722 +:10BF0000947600200021417181714FF400624280DB +:10BF1000028007220271034A92F84521027441749B +:10BF2000704700003075002005480021102200F8FD +:10BF3000011C4173428008228280417070470000DA +:10BF4000767500202DE9F0410D4D0F460646002480 +:10BF500055F8240048B190F82810B14205D13C3082 +:10BF600006223946E8F7A9FA38B1641CA4B2082CB5 +:10BF7000EED34FF6FF70BDE8F0812046FBE70000EE +:10BF8000EC7A00202DE9F041114E0D46174656F887 +:10BF90002540804694B16069F6F73FF880B10020F3 +:10BFA00046F825006069F5F7A5FD0021404601F03F +:10BFB000D3FA2046BDE8F04100F046BF002102E080 +:10BFC000277002214046BDE8F04101F0C5BA0000EB +:10BFD000EC7A00200649002051F82020002A05D0E4 +:10BFE000401C80B20828F7D34FF6FF70704700005E +:10BFF000EC7A002030B591F8284018320023022C4A +:10C0000025D391F82A4022441DE000BF12F8014BCD +:10C01000002C1CD023445B1CDBB29D4217D312F8CA +:10C02000015B282D0DD1156840F8425F9588858009 +:10C030009579857110F81E5C45F0010500F81E5CCD +:10C0400042382244521E91F828509D42DED830BD1D +:10C0500070B5064616480D4650F82500816E19B198 +:10C060003E224A70846E0FE00F20FFF709FEB8B140 +:10C070000323324605214FF0041001F08DF8102102 +:10C080000170A0F801500446012229463046FFF70E +:10C0900079FF002C0BD02046BDE8704001F0DCB9E0 +:10C0A00029463046BDE870400122FFF76BBF70BDE6 +:10C0B000EC7A002010B500220449042000F090FE24 +:10C0C000BDE8104020210248E8F7E5B984480200A5 +:10C0D000EC7A002070B504461A4D042000EB0426CB +:10C0E00055F8240018B30020382217A1E9F77CFC8A +:10C0F0000021702001F002FB45F8240000281FD029 +:10C100007021E8F7C8F955F82400124A1249C48092 +:10C1100055F824303046F5F795FC55F82410486161 +:10C1200038B13046BDE87040012101F015BA012058 +:10C13000DAE7E1B23046BDE870400122FFF722BFE6 +:10C1400070BD0000EC7A0020626C6535305F6C6C6D +:10C15000702E630065C30100A9C301002DE9F04101 +:10C16000884601781E461746C90702D00024174D9D +:10C1700026E041785A7CB1EB121F0AD18178B9428E +:10C1800007D1C11C404605F05AF810B10120BDE8A6 +:10C19000F0810020FBE700BF05EBC401727C91F841 +:10C1A000A400B0EB121F09D191F89D00B84205D14F +:10C1B0009E31404605F043F80028E7D1641CE4B204 +:10C1C00095F89C00A042E7D8E3E700003075002016 +:10C1D00070B51546114A002492F8D800430701D5DE +:10C1E0000C2411E040F0080082F8D80008880828E4 +:10C1F00012D20B4951F8201071B1C1B2042202EBE6 +:10C2000000200122FFF7BEFE224642F246012846E8 +:10C21000EEF72AF9002070BD4224F5E730750020C2 +:10C22000EC7A00202DE9F0410D461D49C2F30720AC +:10C23000904651F82040002724B314F1240621D061 +:10C24000A87810B36879022800D21227082800D9EC +:10C2500011276169496B11F8222F60F306020A70F9 +:10C2600060696A79A91D406B6C30E8F7EDF8606988 +:10C27000E978406B10F8202F61F34512027028799D +:10C2800018B901E0422701E0FF20B0702B883A4640 +:10C2900042F253014046EEF7F9F80020BDE8F08184 +:10C2A000EC7A002010B51346C2F30720897800F01D +:10C2B000B5F9024642F259011846EEF7D5F80020CA +:10C2C00010BD00001046C2F30721044A10B552F811 +:10C2D00021200AB1FFF7BCFE002010BDEC7A00203F +:10C2E0002DE9F0471948C2F30727914650F8274037 +:10C2F0000E4691F80880484600F0B0FE050022D0B6 +:10C300000CB3616930684A6B90421CD1B8F1170FC9 +:10C3100008D040F283320EA10020E9F765FB022D20 +:10C3200008D010E03046F5F7F1FC30466169F5F7CA +:10C330003FFDF4E7207808B1012200E000223946F1 +:10C340004846FFF71FFE0020BDE8F087EC7A00208A +:10C35000626C6535305F6C6C702E63000020704736 +:10C36000002070472DE9F041CD88042000EB05271F +:10C3700091F824000C46810702D594F8306000E063 +:10C38000012620F0020084F82400384600F066FE02 +:10C39000012807D1EAB2334621463846BDE8F041CC +:10C3A00000F022B8BDE8F08138B514460546927910 +:10C3B0000B46042000EB0221A88858B10020009011 +:10C3C000204600F03BFB00280CD12846BDE8384051 +:10C3D000F5F723BE009313460A462146284600F08F +:10C3E00093FBF0E738BD00002DE9FF4F48690C468C +:10C3F00001F12407466B474985B016F8040F4FF04A +:10C400000008C0F381001D4631F8100087F8038052 +:10C4100000F1EA09B87808B1012100E00021606963 +:10C42000383000F07BF8A089C246284480B2A08151 +:10C430002189DFF8E4B029442181E289216902FBE6 +:10C4400000112161D4E91423A0FB02C508FB0252AC +:10C4500000FB0325D4E916021CEB000804F11800C8 +:10C46000554104903878C1070DD02189B4F8472090 +:10C47000914208D320F00100387004F1420106F126 +:10C480001800FAF7C4FC94F82510307861F38300A3 +:10C49000307021890498EAF704FC717D012260F371 +:10C4A0000501717530462169FBF772F820696FF05C +:10C4B000E90109EB4002CDE9002BB8EB000265EB86 +:10C4C0000A00CDE90246521840F1FF336069F5F7E2 +:10C4D0008BFD6069406C18B1012009B0BDE8F08F98 +:10C4E000D4E9142012EB08084541E1892069084489 +:10C4F0002061A089401C80B2A0812189491C218132 +:10C50000F9898842AED907990598FFF7A1FD002067 +:10C51000E3E70000C63E02002DCC010070B50568BF +:10C520000E462C46204616B1F9F724FB01E0F9F738 +:10C5300013FB2468AC42F5D170BDF8B504460D4636 +:10C5400090F8270094F82610164688421AD2142034 +:10C55000FFF796FB002815D0E879000612D5A06BEE +:10C5600010B1297C8909417194F827002B46401CA1 +:10C5700084F82700009660692289E188406B001DDD +:10C5800000F064F8F8BD00002DE9F04788468C6B98 +:10C590008146998892F82B00C1F3071188422DD269 +:10C5A000091A1833CDB2C61826E0E079C0F1F701B8 +:10C5B000CFB2BD4224D904F1080108443A463146BD +:10C5C000E7F742FFF720E0710120A071E81BC5B238 +:10C5D0003E44FF234A4605210F4800F0DDFD074693 +:10C5E00020683860606878600020F871404600F08C +:10C5F00093F83C46C8F83870002DD6D1BDE8F087D6 +:10C60000C1B204F1080008442A463146E7F71CFF8E +:10C61000E0792844E071F1E70500040008280DD214 +:10C62000094A52F8200048B1243007D00029017887 +:10C6300006D021F0040101700020704742207047AD +:10C6400041F00401F7E70000EC7A00202DE9FC5FDF +:10C650000746007F0C9C1D4693468A46800601D4FF +:10C66000022600E00126B87F00F07F08287C8109BF +:10C6700008D002214FF00008B1EB901F01D1022633 +:10C6800000E0012600F01F00314605F0DAF981468E +:10C69000012000F0C1FB002837D10D2101EB490337 +:10C6A000224605211A4801F0ABF804002DD01520D0 +:10C6B0002070A4F801A0A4F80AB0A87900F03F0007 +:10C6C000E0702846F5F7D8FF00EB80004000A0801E +:10C6D00010486837334690F8FC02A071287C4A461F +:10C6E0008009E0712672287AC0F3C000607284F875 +:10C6F0000C90CDE90078696904F10D0005F0A8F906 +:10C700002046BDE8FC5F00F0A7BEBDE8FC9F00002E +:10C71000060004003075002070B50546846B0E20BD +:10C72000FFF7AEFA38B195F82400400703D420464D +:10C7300000F092FE03E0A4F1180000F041FC00209C +:10C74000A86370BD816B002903D002228A71FFF7B4 +:10C75000E3BF70472DE9F04F8DB00546DDE918A91C +:10C76000887D394FDDF858B00C4680064FF496733B +:10C7700001D41E2000E01846B4F815104FF6FF78DB +:10C78000C1F30C014143002689F80060607820BBAA +:10C79000A0785FEA806C20D55FEA007C1DD59942C5 +:10C7A0001BD3A978FF2915D1C00716D0507923468D +:10C7B000C009A870D4F80300C5F80300B4F8070056 +:10C7C000A5F807005079E11CC209D7F88800FFF7E7 +:10C7D000C5FC10B1AA78012A03D940460DB0BDE8C6 +:10C7E000F08FD7F88810B4F8177009314B88098892 +:10C7F000D800B0FBF7F00A2780B20A2900D23946E8 +:10C8000009390746884200D239460DF1680E89B2CF +:10C81000BEE880110DF1180ECDF814A0AEE8CB11D2 +:10C82000208A617CED1CCDF80090CDE90125C0F394 +:10C830000B000909CDE903105A4604F11500179BB6 +:10C8400000F004F8CAE70000407500202DE9F05F11 +:10C8500092469B460546DDF858800A9FFFF7BAFBD3 +:10C8600006464FF0010908283DD2FFF733FC4D483A +:10C8700050F8264087F80090A4B30420002200EB73 +:10C8800006293A701498207104F124000F99417020 +:10C890000B9901710C9904F1500C0B68E3638988C2 +:10C8A000A4F840100D9941710E99E185698840F214 +:10C8B000E24359434FEAE173ACE80A0C1099C18195 +:10C8C0001199818112990182297801721599C1F318 +:10C8D0004003017863F3820101706878800607D411 +:10C8E0001E2007E001E087F800903046BDE8F09F89 +:10C8F0004FF496702988C1F30C014143D4E91630F6 +:10C9000059185041C4E916106A78520606D54FF4FA +:10C910001612891840F10000C4E91610287A41095E +:10C920006888F9F7DDF9E081298A218161815FEA70 +:10C93000080100D0084620616069426B6868121DDA +:10C940009061287A117F60F304011177B5F80D002A +:10C950001082E87B9074D5F80900D060D5F80910F2 +:10C96000183204F11800EAF7BAF91398F2B2C3B218 +:10C9700021464846FFF738FD58B168880A2100EB88 +:10C98000400001EB4000C2084946074800F02EFE77 +:10C99000ABE7F1B201224846FFF7F4FA4FF6FF7019 +:10C9A000A4E70000EC7A0020080004002DE9F04F15 +:10C9B0008DB00446DDE9185AB4F80510B5F8030047 +:10C9C0009046C000B0FBF1F086B2B5F801200A2015 +:10C9D000DDF85CB0994631460A2A00D20246093A8F +:10C9E000914200D311468FB2E7F71CFD697901230C +:10C9F0008B4007219943CDE909B14FF0000CCDE9F7 +:10CA00000BCAB5F80310A27ECDE90771CDE9052662 +:10CA1000617E80B201F00F02CDE9032004F11B0317 +:10CA2000C1F30011CDE901131698009042464B4620 +:10CA3000E01CFFF70BFF0DB0BDE8F08F2DE9F041D2 +:10CA40008CB01D46129E88460446002706B13770FA +:10CA50006879800656D5287A10F02E0F52D1ECB3A3 +:10CA600069461846FEF795FFC0B342462946204660 +:10CA7000FFF763FD94F82B0068B19DF802000007F2 +:10CA800009D5BDF81000E18DC0F30B00884239D004 +:10CA9000E08584F82B700EB1012030702A4669467B +:10CAA0002046FFF7A7FAA66BC6B12846F5F7E4FDC6 +:10CAB00030719DF80200400602D59DF82700F07005 +:10CAC0002B466A4621464046FFF75EFD9DF8020070 +:10CAD000C0060CD4A06B8771204600E012E0FFF77F +:10CAE0001BFE14F8240F40F0020020700AE0BDF88D +:10CAF0001300C00403D001200CB0BDE8F081204633 +:10CB0000FFF720FE0020F7E72DE9FF4F83B04FF03D +:10CB10000005109E9A460C0083468DF8045009D0FB +:10CB20000846FFF70FFE7079800603D5307A10F0C3 +:10CB30002E0F03D0002007B0BDE8F08FA84606F105 +:10CB400018002561FBF725FB0546A06E4FF0010993 +:10CB5000E8B100271A2245B1297823794FEA911CC0 +:10CB600009FA0CF10B4203D104E02179090701D540 +:10CB700042700127A06E00F06FFCC4F8688037B1E6 +:10CB8000012251460598FFF7FDF90120D3E725481A +:10CB900090F8EC1019B1B0F8F000400405D431461B +:10CBA0002046059AFFF7C9FCC4E7012000F034F9DC +:10CBB00008B1002005E0FF2305211B48059A00F07D +:10CBC0001FFEA0630028B6D00F210170A16B7F204B +:10CBD000A1F801A0A16BC87015B12878800900E008 +:10CBE000FF20A16B33465246487184F82B9001A870 +:10CBF000009020460599FFF721FF05469DF80400A7 +:10CC000068B10948A28EC01C059900F0EFFCDBE971 +:10CC10001201C4E9160120896081A4F80C8028461D +:10CC200089E70000307500200500040038B5014692 +:10CC3000EA240598121943F100030091F8F7B2FFB6 +:10CC400038BD00000F4AD06FD2F8641180B201F4F1 +:10CC5000704140EA01100C490023B0F5702F0968BB +:10CC60000CD0B0F5804F00D80846D367D2F86411D5 +:10CC700021F47041C2F8641140680047C2F8643181 +:10CC80000846F9E700000440B44000000A460146A7 +:10CC90000148E8F75FB90000703D020070470000EE +:10CCA00010B50C46014604A0E8F74FF92046BDE850 +:10CCB0001040102101F06AB8252D367320000000C5 +:10CCC00008B572B64FF480410020E8F7CFF8154957 +:10CCD0000020087004F0F8FC00221349104604F00C +:10CCE00061FC00221149012004F05CFC114910484C +:10CCF00008600421684600F097FF0098E7F79CFB66 +:10CD0000EEF78BFCE9F72AFEFFF79CFF0A48007854 +:10CD1000800603D5082109A004F092FD00F0CCFFA5 +:10CD2000FEE700000E040020116E000095B6000022 +:10CD3000FF340200140400201C0000206C6F6164AA +:10CD40005F6170700000000010B50446E7F77AFEDE +:10CD500004480122A240016891430160BDE81040EF +:10CD6000E7F77ABEA47A00202DE9F041154D0E4672 +:10CD700007462C69002C23D00A4601462046EAF7D4 +:10CD80000BF805F1100178B10846E9F745FF2D6968 +:10CD9000284600F07DFB75B1E86800F0A3FC50B1B7 +:10CDA000032000F0ABFB06E033463A46064800F0AD +:10CDB00052FA040004D02046BDE8F04100F044B827 +:10CDC000BDE8F0816C7A0020996D0000C268C868E7 +:10CDD000101AB0F1004F01D30120704700207047B6 +:10CDE00070B516460C460546E7F72CFE002303E017 +:10CDF000A068C6545B1C9BB2E0899842F8D80549EC +:10CE000001EB850044600878401C0870E7F724FEB9 +:10CE1000002070BDC07A0020054901EB4000418D23 +:10CE2000008E814201D90120704700207047000028 +:10CE30006C7A002030B4A0F1180403B1A360C4E9F7 +:10CE4000031230BC00F008BB2DE9F0475FEA000890 +:10CE50004FF000066FD0A8F104056988A1F50340E2 +:10CE6000383801D1012000E0002040F2171250A113 +:10CE7000E8F7BAFD4FF20F0068802F880024E7F72B +:10CE8000E1FDDFF8389100BF09EB860209EB4601AE +:10CE90009269898C904508D31144414505D309EB2B +:10CEA000860084692CB1012004E0761CF6B2032EC2 +:10CEB000EAD300204FF49A723DA1E8F795FDA04512 +:10CEC00001D9012000E0002040F2351238A1E8F736 +:10CED0008BFD09EB4606708DB84201D3012000E0BE +:10CEE00000204FF49B7232A1E8F77EFD708D4AF26C +:10CEF0005A58C01B7085002640F23D1949E06189EF +:10CF0000414501D1012000E000204A4628A1E8F770 +:10CF10006BFD20892044A8421AD12089384480B270 +:10CF20002081256801198D423CD12989084420813E +:10CF300015B1012001E039E0002040F24B121CA1A4 +:10CF4000E8F752FD286820602868F8B1446029E0BD +:10CF5000A5421CD20EB1012000E000204FF4AC72BB +:10CF600013A1E8F741FD35606E60E819A5F80A8065 +:10CF7000A04208D120682860206800B1456020895F +:10CF8000384428810EE02C6065602F810AE0264637 +:10CF90002468002CB3D100203560C5E900062F813C +:10CFA000A5F80A80BDE8F047E7F756BDBDE8F08771 +:10CFB0006D73735F6D656D2E630000006C7A0020E9 +:10CFC000FFF742BF0148006870470000A47A0020C4 +:10CFD0002DE9F0410025CCB20746C1F30B26072C02 +:10CFE00001D2012000E00020932218A1E8F7FCFC08 +:10CFF000194800EB840044680CB1012000E00020D7 +:10D00000972212A1E8F7F0FCE089B04201D9012093 +:10D0100000E0002098220DA1E8F7E6FCE089B0428C +:10D0200010D9206840B1A168895D00EBC101384684 +:10D0300000F0F8F9050005D1616819B1384600F033 +:10D04000F1F905462846BDE8F08100006D73735F75 +:10D050007461736B2E630000C07A002070B5C4B297 +:10D06000C0F30B25072C01D2012000E0002040F284 +:10D0700035120FA1E8F7B8FC104800EB84004468B3 +:10D080000CB1012000E000204FF49D7208A1E8F7E8 +:10D09000ABFCE089A84201D9012000E0002040F269 +:10D0A0003B1203A1E8F7A0FCA068405D70BD000042 +:10D0B0006D73735F7461736B2E630000C07A002020 +:10D0C00010B5E7F7BFFC074C0120C4F8380300BFD8 +:10D0D000D4F8380310F0010FFAD1E7F7BDFCD4F80B +:10D0E0002C0310BD0000094010B538210548E7F7B2 +:10D0F000D2F900F009F800F00DF8BDE8104000F09A +:10D1000019B800006C7A00201C210148E7F7C3B968 +:10D11000A47A002010B50549022000F0CDF9BDE841 +:10D1200010402C210248E7F7B6B9000029D30100CE +:10D13000C07A00200149032000F0BEB9CDD3010020 +:10D140002DE9F041046890460D46074600263CB1A3 +:10D15000214628464246904718B926462468F6E7F5 +:10D160007D602C6016B13560BDE8F0813D60FBE765 +:10D1700030F8020CA0F50341383901D00120704786 +:10D180000020704710B500F0B9FA002802D1F9F775 +:10D1900046FE002010BD000010B500F031FB040079 +:10D1A00001D0012000E00020232202A1E8F71CFCAE +:10D1B000204610BD6D73735F6D73672E63000000B2 +:10D1C0002DE9F0410746DFF84C800E46C81C08EBFD +:10D1D000870420F003011546A161E7F733FC7019BD +:10D1E00020F00301A069091A0181A1694AF25A508D +:10D1F0004881A16900200860A169486008EB4700E8 +:10D20000A908858401EB41010186BDE8F041E7F7FB +:10D2100023BC00006C7A00202DE9F04190460E46B8 +:10D22000074600250C6811E041462046B84758B132 +:10D2300020680DB1286000E03060206810B1002047 +:10D24000206005E0756003E025462468002CEBD1E2 +:10D250002046BDE8F0812DE9F047984691460E46FC +:10D26000074600250C6812E0424649462046B8476A +:10D2700058B120680DB1286000E03060206810B11E +:10D280000020206005E0756003E025462468002C3E +:10D29000EAD12046BDE8F08770B50C4D064632460F +:10D2A00029460B48FFF7B8FF04000DD0E7F7CAFB8B +:10D2B0000648214608380022E9F77EFCE7F7CCFB58 +:10D2C000022000F01BF9EAE770BD0000747A00202C +:10D2D0005BB6000070B50F4C2068002819D0B0FA7A +:10D2E00080F0C0F11F00C5B2062D01D2012000E080 +:10D2F0000020A32208A1E8F777FB04EB8505686806 +:10D3000000B10120A42204A1E8F76EFB6868804701 +:10D31000E2E770BDA47A00206D73735F70726F6373 +:10D320006573732E6300000070B5E7F78BFB23482D +:10D33000E9F772FC0446E7F78FFB200025D0FFF7E2 +:10D3400017FF80F00100C8221DA1E8F74DFBD4E9CA +:10D350000201FFF73DFE050000D00120CD2218A1FB +:10D36000E8F742FBBDB104F1080004F118010DC853 +:10D37000A84710F0FF000ED0012806D002280ED0DA +:10D38000E2220FA10020E8F72FFBE7F75BFB0B4839 +:10D39000006858B10DE02046FFF712FEF5E7074898 +:10D3A000214608300022E9F707FCEEE70220FFF7EC +:10D3B000CBFCBDE87040E7F74FBB00006C7A002063 +:10D3C0006D73735F7461736B2E63000070B5144DE1 +:10D3D0000320FFF7B9FC2C692CB1E068401E00F077 +:10D3E00081F928B10CE0BDE87040002000F050B891 +:10D3F000204600F04DF8E06800F074F900280DD0E8 +:10D4000007481030E9F708FC0446FF22D4E901017F +:10D4100000F036F82046FFF717FDD9E770BD000091 +:10D420006C7A002030B58B88A3B100224FF6FF75CF +:10D430000EE00C6854F83240844201D0AC4205D171 +:10D440000868042101EBC201405830BD521C92B261 +:10D450009342EED8002030BD10B5A0F11804E7F7D4 +:10D46000F1FA064821460022E9F7A6FBE7F7F4FAAD +:10D47000BDE81040022000F041B800006C7A0020A6 +:10D4800010B50023FFF788FEBDE81040FFF7E4BFAA +:10D4900068B1C1680748C0F84013016DC1F380212D +:10D4A000002906D1C16D41F48061C165012001F000 +:10D4B000ABBC70470000094070B503250E4604461A +:10D4C000062802D20EB1012000E00020462206A16B +:10D4D000E8F78AFA062C04D20748002500EB8400FE +:10D4E0004660284670BD00006D73735F70726F6395 +:10D4F0006573732E63000000A47A002070B50546A2 +:10D500000F48006810F0FF0F01D0012400E0002454 +:10D51000062D01D2012000E000205C2209A1E8F7DD +:10D5200063FA0CB9E7F78EFA0A480122AA400168AB +:10D53000114301600CB9E7F78FFAE9F731F970BDD3 +:10D5400004ED00E06D73735F70726F636573732E2B +:10D5500063000000A47A00202DE9F041C4B20E4619 +:10D560000746C0F30B25072C01D2012000E0002064 +:10D5700040F2131219A1E8F737FA1B4800EB8400B8 +:10D580004468E089A84201D9012000E000204FF45E +:10D590008C7212A1E8F728FA0CB1012000E00020FB +:10D5A00040F219120DA1E8F71FFAE089A84213D939 +:10D5B000A068441901D0012000E0002040F22112AF +:10D5C00006A1E8F711FA2078B04205D02670384657 +:10D5D000BDE8F041FFF760BEBDE8F0816D73735F99 +:10D5E0007461736B2E630000C07A002010B51201C5 +:10D5F00000F018F807480069002809D00068401CAE +:10D6000000D00120BDE81040FC2203A1E8F7ECB9EE +:10D6100010BD00006C7A00206D73735F74696D65D6 +:10D62000722E63002DE9F04115000E4607460ED01C +:10D63000B5F1004F01D36FF000450B461649024685 +:10D6400088461648FFF707FE040002D008E00125CF +:10D65000F3E701211020FFF795FD0446C4E90176A8 +:10D66000FFF72EFD05440E4A21464046E560FFF7D0 +:10D6700067FD094810380069A04201D1FFF708FF93 +:10D68000284600F02FF8002804D0BDE8F041032020 +:10D69000FFF734BFBDE8F0817C7A0020996D00006F +:10D6A000CDCD010010B5FFF78DFC08B1002010BDF5 +:10D6B000012010BD0A4810B504696CB1FFF700FDE8 +:10D6C000E168814203D2401A401E4FF6FF71081AEA +:10D6D00040F27121484310BD4FF0FF3010BD0000F3 +:10D6E0006C7A002010B50446FFF7EAFC001BB0F18D +:10D6F000004F01D2012010BD002010BD2DE9F35FC5 +:10D70000C01C002420F00305083527460C2D00D24C +:10D710000C25E7F797F9DFF8D8B0019839180320FE +:10D72000B1FBF0F200FB12180BEB880086690EB11A +:10D73000012000E000208D222EA1E8F755F94AF2E1 +:10D740005A5A05F10C0916E07089504501D10120A3 +:10D7500000E00020922227A1E8F746F93089A8428C +:10D7600008D3484501D2716821B114B121898142A1 +:10D7700000D934463668002EE6D11CB120894845D0 +:10D7800000D205467F1CFFB2032F02D2002CC4D06A +:10D7900000E08CB12089A84213D1606800B101205B +:10D7A000BC2214A1E8F720F9D4E900010860206840 +:10D7B00058B16168416008E0E7F74EF90020BDE824 +:10D7C000FC9F401B80B22081044448F23830258001 +:10D7D00060800BEB4800241D418D29444185E7F70B +:10D7E0003BF90120EE2203A1E8F7FEF82046E6E728 +:10D7F0006C7A00206D73735F6D656D2E63000000A1 +:10D800002DE9F0410E4607461C461546012103F15D +:10D810001800FFF773FF00280CD000210160C0E959 +:10D820000454C0E9027600F1180521462846E6F7BF +:10D8300032FE2846BDE8F08170B50A4D686D40069D +:10D840000FD52C6E4020E9F79FFA286EA04328667A +:10D85000002C06D004480078400602D5204603F08C +:10D860008BFF70BD000009401C0000202DE9F04F27 +:10D870004FF00009DFF87CB15F4E8DB042F22C58BA +:10D88000CA46746D45462C4071D02046E9F77CFAB3 +:10D890000027A846A00602D50120E8F799FFA004BA +:10D8A00001D5F9F7E7F960077AD5D6F80C01002819 +:10D8B00076D040F080452D1F049595F882008DF8B4 +:10D8C000180095F826008DF81900A86F0590686F6C +:10D8D000B5F88220C3B28146D1B2032B02D0042B0B +:10D8E0002DD124E0052906D016291CD017291AD0DD +:10D8F000182924D117E0DBF838100291097901F0DA +:10D900000F0107291BD102994979890617D5C6F855 +:10D910000CA1DBF84000F9F785F936480299103080 +:10D92000F6F7AAF81CE0C6F80CA1E86F16E0334938 +:10D93000C9F30B2051F8200008B1172A0BD04A4632 +:10D9400004A94FF40030F9F715FA47B395F87400BD +:10D9500003280FD10CE0C6F80CA14069F4F746FA91 +:10D9600001274A4604A97804F9F704FAEEE73DE0F6 +:10D97000F6F7E6F89FB1E00512D4756D05EA0805E3 +:10D980002846E9F701FA42F2040084432C434FF49D +:10D9900098721BA1C4F30020E8F726F87AE7FFE7A6 +:10D9A000600502D50320FFF7A9FDE0057FF569AF0B +:10D9B000CFB10498B0F86800ADF81C000498B0F836 +:10D9C0006A10ADF81A109DF81900814203D2ADF823 +:10D9D0001A00ADF81CA04A4604A94FF00210F9F74E +:10D9E000C9F96006E2D5F8F793F94AE70DB0BDE84A +:10D9F000F08F00003075002000000940EC7A002014 +:10DA00006474626C652E630000210148EDF7C2BDAD +:10DA1000E804002001210148EDF7BCBDE804002026 +:10DA200002210148EDF7B6BDE804002003210148BA +:10DA3000EDF7B0BDE804002004210148EDF7AABDD0 +:10DA4000E804002005210148EDF7A4BDE80400200A +:10DA500006210148EDF79EBDE8040020072101489A +:10DA6000EDF798BDE804002008210148EDF792BDCC +:10DA7000E804002009210148EDF78CBDE8040020EE +:10DA80000348016841F0200101600120FFF736BD25 +:10DA9000000008400A210148EDF77CBDE8040020A1 +:10DAA000A0F13001092901D808467047A0F16101B1 +:10DAB000052901D857387047A0F14101052901D83F +:10DAC000373870474FF0FF3070470000064A00209B +:10DAD0000146126802EB81035B6903B1401C491CDB +:10DAE0000829F7DB70470000BC37020004480168D2 +:10DAF000044A11430160002211460620EDF754BD8F +:10DB0000040007400100200070B5154613460E467C +:10DB10000A4604460121ECF7A5FF022C07D0042C8D +:10DB20000BD129463046BDE87040E9F7FDBA2946D9 +:10DB30003046BDE87040E7F773BE70BD10B50446CF +:10DB4000EEF774FD0146E08A814203D2BDE8104041 +:10DB5000EEF76CBD10BD03F00DBD00000A46014696 +:10DB600021480B2910D2DFE801F0061013201728F6 +:10DB7000383033353B001D48016812B141F00101D6 +:10DB800001E021F0010101607047D0B203F0ECBC6C +:10DB90001749104603F0CCBD1648016812B121F0B8 +:10DBA0008051F0E741F08051EDE7016812B141F496 +:10DBB0000071E8E721F40071E5E7016812B141F472 +:10DBC0008061E0E721F48061DDE790B203F0E4BC1E +:10DBD000094800E00948026070471046EFF7E4BBCF +:10DBE000D0B2EFF7DBBB0000700104400000002062 +:10DBF0001D1802006C0004402404002028040020AA +:10DC000070470000034909680160034909684160E1 +:10DC1000704700009000002094000020F8F7E0B961 +:10DC200000487047F034020089B2F6F7EDBB0000FF +:10DC30000149086070470000140400200FB410B5BB +:10DC400003A90298E7F776F910BC5DF814FB000011 +:10DC5000034AC2E90001012201490520EDF7A4BCF5 +:10DC600014000020E6F7DEBB18B1012806D0002022 +:10DC700070470348006800F48000704703F06EBCF2 +:10DC80008800044002480068C0F303207047000089 +:10DC90006401044072B6BFF34F8F05480168054A1E +:10DCA00001F4E06111430160BFF34F8FFEE7000014 +:10DCB0000CED00E00400FA0510B5E9F777F8BDE8CF +:10DCC000104004F083BA0000034B43F8301003EB1C +:10DCD000C000426070470000A004002070B50C46F0 +:10DCE0000A490D560A4941F8304001EBC000426034 +:10DCF0002846E7F77BF828461CB1BDE87040E7F7F7 +:10DD00008DB8BDE87040E7F77DB80000F43402003C +:10DD1000E804002001490870704700000E0400204C +:10DD200001490860704700001004002001490860A4 +:10DD3000704700002004002003F03EBC084940EA80 +:10DD400001020849CA67D1F864214FF4704322F4F4 +:10DD5000704203EA10100243C1F86421FFF79AFFF2 +:10DD60000000FFFF00000440034A1278920602D52B +:10DD700089B203F065BD70471C00002002490A68A3 +:10DD800060F30B220A6070476401044070B50D1EF9 +:10DD900006460DDD002404E0315D06A0E7F7A6F895 +:10DDA000641CAC42F8DBBDE8704004A0E7F79EB805 +:10DDB00070BD000025303258200000000A0000002D +:10DDC00070B51D46144601280BD002280DD004283A +:10DDD00009D0FC2815D1BDE87040114609A0E7F72D +:10DDE00085B80BA005E00CA003E009B10CA000E091 +:10DDF0000DA0E7F77BF829462046BDE87040FFF705 +:10DE0000C5BF70BD4C4F47202D2D2025730A000043 +:10DE1000434D44203D3E2000455654203C3D2000CB +:10DE200041434C203C3D200041434C203D3E2000DE +:10DE300088B0EDF701F80021ECF752FFEEF7A0FAF9 +:10DE400001F01CFF002211460120EDF7ADFBEAF7BF +:10DE5000B5FD0120EDF73EF8064D4FF0FF342246A8 +:10DE60006946A86804F052FE0128F8D16846E6F732 +:10DE700051FEF4E700000020FEB50646082801D355 +:10DE80000020FEBDEBF71CFA0028FAD1E8F738FDB8 +:10DE90000400F6D07821E6F7FEFA1720A681E0828A +:10DEA00000250D482576257040F826400B4800785F +:10DEB00078B9A689EEF7BAFB02218DF80810ADF803 +:10DEC00009000095032302AA042130460195EEF7CC +:10DED000E3FE2046FEBD00005C690020E800002053 +:10DEE00070B5FFF7C9FF04001AD0A1890DA0E7F7AC +:10DEF0002DF804F1600024670546E8F7FBFD224693 +:10DF000013492846E8F72CFE47F2305240F281418F +:10DF10002846E8F70DFE2846E8F7DCFD204670BDF0 +:10DF2000002070BD4741545420636C69656E7420B5 +:10DF300074696D656F75742073746172742C2068D8 +:10DF4000616E646C65203078253032780000000006 +:10DF5000959000002DE9F041184C0F460546E66803 +:10DF60002068001D03F084FE38B9206890F82C105A +:10DF700001208840216981432161681C07D137B1A4 +:10DF80002168BDE8F041091D0D4803F0FCBE206882 +:10DF90003544B5424560216801F1040104D2A06B0B +:10DFA000BDE8F04103F0D7BE606B03F0D4FEA06A79 +:10DFB000854200D2A562BDE8F08100002400002067 +:10DFC000840B00202DE9F041054603F0E9FE2D4CBD +:10DFD000A068401CA06020682B4F10B1606930B36E +:10DFE0002BE02560A068012827D1002606EB8600DB +:10DFF00007EB800003F0A1FE761C0F2EF6D323481A +:10E0000003F09BFE2148143003F097FE1F48283090 +:10E0100003F093FE1D483C3003F08FFE1B48503048 +:10E0200003F08BFE194860631430A06305E020689C +:10E03000E96AC06A884200D82560606A401C606254 +:10E04000E96A0120226988401043206101EB8100C8 +:10E0500007EB8000291D03F096FE03F0C1FE606906 +:10E0600000280CD02068E96AC06A884207D20849B3 +:10E070004FF080500860BFF34F8FBFF36F8FBDE844 +:10E08000F081000024000020080A0020340B00204A +:10E0900004ED00E038B503F083FE0E4C2068A8B90B +:10E0A0000D4803F04AFE0C48143003F046FE0A48BF +:10E0B000E06014302061084B0020C43B009003F165 +:10E0C0004C020C210A2004F02FFA2060BDE83840F1 +:10E0D00003F086BE600000205C0C002030B4026CAF +:10E0E0000B46002A0BD0C1681144C1608468A1426C +:10E0F00001D30168C16030BC1846E6F7A5B930BC51 +:10E1000070472DE9F041856B174604460026026CE6 +:10E1100082B1C7B1E068E6F797F9E168206C091AA7 +:10E12000E1602268914202D2A168081AE060022FE1 +:10E1300016D017E02068A8B9A06804F0E9FF0646E9 +:10E140000020A0600EE06068E6F77EF9216C606850 +:10E1500008446060A168884204D32068606001E0E0 +:10E1600005B16D1E6D1CA5633046BDE8F081000051 +:10E1700010B5044690F8510050B101280BD0022888 +:10E180000ED0BDE8104040F61E7106A0FFF760BD3E +:10E19000206B03F03BFE2046BDE8104003F036BE86 +:10E1A00010BD00007461736B732E63000A48002178 +:10E1B0000269012A00D901210268D26A0AB100204D +:10E1C0007047064A1268012AF9D80029F7D1816AF6 +:10E1D000C068081A7047000024000020080A0020C8 +:10E1E0000A4902680A6042684A6082688A60C268B6 +:10E1F000CA6002690A6142694A6182698A61C069CA +:10E200000122C8610420EDF7CFB9000040050020CD +:10E2100010484FF4B041420706D0C01D0D4920F010 +:10E220000700411AC1F5B0410B4A00230144C2E97D +:10E2300000030839103A21F0070111604B600B60B0 +:10E240000B1AC0E9001393604FF000405360D06098 +:10E2500070470000840C00209C0000201F4C204EC2 +:10E2600012E000BF03F09CFDF068C568281D03F0B4 +:10E27000FFFCA068401EA0606068401E606003F064 +:10E28000AFFD2846FFF774FF60680028EAD1154803 +:10E290000068012807D914494FF080500860BFF387 +:10E2A0004F8FBFF36F8FFFF781FF0228D7D303F0A3 +:10E2B000EDFFA06AE168884204D240F65C510BA0F1 +:10E2C000FFF7C6FCFFF772FF03F000F9022801D345 +:10E2D00003F0E6FD04F0F0FFC1E700002400002099 +:10E2E000700B0020080A002004ED00E07461736BDD +:10E2F000732E6300002807D00021816001600B4667 +:10E300000A46C16004F08AB9704710B5029C49B151 +:10E310002260C4E90F010121204604F039F90020F0 +:10E32000A06410BD2460F4E72DE9F05F8846DDE9C4 +:10E330000B9483466FF00301206B01EB82010844CC +:10E340000A9E20F007079A46780704D040F2613110 +:10E350001CA0FFF77DFC0025B8F1000F0ED00020B7 +:10E36000221818F8001082F8341018F8001011B1B3 +:10E37000401C1028F4D384F8435001E084F8345052 +:10E380000F2E00D30E26E662C4E91165201D03F0AE +:10E39000DFFC04F1180003F0DBFCC6F10F00246180 +:10E3A000A0616462E56484F850505246594638468C +:10E3B00000F000FB2060B9F1000F01D0C9F8004067 +:10E3C000BDE8F09F7461736B732E63002DE9F04715 +:10E3D0001E46DDE9089417460D00804604D140F240 +:10E3E00065110CA0FFF734FC002C11D0FFF752FE92 +:10E3F00004F11801C4F80080A1E86002201D03F0B8 +:10E40000A7FC002F04D014F8240F40F00400207063 +:10E41000BDE8F08774696D6572732E6300000000BB +:10E4200030B5114900E011460A688242FBD34B68BF +:10E430005C18844203D14068184448600846436829 +:10E440001C18944209D1084C103C2468A24209D0FF +:10E4500052681A4442600A6812680260814200D021 +:10E46000086030BD0460F9E79C00002070B500240E +:10E470000B4D41609142006106D8D11A82699142E8 +:10E4800006D2011D286907E09A4203D2994201D3BE +:10E49000012403E0011DE86803F05DFC204670BD27 +:10E4A0006000002010B5044603F07AFCA06B28B190 +:10E4B0005FF0000403F094FC204610BD0124F9E74E +:10E4C0002DE9F3410F4600980026846C24B940F6EC +:10E4D000453115A0FFF7BCFBA06BE16B884204D36C +:10E4E00040F6463110A0FFF7B3FBA06BE16B88420A +:10E4F0000CD294F945503A4669462046FFF701FE92 +:10E500000646681C05D06D1C84F845503046BDE8B1 +:10E51000FC81606A0028F9D004F1240004F08CFE2C +:10E520000028F3D00126F1E771756575652E63004B +:10E53000F8B5054616480E46C068C068C468201D78 +:10E5400003F096FB94F82400410716D5A0692B46EA +:10E55000411932462046FFF789FF90B1002003465B +:10E56000014600902A46204604F076FF48B94FF451 +:10E57000FC7108A0FFF76CFB03E020F0010084F8B9 +:10E580002400216A01B02046BDE8F04008470000A1 +:10E590006000002074696D6572732E6300000000D6 +:10E5A00070B586B0384E65E00198002862DB039CA8 +:10E5B000606910B1201D03F05BFB04A800F0B2F805 +:10E5C000054601980A2855D2DFE800F00505052C1C +:10E5D000324805052C3294F824002A4640F0010008 +:10E5E00084F824000298A169034601442046FFF7FD +:10E5F0003DFF90B3216A2046884794F824004007E5 +:10E6000038D5002000900298A169002342181946CD +:10E61000204604F021FF00BB40F213311BA0FFF79E +:10E6200017FB27E014F8240F20F00100207021E0F0 +:10E6300094F8240040F0010084F824000298A061BE +:10E6400020B940F22B3111A0FFF702FBA0692B4645 +:10E6500041191A462046FFF709FF0BE094F8240001 +:10E66000810703D4204603F0D1FB03E020F0010032 +:10E6700084F82400002201A9306804F047FA002839 +:10E6800092D106B070BD00006000002074696D6515 +:10E6900072732E6300000000F8B50D46064603F0C5 +:10E6A000F5FD684600F03EF80446009810B104F00D +:10E6B00003FEF8BD1148ADB101690968D9B1002563 +:10E6C000311B2A46006803F097FC04F0F5FD002892 +:10E6D000EFD10B494FF080500860BFF34F8FBFF36D +:10E6E0006F8FF8BDA642EBD804F0E6FD2146304618 +:10E6F000FFF71EFFF8BD0125E2E7000060000020E3 +:10E7000004ED00E00648416B096829B1416BC96816 +:10E71000C9684968816270474FF0FF31FAE700002D +:10E720002400002070B5054604F07EFC064E044629 +:10E73000B068844203D200F009F8012000E0002014 +:10E7400028602046B46070BD60000020F8B5184D08 +:10E7500025E0C068C4680668201D03F089FA216AB4 +:10E760002046884794F82400400718D5A069304413 +:10E77000B04206D924616060211DE86803F0EBFA1D +:10E780000DE000200346014600903246204604F08A +:10E7900063FE20B94FF4617106A0FFF759FAE868EB +:10E7A00001680029D5D12969C5E90310F8BD000029 +:10E7B0006000002074696D6572732E6300000000B4 +:10E7C00007484068401C03D0CA2106A0FFF740FA62 +:10E7D000202080F31188BFF34F8FBFF36F8FFEE7C8 +:10E7E00074000020706F72742E630000074CE068A4 +:10E7F000016841B1C0680021D0F80000FFF74CFF6C +:10E80000FFF7CEFEF3E701210020F7E760000020CC +:10E810002DE9F041044603F0C3FA94F9455004F1A0 +:10E82000240610E0A06C20B100212046FFF748FE2E +:10E8300004E0606A48B1304604F0FEFC08B103F021 +:10E840002DFC6D1E6DB2002DECDC4FF0FF3684F810 +:10E85000456003F0C5FA03F0A3FA94F9445004F1BB +:10E86000100709E0206948B1384604F0E5FC08B11A +:10E8700003F014FC6D1E6DB2002DF3DC84F84460CF +:10E88000BDE8F04103F0ACBA2DE9F04105460026A1 +:10E8900003F0FCFC324F386808B9FFF7B9FCF868A0 +:10E8A000054212D18DB1083568070AD005F007007E +:10E8B000C0F108000544680703D0952129A0FFF79F +:10E8C000C7F915B17868854202D904F0F5FC3BE040 +:10E8D0002348103001460C6801E020460C46616870 +:10E8E000A94202D221680029F7D13968B8468C4282 +:10E8F000EBD006682168016060680836401B10286C +:10E900000DD96719780703D0C22116A0FFF7A0F927 +:10E910006068401B786038466560FFF781FD62687B +:10E92000D8F804104046891AC8F80410D8F80830FE +:10E93000994200D28160D8F80C0002430020C4E95B +:10E94000000204F0B9FC0EB903F0F2F9700704D02C +:10E950004FF4817103A0FFF77BF93046BDE8F081E9 +:10E960008C000020686561705F342E630000000039 +:10E970000449086818B10868826C521C82640868EF +:10E98000704700002400002010B5040004D140F2BC +:10E99000E53105A0FFF75CF903F002FAE46903F042 +:10E9A0001FFA204610BD000074696D6572732E63F6 +:10E9B0000000000010B5031F4FF080741C601B1F87 +:10E9C00021F001011960191F024B0B601439403806 +:10E9D0000A6010BDC1E7010000127F2801DD7F2021 +:10E9E00004E06FF07E01884200DC084640B27047C8 +:10E9F0008000B0F5004F02DB47F6FF7003E00349EB +:10EA0000884200DC084600B2704700000180FFFF2A +:10EA10000E4902460020096831F9103093420EDB9E +:10EA200000280BD031F9103001EB40019B1A31F96D +:10EA3000021C511A8B4201DB401EC0B27047401CC1 +:10EA4000C0B24028E8D33F207047000020040020D7 +:10EA50000248417A491C417270470000740100204D +:10EA600070B504461D46A52000F0DEF90246ED1CF7 +:10EA7000ABB2A189A068BDE87040E8F7A1BA2DE962 +:10EA8000F74F91F8019086B0A9F105008A4600F091 +:10EA9000FF0B022639E00AEB06053AF8067095F8F6 +:10EAA0000280B5F803000090781E81B20698E8F75E +:10EAB00033F9009804970590069C681D0027BBF168 +:10EAC000020F0DD0694600F065F894F8500068B167 +:10EAD0001022694604F11C00E5F7EFFCA0B905E03F +:10EAE00007886846394603F0A5F8EEE784F83480D5 +:10EAF0000498E0860598208794F8500020B9678331 +:10EB00009DE80F001C340FC44E4408988642C2DBB7 +:10EB100009B0BDE8F08F00002DE9FF5F4D78834616 +:10EB2000281F90460E46C7B2022411E0301936F86D +:10EB300004A0B0F80290022F14D0001D694600F026 +:10EB400029F86B464A4651465846E8F797FA2C444E +:10EB50004445EBDBBBF80C1004B005A0BDE8F05F4A +:10EB6000E6F7F4B98188684603F064F8E9E7000045 +:10EB70007265706F72745F676174745F73657276CB +:10EB80006963657320666F72202530325820646F88 +:10EB90006E650000102200F00FB8032200F00CB8E0 +:10EBA000062200F009B8072200F006B8082200F09B +:10EBB00003B80622AFF3008030B5002305E0D51A74 +:10EBC000C45C0D445B1C05F8014C9342F7DB30BD7F +:10EBD0001CB5044601A841F63952904701236A4604 +:10EBE00001A92046E5F75AFBBDF90000FFF700FF39 +:10EBF0002080BDF90200FFF7FBFE60801CBD000015 +:10EC000070B51E4D4A426B0C00280EDD002903DD55 +:10EC1000BDE8704000F036B82CDAA94200D11A469F +:10EC200011B200F02FF8404218E01BDAA84201D1DF +:10EC3000184600E0404200B243F6FF74002903DDAD +:10EC400000F020F8201A09E00ADAA94200D11A4699 +:10EC500011B200F017F8A0F57C50FF3800B270BD7B +:10EC6000204670BD002902DD4FF4005070BD01DA6E +:10EC7000034870BD4FF0000070BD00000080FFFF32 +:10EC800000E0FFFF10B50A46904203DBBDE81040EC +:10EC900000F008B80146104600F004F8C0F5005036 +:10ECA00000B210BDCA03884202D14FF480507047B1 +:10ECB00092FBF0F000B240F64521884203DC42F6B8 +:10ECC000A90148430AE0064942F68B4200FB0211C3 +:10ECD0004043044A40F3CF3000FB02100014704759 +:10ECE000B634D3FFD1F3FFFF401804D510F5004030 +:10ECF0000AD5002008E04FF40041884204DBA0F56B +:10ED00000040884200DB481E00B27047C11700EB8C +:10ED10005141C913002800DA491E494200EBC130B5 +:10ED200000B27047818900221820E6F7E3BF08B5DA +:10ED3000C18D0091838D828942F603010820E7F797 +:10ED400036FA08BD818901221820E6F7D3BF2DE9E4 +:10ED5000FF4104468789068F458F03F0E1FA216C55 +:10ED600016228DF80820ADF80960ADF80B50294443 +:10ED7000CDE90010052302AA04213846EDF78CFFE7 +:10ED8000BDE8FF811FB58489018F408F0C228DF86B +:10ED90000820ADF80910ADF80B000020009001909C +:10EDA000052302AA04212046EDF776FF1FBD08B512 +:10EDB000C18D0091838D828942F602110820E7F708 +:10EDC000F6F908BD08B5016C0091838F028F818927 +:10EDD0001220E7F74FFC08BD02490A6860F34512AC +:10EDE0000A6070470000094002490A6860F3041293 +:10EDF0000A6070470000094002490A6860F3000297 +:10EE00000A6070472004094002490A6D60F38A22B3 +:10EE10000A6570470000094002490A6D60F34D32EF +:10EE20000A657047000009400346D01E037022F8AF +:10EE3000021C704710B501240470417042800371B8 +:10EE4000052010BD10B50446581F047023F8041C9B +:10EE500023F8022C10BD000001460148E7F7F3BC7F +:10EE6000900100202DE9F047804686B03548EEF746 +:10EE7000C1F8344F8146643F0026B87B7C6C354630 +:10EE8000BE73012832D0022830D1268841462EA0F8 +:10EE9000E6F760F84FF0370AB8F1000F03D0B8F189 +:10EEA000010F23D116E0032060732648EEF7A4F883 +:10EEB00001B2A18429A0E6F74DF8A07830BBE57037 +:10EEC0002571B9F82A0010B1342020731EE084F8AF +:10EED0000CA01BE004206073A07838B9207908B931 +:10EEE000E07818B1E570257184F80CA0B8F1000F36 +:10EEF0000CD0B8F1010F22D17A7B06B03146BDE8C3 +:10EF0000F047104B9B1FD72001F083B80D4D4FF0F9 +:10EF1000D808AD1F7C7BA81DEEF76EF80746334678 +:10EF200042460D2102A8CDE9004501F0E3FFADF80E +:10EF300013700D2302AA0021042000F0F3FA06B09A +:10EF4000BDE8F087D80100207375636565642065AE +:10EF500076656E742069733A25780A0041444452FC +:10EF60004553535F5245534F4C5554494F4E5F5391 +:10EF7000554345454445442C20696E6465782025F9 +:10EF8000640000003EB50D46044615496846E7F7A3 +:10EF900082FC0BE06846E7F784FC817AA14205D148 +:10EFA00006222946001DE5F788FAA0B16846E7F772 +:10EFB00063FC0028EED1E7F761FD01000DD08C72F3 +:10EFC00028684860A88808810548E7F731FC01F007 +:10EFD00097FA00203EBD55203EBD56203EBD0000A4 +:10EFE000BC0100202DE9F047104C0646DDF82080DA +:10EFF0001068C4F85E009088A4F862001F461546A9 +:10F000008946667304F16400EDF7F8FF04F16400CB +:10F01000EDF7F8FFA7732B4632464946C4F8448003 +:10F02000BDE8F047D62000F0F4BF000074010020D6 +:10F0300030B4034B0124DC73DA6430BCE8F748BB1E +:10F040007401002070B50C4605460D212046E5F7F9 +:10F0500022FA2888A4F80D00A878E07370BD10B5D6 +:10F0600000F052FC002800D0C07B10BD08B500F0B5 +:10F070004BFC002809D00221017600210091427941 +:10F080000188831DDA2000F0AFFF08BD08B500F04D +:10F090003BFC002809D0032101760121009142792F +:10F0A0000188831DDA2000F09FFF08BD10B500F035 +:10F0B0002BFC002804D0817B19B1C17B09B1007EF3 +:10F0C00010BD002010BD000070B500F01DFC040054 +:10F0D00011D0094D0420296A4876207B032806D1E7 +:10F0E000208800F04DFA296A012008762073BDE8D7 +:10F0F000704001F005BA70BD740100202DE9FF4792 +:10F100008946DDE90C8605461F4669461046FFF72D +:10F110004AFD6C46E11D4846FFF745FD8DF80E801F +:10F120008DF80F700020295C225C51403154401C46 +:10F130001028F8DBBDE8FF873FB500240094019458 +:10F14000029403940C6801948988ADF80810116842 +:10F15000CDF80A109188ADF80E1000216C46455C80 +:10F16000625C55405D54491C1029F8DB3FBD00002E +:10F170002DE9FF411D4DA97A01290AD01C4E032912 +:10F180000DD0052919D004B01AA0BDE8F041E5F76B +:10F19000E1BE002000900190029003901BE000244B +:10F1A0006F46E87A04EB001000F0DAF8315D484071 +:10F1B0003855641C102CF4DB0AE00D4A0020694627 +:10F1C000103A335C145C63400B54401C1028F8DB8D +:10F1D000E87A401CE87200F003F90548002269460D +:10F1E0002038FFF725FFBDE8FF81000074010020F3 +:10F1F000BC730020736D5F636D61635F68616E64F3 +:10F200006C655F6165735F656E67696E655F72658A +:10F210006164792063616C6C656420696E2073742D +:10F2200061746520257500002DE9F0413D4D0026F3 +:10F2300088B0A97A0446022909D0042964D0062995 +:10F2400069D008B038A0BDE8F041E5F783BE0146BB +:10F2500010226846E5F7F8F86946102001F0ACFE88 +:10F260002078000605D59DF80F0080F087008DF806 +:10F270000F009DE80F0004AC0FC404A9102001F09A +:10F280009BFE9DF80000000605D59DF81F0080F04C +:10F2900087008DF81F00688A304E08B1010710D032 +:10F2A00000F00F0700240DF11008BC4217DA688A3D +:10F2B00020F00F00204400F053F818F804104840E4 +:10F2C00012E000246F46688A2044103800F048F8A5 +:10F2D000395D48403055641C102CF4DB08E018F808 +:10F2E000040001D180F080003055641C102CDCDB60 +:10F2F000287BE97A401E814201DA032000E00520E4 +:10F30000A87208B0BDE8F081014614481022103000 +:10F31000E5F79AF8ECE70146D5E90E209047AE7282 +:10F32000EFE7000074010020736D5F636D61635F40 +:10F3300068616E646C655F656E6372797074696F25 +:10F340006E5F726573756C742063616C6C656420AC +:10F35000696E20737461746520257500AC7300209C +:10F360000F4910B54A8A904205DB01460DA0E5F72A +:10F37000F1FD002010BD101A401E032802DA0849D2 +:10F3800016310AE0121F904204DA096B084410F8A3 +:10F39000030C10BD0249801A3431085C10BD000016 +:10F3A00074010020736D5F636D61635F6D657373DE +:10F3B0006167655F6765745F627974652E206F753C +:10F3C00074206F6620626F756E64732C20616363B6 +:10F3D0006573732025752C206C656E2025750000E3 +:10F3E0000248817A491C8172704700007401002034 +:10F3F0000348807A08B10020704701207047000060 +:10F40000740100202DE9F0470F4608A91646B1E81F +:10F41000200701461C4610221548E5F715F8154847 +:10F42000E41D00F11E010770A0F80160C1F8008022 +:10F43000A1B2A0F116040E4A61822563C4E90E9AB6 +:10F440000020203AE072106450649064D06401F1AE +:10F450000F00C0F307102073012500B92573227B2C +:10F4600005A0E5F777FDA572BDE8F04701F048B8C3 +:10F470009C7300208A010020736D5F636D61635F80 +:10F4800073746172743A206C656E2025752C20624D +:10F490006C6F636B20636F756E74202575000000C0 +:10F4A000024B5870DA6299707047000074010020B6 +:10F4B00010B5114C0A2804D11078072801D110206A +:10F4C000E071084600F020FA002813D00021817373 +:10F4D000C1730176491E818401214173817800291D +:10F4E00008D0017B002905D1A17809B1242100E0D1 +:10F4F0002321017310BD00007401002070B50C467B +:10F500000546164610211046E4F7C5FF22460C2199 +:10F510003046E7F7F1F82A463046BDE870400E2144 +:10F52000E7F7EAB8FEB506460E481C461546876A58 +:10F5300017B100210420B8470A4968461C31E7F793 +:10F54000AAF908E06846E7F7ACF9476823462A4677 +:10F5500000213046B8476846E7F78EF90028F1D118 +:10F56000FEBD00007401002070B50C460546102158 +:10F570002046E4F790FF2868A0606868E06070BDEE +:10F5800070B5084D0446A88AA0420AD101F0BEFD1C +:10F590004FF6FF70A8822146BDE870400248E5F7AB +:10F5A000D9BC70BD740100207C3D020010B500F094 +:10F5B000ABF9002802D0817B09B1007C10BD00208E +:10F5C00010BD00002DE9F047144604282CD1217805 +:10F5D0001727974E4FF000094FF033084FF0220ADB +:10F5E000302971D006DC05296FD008296ED00E298C +:10F5F000ECD105E18E484FF0010A3E2990F9010057 +:10F6000013D06029E2D191780229DFD1401C03D0C8 +:10F61000F07818B1032002E0052000E001203072EC +:10F6200086F809A000F06CFFFBE0A178012903D067 +:10F63000052938D00A29F7D1E178002978D1401C72 +:10F6400076D0A788384600F05FF90500ECD02F800F +:10F65000A079A870E0796871A91D04F10800FFF78E +:10F66000A8FAA87808B173A100E074A175A0E5F725 +:10F6700071FC85F80E9085F80F9085F818904FF082 +:10F68000FF30A88485F80DA0A87848B1287B002811 +:10F69000CAD1B07808B1242000E023202873C0E04C +:10F6A00085F80C80BDE0B4F8030000F02DF90500EA +:10F6B000BAD0297B69A0E5F74DFC287B2C2806D021 +:10F6C000B4F80D0088B114E05BE07AE026E0142085 +:10F6D0002873306A90F8241001B10121E97390F881 +:10F6E000242064A0E5F736FC9BE0611D00200A5C45 +:10F6F00062B105F11C01601DFFF758FAB4F80D0066 +:10F700006883252028734FF6FF7005E0401C082809 +:10F71000EDDB262028732888B08282E0B4F803004D +:10F7200000F0F2F805007CD06179A9732A7C00E032 +:10F730007BE056A0E5F70EFC297B5FA0E5F70AFC0D +:10F74000A87B00286DD0306A90F8240000B1012019 +:10F75000E873287B162805D0362862D185F80C80FE +:10F76000288824E0A87808B12F735AE0284600F0D2 +:10F770001BFB18B1284600F05BFBF5E785F80CA0F1 +:10F780004FE0B2F8030000F0BFF8040049D0217C3C +:10F790004FA0E5F7DFFB217B47A0E5F7DBFB207BF4 +:10F7A000162807D036283CD184F80C802088FFF733 +:10F7B000E7FE36E0A07808B1277332E084F80CA0A9 +:10F7C0002FE0B4F803502846FFF7DAFE284600F091 +:10F7D0009BF8050025D0B5F9240000280BDBA9789B +:10F7E00039B9297B362904D1A178052901D1EDF752 +:10F7F0001CFCECF757F885F80C90A5F8009010E089 +:10F800003F49B4F803000988884203D1A01D00F0E5 +:10F8100083F806E03B490988884202D1A01D00F028 +:10F82000A1F9BDE8F04700F06BBEBDE8F08700002D +:10F8300074010020736C6176650000006D61737463 +:10F84000657200004E657720736D5F636F6E6E2C7E +:10F8500020726F6C65202573000000004C544B2013 +:10F86000526571756573743A2073746174652025EF +:10F870007500000061757468656E74696361746415 +:10F88000203078257820307825780A00456E63721C +:10F89000797074696F6E2073746174652063686138 +:10F8A0006E67653A2025752C206B65792073697A1F +:10F8B00065202575000000006576656E742068611E +:10F8C0006E646C65722C20737461746520257500FC +:10F8D000456E6372797074696F6E206B6579207202 +:10F8E00065667265736820636F6D706C6574652CF6 +:10F8F000206B65792073697A65202575000000000A +:10F90000E03A0200E83A020010B5EBF72FF80028C1 +:10F9100000D05A3010BD00002DE9FF41884D064649 +:10F920000020E873296CA9B1286469463046FFF7C6 +:10F9300034F90322694605F16100E4F7BEFD28B100 +:10F9400005F16400EDF75EFBBDE8FF810020FFF7E5 +:10F9500089FAF9E7287A022823D0042823D0687A84 +:10F96000052829D0A87A02282FD004282DD00628CF +:10F970002BD0EC6C002CE7D07148227B016A1C2A4A +:10F9800001F193007BD03DDC0F2A4ED025DC0B2A01 +:10F990004BD00D2AD8D163313046FFF7FBF8122047 +:10F9A00078E0684901E0674910393046FFF7F2F81E +:10F9B000BDE8FF41E7F74EBA614930465B31FFF7DA +:10F9C000ECF8BDE8FF41FFF743B869463046FFF762 +:10F9D000E1F86846FFF728FCB6E7112A42D0152A5D +:10F9E000B2D101463046FFF7D5F8217C56A0E5F7A5 +:10F9F000B1FA286A217C933001F0C4FBA078E8B307 +:10FA00002D2047E01E2A7FD0202A7CD02F2A5FD0CD +:10FA1000312A99D101463046FFF7BCF8286A217C8B +:10FA2000933001F0AFFB322034E02088EAF79EFFEC +:10FA3000074669463046FFF7ADF82B6AA07803F118 +:10FA4000350318B107F10902394602E03A4607F1D9 +:10FA500009016846FFF770FB04B02046BDE8F0419D +:10FA600000F0BEBA69463046FFF794F8286A1022C3 +:10FA700069468330E4F721FD38B101E00CE00DE088 +:10FA8000296A04200876012004E0A07808B1132038 +:10FA900000E01420207357E73C20FBE7694630461E +:10FAA000FFF778F80E216846E6F718FE81B2286A5B +:10FAB000A0F8C41028A0FDF7E9F8286A30F8C41FA0 +:10FAC00042885140818025A0FDF7E0F81D20E1E744 +:10FAD00069463046FFF75EF80E216846E6F7FEFD00 +:10FAE00081B2286AA0F8C4101BA0FDF7CFF8286ADD +:10FAF00030F8C42F81884A40428018A0FDF7C6F82C +:10FB00003020C7E700E005E001463046FFF742F845 +:10FB10001F20BFE7E2313046FFF73CF8286AC06992 +:10FB200008B12120B6E7A07808B12220B2E733203F +:10FB30002073208804B0BDE8F041FFF721BD00002C +:10FB4000740100208C7300206B65795F73697A659E +:10FB50002025640A000000007900000065646976D1 +:10FB6000000000002DE9F041414D0626697A032985 +:10FB700013D02C6D002C1FD02946227B096A092A3C +:10FB80005BD02ADC052A38D0072A15D1026841F853 +:10FB9000532F40684860082042E035492A7C58319C +:10FBA000022A0BD00268AA658088A5F85C00087854 +:10FBB00000F03F0008706E72BDE8F0810288A5F881 +:10FBC0005820807885F85A00087800F03F0040F00F +:10FBD0004000087004206872EEE7182A34D01A2A10 +:10FBE000EAD10021E6F77AFD81B2286AA0F8C610B2 +:10FBF00020A0FDF74BF81B2012E00068C0F31307AC +:10FC00001D48874201D34042074400F06BFC286A3C +:10FC10003A460C212530E6F775FDA07810B1292071 +:10FC20002073C9E703202073204601F075FA286A83 +:10FC3000407E0028C0D12673BEE7026841F85B2FE2 +:10FC4000406848600A20EBE7CA31FEF7AFFF286A38 +:10FC5000227C10F8D11F01F0F001491E11440170FF +:10FC6000E27B01F0EF0101EB021101701920D7E7EF +:10FC700074010020646976003F420F0070B5164C95 +:10FC8000072010216071A171E0710025A572257215 +:10FC90006572E57304F16400EDF7B0F92564A573AE +:10FCA0000E48A56460654FF6FF70A08204F16C01F8 +:10FCB00025710B4848600846EAF734FD06210948DB +:10FCC000ECF70CFD04F1740107484860BDE8704092 +:10FCD0000846EBF743BE000074010020A0BB0D00F6 +:10FCE000C5F50100A1000200B1F4010070B50446A1 +:10FCF000002600F0F7FB134D60792A6A82F8400174 +:10FD0000D4F80600C2F841016089A2F845016B6A87 +:10FD100023B125326079A11D98470646A0782C6A48 +:10FD200008B14C3406E0453400F05CF8296A4531EE +:10FD30004871887168786070A6702878E070A8793A +:10FD4000207170BD7401002010B5EAF70FFE002885 +:10FD500004D090F86700022801D0002010BD0120D7 +:10FD600010BD0000044890F90100401C01D00020A3 +:10FD700070470120704700007401002010B5FFF7A4 +:10FD8000C3FD00280CD0074A0221126A5176017B7C +:10FD9000032901D106210173BDE8104000F0B0BB7A +:10FDA00010BD00007401002070B50C4D8178286AE8 +:10FDB0004C3009B1807900E0407900F01DF804462C +:10FDC000286A2246016A0648E5F7C4F8286A006AEC +:10FDD000A04201D1012070BD002070BD740100203F +:10FDE000A83D0200034906200978C90700D0072072 +:10FDF000704700007401002010B50024C10700D036 +:10FE00000324810701D544F00C04400701D544F0D8 +:10FE10001004214602A0E5F79DF8204610BD000021 +:10FE20006B65792073656E743A25780A00000000CE +:10FE3000FEB5064600244A4D601E0290286A90F8DE +:10FE40002000400713D56846EDF7D8F80AE0684669 +:10FE5000EDF7D0F8296A0A30102201F59071E4F725 +:10FE60002CFB90B16846EDF7CDF80028EFD1286A59 +:10FE700000F24110E6F716FC0246286A90F840119D +:10FE800038A0E5F767F84CB120E06846EDF7B2F826 +:10FE900004466846EDF7B0F80290E8E7296A91F861 +:10FEA000400138B902AA01F241110020EDF788F8AB +:10FEB00004000BD1296A02AB01F5907291F8400160 +:10FEC00001F24111EDF70CF8040044D0287928B173 +:10FED000286ACC221021E230E4F7D6FA296A1022EF +:10FEE000E23104F14800E4F7AFFA0027A765296A78 +:10FEF00091F82000C00607D5102201F5987104F191 +:10FF00003400E4F7A1FA6764286A006AC10720D0C8 +:10FF100080071ED5F27B317C1CA0E5F71BF8296A0F +:10FF20001022B1F806016085D1F80801E062D1F82D +:10FF30000C01206301F5887104F11A00E4F784FADA +:10FF4000307C6070F07BA070307E032806D00020EB +:10FF5000E070EBF7A7FC0298B084FEBD0120F7E744 +:10FF600074010020736D2070656572206164647295 +:10FF700020747970652025752C207065657220616C +:10FF8000646472657320257300000000736D3A206D +:10FF900073657420656E6372797074696F6E206921 +:10FFA0006E666F726D6174696F6E20286B65792063 +:10FFB00073697A652025752C2061757468656E7487 +:10FFC00069636174642025752900000010B5FFF78E +:10FFD0009BFC10B1B0F9240010BD4FF0FF3010BDF4 +:10FFE000017B491C0173704710B588B00A9CCDE9AC +:10FFF00000230B460246122102A800F07BFF8DF879 +:020000040002F8 +:100000001340122302AA00210420FFF78BFA08B044 +:1000100010BD00B585B0CDE900230B4602460B218B +:1000200002A800F067FF0B2302AA00210420FFF7BB +:1000300079FA05B000BD10B586B0CDE900230B46B6 +:100040000246089C0F2102A800F054FFCDF813408F +:100050000F2302AA00210420FFF764FA06B010BDA6 +:100060007047000070B50D46FFF74EFC040014D039 +:1000700000F038FA2A46094D0C21286A2530E6F7A7 +:1000800041FB296A03204876207B032801D1062002 +:100090002073BDE8704000F033BA70BD74010020D9 +:1000A0002DE9F0471546042820D0092821D108461B +:1000B000FFF72AFC04001CD02A78052A1BD0217BDC +:1000C00096A0E4F747FF227B0126DFF878824FF005 +:1000D00003094FF0060A2A2A77D018DC232A15D004 +:1000E00010DC022A05D0222A1ED1B9E01078782827 +:1000F0001ED0BDE8F087A07808B1232000E03320AF +:100100002073F6E7242A77D0272A0DD174E00E2732 +:10011000392A32D004DC2B2A7BD0332A04D10BE0DD +:100120003A2A55D03B2A74D0297887A0E4F712FFE9 +:10013000BDE8F04700F0E4B928780B2801D1A07899 +:1001400018B1204600F044F9F2E7607B3725042817 +:1001500011D0032801D0E670EAE7B4F92400ECF7E7 +:1001600045FF40B1408D30B1B4F924107EA0E4F7D2 +:10017000F1FE3420CFE02573DAE728780228E0D1B9 +:10018000D8F82000296840F84C1FA9888180A979F7 +:100190008171204600F01CFF18B1D8F820100876B5 +:1001A00058E0D8F8200090F8240001280ED084F8F8 +:1001B0000C90204600F0B0FFD8F82000407E0028C8 +:1001C000B6D100BF84F80CA0B2E723E00420A2E07F +:1001D00028780328B5D1D8F82010681C8331FEF7A1 +:1001E000D9FC132097E000BFD8F82010681C7331A9 +:1001F000FEF7D0FC27739BE728780128A1D1286857 +:10020000C4F81100A888A4F81500A879E075282082 +:1002100081E021E02878032893D1D8F82010681CC9 +:100220008331FEF7B7FCD8F8200090F824000228AC +:1002300005D162792188A31DD320FFF7EAFED8F803 +:100240002000417E042904D00129BBD184F80C9000 +:100250006EE7067626736BE728780428C4D070E72B +:1002600028780146801F052841D2DFE800F0030C02 +:100270001C283700D8F82010086A40F001000862F6 +:1002800001F5887117E0D8F82010086A40F00200E4 +:100290000862B5F80100A1F8060101F58471E81CB7 +:1002A000FEF784FC26E0D8F82010086A40F004002D +:1002B000086201F59071681CFEF76CFC1AE0D8F832 +:1002C0002010086A40F008000862687881F8400150 +:1002D00001F24111A81CFEF76CFC0BE0D8F82010CD +:1002E000086A40F01000086201F59871E3E72DA05C +:1002F000E4F730FE2046FFF757FD0028A8D020463F +:10030000FFF796FDA07828B1232020732088FFF7FF +:1003100037F90DE7172020730AE70000736D5F704F +:1003200064755F68616E646C65723A2073746174A1 +:10033000652025752C207064752030782530327842 +:100340000000000074010020556E657870656374CC +:1003500065642050445520257520696E20737461B2 +:100360007465202575000000736D3A205365747420 +:10037000696E672075702070726576696F7573207D +:100380006C746B2F656469762F72616E6420666F82 +:10039000722064657669636520696E6465782025DE +:1003A00075000000556E6578706563746564205053 +:1003B000445520257520696E20534D5F5048335FAA +:1003C000524543454956455F4B455953000000008F +:1003D000064A0821126A1176817809B1232100E0CA +:1003E000332101730088FFF7CBB8000074010020AF +:1003F00000487047CC0100200148007C7047000095 +:100400007401002010B504460648E6F773FB064861 +:10041000002C047405D0E7F737FBBDE81040E7F780 +:1004200013BB10BDCC73002074010020064910B529 +:100430004865087C002806D00448E6F75BFBBDE869 +:100440001040E7F721BB10BD74010020CC730020E1 +:10045000024908650248EAF7DBBB0000740100208E +:10046000E83A020001494862704700007401002028 +:1004700010B5FFF749FA040016D0637B227BA17800 +:100480000AA0E4F767FD04206073A07818B1204645 +:1004900000F015FD04E0207B332801D137202073C4 +:1004A000BDE8104000F02CB810BD0000736D5F7205 +:1004B0006571756573745F70616972696E672069D3 +:1004C0006E20726F6C652025752C207374617465C5 +:1004D0002025752069726B207374617475732025F3 +:1004E00075000000054900200246096A0B18401CEF +:1004F00083F825201028F9DB7047000074010020E4 +:100500002DE9F04F8DB0EAF73FF900285AD0F94CA9 +:10051000207A012802D0032808D105E0E07B28B921 +:1005200000216A4601200EE0E07B48B1607A022893 +:1005300012D04FF0010A042812D0062812D124E06C +:100540006A4600210320FEF7D9FFE6F783FCE06A44 +:1005500000226946103085E3FEF77AFA0020E1E2D6 +:10056000E07B38B1A07A01282FD003282DD00528B0 +:1005700031D12AE0DF4869465830FEF763FDFEF7C7 +:1005800067FA00226946DC486CE3DA485830E6F73F +:1005900089F80146D9A0E4F7DDFC84F809A0DB2046 +:1005A0008DF8000006208DF80100A06DCDF8020046 +:1005B000B4F85C00ADF8060008236A460021042068 +:1005C000FEF7B0FF0DB0BDE8F08FE07B012802D050 +:1005D000FEF7CEFDF6E7A07B0026002866D106A830 +:1005E000EAF7EEF907E006A8EAF710FA00F15A0573 +:1005F000687B012807D006A8EAF7E8F90028F2D1BD +:10060000A07B50B152E00095298868790223AA1D89 +:10061000FEF7E8FC02206873F2E7B6484830E6F7D8 +:100620001CF978B9A56CB34829464830E6F752F969 +:100630000096A87A01232A1D0021FEF7D3FC284644 +:10064000E6F716FAA07B88BB3EE0AA486430ECF7D8 +:10065000D1FC0546001DE6F725F802462978ADA035 +:10066000E4F778FC2878617B884206D1A14906220C +:100670005E31281DE3F721FF80B1607B90B1E07B04 +:10068000012819D09B4869465E30FEF7DBFCC4F8B0 +:1006900040A0694605F10A00626CE3E20020FEF723 +:1006A000E1FB09E093486430ECF7ACFC914864301E +:1006B000ECF7A0FC0028C8D18E486430ECF79AFC17 +:1006C00010B90120FEF7CEFB4FF0230B4FF6FF775A +:1006D00006A8EAF775F9A1E006A8EAF797F900F18C +:1006E0005A05287B28281BD004DC242807D025287D +:1006F000F1D16FE034283CD03728ECD182E000966D +:100700000196288802238A4A0621ECF7C5FA20B10F +:1007100028880621ECF76AF880E0272028737DE01E +:100720002846FFF7E3FA206AD5F8111040F8451F74 +:10073000B5F815108180E97D8171284600F048FCEC +:1007400020B1216A087685F80CA009E0284600F05F +:10075000BDFC206A90F82400022808D029202873C4 +:100760002988A182A878002854D072A253E00420DE +:10077000F5E7B5F92400ECF739FC236A8046408D93 +:10078000A3F80601D8F82C10C3F80811D8F83000E7 +:10079000C3F80C01102208F11A0103F58870E3F781 +:1007A00053FE98F80300009098F8023098F8012062 +:1007B000B5F9241062A0E4F7CDFB98F80100287485 +:1007C00098F80200E87398F8030000B10320287637 +:1007D0003520C4E7206AE96940F8CA1F296A4160E8 +:1007E000698B20F8021CC17901F00F01491C2974A2 +:1007F000C079C9B2C0F30012EA735FA0E4F7AAFBA4 +:100800002E20ACE72846FFF771FA284600F05EFC80 +:100810003820A4E767A26AA0E4F79CFBA08AB8424C +:1008200005D106A8EAF7D2F800287FF455AFA08AD0 +:10083000B8423FF4CFAE0621A046EBF795F8F0B1F1 +:10084000B8F81400FFF760F80500F2D0297B69A022 +:10085000E4F780FB287B1B2842D015DC1A2840D205 +:10086000DFE800F03F313F3FEF3FEF3FEF3FEE3F2C +:10087000ED3FEC3FED3FEBEAE93F3FEF3FEF062175 +:10088000A08AEBF7B3FF9DE62E282BD00EDC26289E +:1008900029D006DC1D2827D01F2826D0212820D1CA +:1008A00028E2292822D02D28F9D1F2E135281ED0BE +:1008B00004DC302818D03228F1D103E2382817D0D0 +:1008C0003C28ECD1EDE105208DF81C00D8F8200083 +:1008D000007E8DF81D00A87808B1232095E093E0F4 +:1008E000B1E117E2FBE1D3E02CE135E1D7E096E09E +:1008F000C2E00000740100208C7300204E65772058 +:1009000072616E646F6D20616464726573733A2006 +:1009100025730000646576696365207479706520CD +:1009200025752C20616464723A2025730000000054 +:10093000543D0200726573706F6E64657200000052 +:100940006462206B65792025752C206B6579207396 +:10095000697A652025752C2061757468656E7469E7 +:1009600063617465642025752C20617574686F72ED +:10097000697A656420257500736D3A207265636538 +:1009800069766564206C746B20726571756573742B +:100990002077697468206B65792073697A652025F2 +:1009A000752C2061757468656E7469636174656423 +:1009B00020257500696E69746961746F72000000AA +:1009C000736D3A20636F6E6E656374696F6E20306D +:1009D0007825303478206C6F636B656420736574A0 +:1009E000757020636F6E7465787420617320257351 +:1009F00000000000736D5F72756E3A20737461744D +:100A000065202575000000003320287300960196AC +:100A10002888022307AA0621ECF73EF9EEE1206AB6 +:100A200007A900F58870FEF7B5F836202873206A0C +:100A3000B0F8061106E0EBE054E016E19EE074E049 +:100A4000C6E06BE0F5A0E4F785FA206A002100F526 +:100A50008470E5F747FE0646206A042100F584709D +:100A6000E5F740FE0246206A07A93346B0F80601C2 +:100A7000CDE90001298821E1D8F82020012002F8E1 +:100A8000450F3920287300960196288807233EE0F9 +:100A900085F80CB02988EB48EAF7BAF892E5206AA5 +:100AA000022180F84C10FFF79DF90146206A237857 +:100AB00000F14C024530D37043790B40537180797B +:100AC0000723084090712A202873009601962888F1 +:100AD0000621ECF7E1F8284600F0EEFA284600F08F +:100AE0001BFB6FE504208DF81C00D8F820000DF1E9 +:100AF0001D015330FEF74EF8A87808B12C2000E015 +:100B00003B202873009601962888112307AA062106 +:100B1000ECF7C2F8284600F0CFFA75E12846FFF757 +:100B20005FFA2846FFF794FC4CE598F80F0001287F +:100B3000F3D02846FFF754FA216A2A460846353191 +:100B400025308FE098F80F000028E6D1206A07AA28 +:100B50000021B0F8C60008E098F80F000028DCD1AA +:100B6000206A07AA0121B0F8C600FEF7C7FC284694 +:100B7000FFF736FA2A4607A9E06A73E098F80F00F3 +:100B80000128CAD02888E9F7F1FEA97802AA21B184 +:100B9000C17BCDE90012037A03E0017ACDE90012AE +:100BA000C37BD8F8200000F14C02D11F7330FEF750 +:100BB000A5FA2846FFF714FAD8F82010C146A33149 +:100BC00002A8FDF7E7FF2A4602A9D9F820001BE09A +:100BD00098F80F000128A0D02888E9F7C7FEA97867 +:100BE00002AA21B1C17BCDE90012037A03E0017AA8 +:100BF000CDE90012C37BD8F8200000F14C02D11FD0 +:100C00005330FEF77BFA16E02530FEF711FAFBE0D1 +:100C100098F80F0001287DD0A87802AA0028D8F8FB +:100C2000200003D000F17301533002E000F15301C2 +:100C3000733000F031F92846FFF7D2F92A4602A9AD +:100C4000D8F82000E0E798F80F00012862D0206A69 +:100C500002A9CA30FEF788FC2846FFF7C1F92A46E8 +:100C600002A97948FEF7E4F9ACE403208DF81C00F2 +:100C7000206A0DF11D016330FDF78CFFA87808B1E3 +:100C80002B2000E03A202873009601962888112333 +:100C900089E0206A07A99330FDF77CFF16202873AE +:100CA00017E0206A07A99330FDF774FF1620287318 +:100CB00007A8CDE90060298800231A466348E9F7B0 +:100CC000A7FF7FE4206A07A99330FDF763FF85F84B +:100CD0000CB0298807AA5E48E9F79AFF72E498F8F1 +:100CE0000F00012816D0206AB0F8C81059A0E4F708 +:100CF00031F9ACE7D8F82000C16961A0E4F72AF91E +:100D0000D8F82000C169CA070ED0216AC96921F04C +:100D1000010100E078E0C16106218DF81C100DF1A1 +:100D20001D0100F193005BE08A0715D5216AC969AE +:100D300021F00201C16107218DF81C10B0F8C81024 +:100D4000ADF81D100DF11F01CA30FDF72FFF009601 +:100D5000019628880B2326E04A070CD5216AC96929 +:100D600021F00401C16108208DF81C0036480DF106 +:100D70001D01103034E00A071DD5216AC96921F030 +:100D80000801C16109208DF81C00E06A90F8261066 +:100D90008DF81D100DF11E012030FDF70AFF0096A1 +:100DA00001962888082307AA0621EBF775FF284635 +:100DB00000F082F906E4C90615D50A218DF81C1049 +:100DC000216AC96921F01001C161217921B1CC22C8 +:100DD0001021E230E3F758FB206A0DF11D01E230EB +:100DE000FDF7D8FE50E7A878A0B12846FEF7DCFF53 +:100DF00040B12846FFF71CF885F80CB02888FEF7AC +:100E0000BFFB01E022202873B8F81400B8423FF479 +:100E10005FAC38E533202873F0E70000736D3A20AB +:100E20006863695F6C655F73746172745F656E633C +:100E300072797074696F6E206564697620307825E8 +:100E400030347800003B02007C730020F03A02004E +:100E5000F83A02004C544B20526571756573743A30 +:100E600020726563616C63756C6174696E6720776D +:100E7000697468206564697620307825303478009C +:100E80006B657920746F206469737472696275741C +:100E9000653A25780A0000008B689360C968D160C4 +:100EA00081681160C0685060704710B5FEF72CFD76 +:100EB000002803D0BDE8104000F001B810BD017B50 +:100EC00009B1232903D124210173FFF719BB70470E +:100ED0000149487170470000740100200149087001 +:100EE0007047000074010020014AD0719171704771 +:100EF0007401002030B4891EDDE9024502704170A2 +:100F000043800471411D284630BCFDF752BE0000ED +:100F100010B5174C0021206A80F824104721095C85 +:100F200031B14E21095C19B1042180F8241010BDA3 +:100F3000FFF7D8FA206A00F14501CA78520703D4B6 +:100F40004F22125C5207F2D549780429EFD84D227E +:100F5000125C042AEBD8074C02EB820323445B5C4F +:100F600080F82430BDE8104003A0E3F7F3BF000091 +:100F700074010020563D0200736D5F7365747570D7 +:100F80005F746B3A206D617374657220696F2063C2 +:100F900061703A2025752C20736C61766520696F2D +:100FA000206361703A202575202D3E206D657468A0 +:100FB0006F6420257500000010B50022401E06D485 +:100FC0000B5C42EA4302DC090A542246F6E710BDF4 +:100FD00070B5254C05468178206A21B100F14501A4 +:100FE00090F84B2003E090F8512000F14C01097972 +:100FF000102923D8072921D3E379994202DBA37969 +:10100000994200DB19462974C1B1002101621046E2 +:10101000FEF7F2FE216AC861FFF77AFF206A90F8B6 +:10102000241012A0E3F796FF206A90F82400052808 +:1010300017D2DFE800F0050909090D00062070BD90 +:10104000617901F0010106E06179C1F3800102E0FC +:101050006179C1F3400121B100B10120E8730020A2 +:1010600070BD032070BD000074010020534D503A44 +:101070002067656E65726174696F6E206D65746856 +:101080006F64202575000000014610220148E3F737 +:10109000DBB900008C730020014901200871704702 +:1010A0007401002010B5022101730088FEF768FA70 +:1010B000BDE81040FFF724BA10B5044600F026F84A +:1010C0002046BDE8104000F001B8000070B50D4C9E +:1010D0000546206A0561E5F70DFD2946206AE5F71A +:1010E0003DFD2A460849206AE5F73AFD47F23052AD +:1010F00040F28121206AE5F71BFD206ABDE87040BF +:10110000E5F7E8BC74010020A51002000148006A60 +:10111000E5F7F0BC7401002038B5044618480021FA +:10112000006A00F12502417690F824500121042D37 +:1011300016D2DFE805F01A021604A3782BB1417627 +:10114000A31D62792188D42014E00C211046E5F714 +:10115000C9FA009062792188A31DD220FEF76BFFA7 +:1011600038BDA378002BF0D1E9E741766279218878 +:10117000A31DD02001B0BDE83040FEF74ABF0000FB +:1011800074010020002203E0C1F10F03491CC25486 +:101190001029F9DB7047000070B50F49012208687B +:1011A00062F3020008600D4D0D4C0A1520462968B7 +:1011B000E3F74AF92868A0F54051CC390BD16968AA +:1011C000002908D04FF6FF7202E08B782354C91C27 +:1011D00008889042F9D170BD040409401004002031 +:1011E00000000A40FCB500250C4602462B4610784C +:1011F000571CFCF755FC06463878FCF751FC002ECE +:101200001BDB002819DB50EA061016D4921CE054B0 +:10121000052B08D012F8010B3A280BD02D2809D045 +:1012200020280AD106E000982060BDF804000125BE +:10123000A08002E05B1C062BD9DB2846FCBD10B564 +:101240000622E3F73AF908B1002010BD012010BDD5 +:1012500001480068704700004C04002002494A68B9 +:1012600002600989818070474C0400200248018A8D +:10127000016000F015BA00002C04002070B5284869 +:10128000D0F80413274C627D002A47D0E368D0F8D9 +:101290008050D9439D4211D0234B5D68C5F303159F +:1012A000022DFAD1C0F88010416D8906FCD5022AC2 +:1012B0000FD0032A23D0042A21D114E0C0F88010D3 +:1012C000032A01D0042A29D1BDE870400020E5F7A7 +:1012D0007FBA1648816821F480118160816841F4E9 +:1012E000801181600BE0D0F80C13114802691144A1 +:1012F00021F07F424FF0E0218A6180680861F4F7B5 +:101300006FFE000D40EA01302168814206D2218A39 +:1013100008442060BDE8704000F0C2B970BD000014 +:10132000000009402C040020000004400000074099 +:10133000A87800202DE9F0475D4CC8274FF0000841 +:101340005C4D064684F81580A4F10809022838D3BC +:10135000E07CB0B3207DA0BBA07C90BBD5F814038B +:10136000C0072ED100F0D4F8032E01D8022000E0EF +:1013700003206075192E0AD94F4802683AB14168B6 +:101380000120904718B104206075D9F8047006EB6D +:101390004600C0EBC610C7EBC000A16800F0D2F851 +:1013A00005F54075401EA860686820F440706860CC +:1013B000617D286861F302002860A5F54075E5F7B6 +:1013C000BFF93E4E306B40F020003063607D042852 +:1013D0001BD0C6F88C8088B1D5F88010A246C943CE +:1013E000E160C5F88010042813D238B105F54175C5 +:1013F00033486861286840F001002860BFF34F8FD0 +:1014000030BFBFF36F8FBDE8F0872E49C6F88C1050 +:10141000E2E706F5B276306840F001003060D9F8B6 +:101420000000C5F81803284F3968DFF88C90DFF802 +:10143000988009F1080908F11808C9F80010D8F8CF +:1014400000104FF0E024C9F804102169C9F8081011 +:101450006169C9F80C10A169C9F81010E2F790FE93 +:10146000306820F001003060D5F88010DAF80C0008 +:101470008142C8D0D9F800103960D9F80420C8F8E2 +:101480000020D9F8081021F001012161D9F80C00E1 +:101490006061A9F11000D0E90021002090470020F0 +:1014A000E3F7C8FCBDE8F0470120E3F7C3BC000048 +:1014B0002C04002000000940A07800200000044017 +:1014C00000FF6000C0FF3F0008ED00E010B50446DB +:1014D000E5F78EF9094900228A7458B104EB4401FA +:1014E000C1EBC411B0EBC10F06D24FF47A71B0FB5F +:1014F000F1F010BD01208874204610BD2C0400209E +:10150000024902684A608088088170474C040020C4 +:1015100010B50A4C0A48616811B1C0F8101310BD2B +:10152000D0F810230023581E01466260E2F748FFFE +:10153000000C40EA0140A06010BD00002C04002017 +:101540000000094010B5A0FB0134002202FB01415C +:1015500000FB0210190100D5401C10BD0148406875 +:10156000704700002C0400200149C8747047000037 +:101570002C04002010B500F093F80548D0F814139F +:10158000C907FBD1FFF7C4FF0248406810BD000047 +:10159000000009402C040020014908827047000027 +:1015A0002C040020034B43F8301003EBC0004260D2 +:1015B00070470000987800202DE9F04116460D464E +:1015C0000746B0F54E7F61D9314C00BFD4F8140303 +:1015D000C007FBD1FFF79CFFE3F734FA04F5407432 +:1015E000A760606820F440706060206820F0070009 +:1015F000001D206027480068A061274BA4F54074B7 +:1016000086B3304600262A18DF02DFF890C0521E4B +:1016100030464FF0010E00BF3CF810103944A9428B +:1016200005D9BA4203D30EFA00F73743FEB2401C85 +:10163000C0B20F460528EFD3186B40F020001863A6 +:1016400050330020D863988F66F3CF2098871F20EF +:10165000D98FB04360F3CF21D987D88F40F4F86099 +:10166000D88704E0FFE7186B20F020001863D4F857 +:10167000040340F00100C4F80403BFF34F8F30BFF0 +:10168000BFF36F8FBDE8F041E3F7E6B9BDE8F08145 +:10169000000009402404002000000440CC3E020069 +:1016A0000749002048600748D0F81413C90705D13E +:1016B000D0F8141341F00101C0F814137047000072 +:1016C0002C0400200000094018484168C1F30311B0 +:1016D0000229FAD1416E5C2262F3D0114166016D9C +:1016E000532262F31A410165016D21F0F0012031AE +:1016F0000165016D21F4706101F500710165016DF5 +:1017000021F4704101F580510165416D21F0FF0127 +:10171000891C4165416841F400014160016B41F061 +:10172000200101630021C0F88C10704700000440C4 +:10173000014AC2E9000170471C0000207FB5144631 +:101740000B4A0D46064607CA8DE80700E3F7ACFBD7 +:101750008DF80C608DF80D508DF80E40054C019001 +:101760000323646803AA09216846A0477FBD0000DF +:10177000203502001C0000201FB5084A044607CA95 +:101780008DE80700E3F790FB0394054C01900423D8 +:10179000646803AA09216846A0471FBD2C350200D2 +:1017A0001C000020FEB514460B4A0D46064607CA2B +:1017B0008DE80700E21CADF80220E3F775FB01900D +:1017C000ADF809608DF80B402346044C2A460C21E5 +:1017D00064686846A047FEBD383502001C00002042 +:1017E000FEB514460B4A0D46064607CA8DE80700AB +:1017F000A21CADF80220E3F757FB8DF809608DF8C5 +:101800000A402346044C01902A4664680B2168462E +:10181000A047FEBD443502001C0000203EB5074D28 +:101820002C68002C08D0CDE90002ADF80810ADF806 +:101830000A3068466968A0473EBD0000E004002009 +:101840003EB5094A0C46054607CA8DE80700ADF8C3 +:101850000240E3F729FB2346044C01902A466468C2 +:1018600009216846A0473EBD5C3502001C000020EF +:101870002DE9FE4316460E4A0D46074607CA0A9C46 +:101880008DE80700601C9846ADF80200E3F70CFBFA +:101890002346084C8DF8087066F35F0501908DF8BB +:1018A0000950646842460A216846A047BDE8FE83A5 +:1018B000503502001C00002070B515460E46044647 +:1018C000FCF73CF9401E80B2854208D22046E7F77B +:1018D00047F82046BDE870400021E5F79BBB608FCC +:1018E00028446087267070BD70B50C46C18D0546D2 +:1018F000A14201D8E5F710FA21462846BDE870401C +:10190000052200F011B870B515460E46044600F0E9 +:1019100007FD618F08446087204600F001FD08B193 +:10192000267070BD257070BD10B50446C08D88420C +:1019300008D82046E7F714F82046BDE810400021FB +:10194000E5F768BB491CA185227010BD2DE9F04761 +:10195000824619488946014602701D4614460027F2 +:101960005046EBF7D5FBF0B9781EBDE8F087A888A4 +:10197000D5F80080083586B2B44201D3012000E0DA +:1019800000208D220DA1E4F72FF8B44201D272B6E7 +:10199000FEE73346424639460748EBF727FDA01BD2 +:1019A00084B2B81987B2002CE1D1034A49465046A7 +:1019B000EBF78EFC0020D8E774040020636F6E7490 +:1019C000726F6C6C65727461736B2E630000000043 +:1019D0000249096831F91000704700002004002016 +:1019E00071B101290FD0A0F5BC706FF01A0101EBA5 +:1019F000E000091101EBE000002807DB80B270472E +:101A00005038C010F8E72C388010F5E700207047F8 +:101A100061B101290ED0C000012A0FD0C00000F52D +:101A2000AC7000BF00F5BC7080B27047502101EB74 +:101A3000C000F9E72C2101EB8000F5E740005630AB +:101A4000F0E7C0000C3880B2C8400830C0B2704720 +:101A50002DE9F05F81465006050E9B463C20164658 +:101A60000C460023DDF82C800BE000BF31F9132079 +:101A7000002A00DA5242B2FA82F2824200D21046C2 +:101A80005B1CAB42F2DB12280AD31138002205E0BE +:101A900031F81230834021F81230521CAA42F7DB91 +:101AA0004848407890B100200CE000BF34F8201086 +:101AB0000A1209EB40010A7004EB800252881212EC +:101AC0004A70401CB042F1DBBDE8F09F0846082296 +:101AD0000121E5F7F1FAFDF719F90746B4F902100B +:101AE000B4F90000FDF78CF8404201B20020FDF788 +:101AF000FBF8824601462046FDF76AF80125394683 +:101B00005046FDF7F1F8824604EB85005146FDF79B +:101B10005FF86D1C082DF2DB39460846FDF7E4F846 +:101B20000746BBF1020F10D139460846FDF7DCF835 +:101B300007460AE039465046FDF7D6F8824604EBE0 +:101B400085005146FDF744F86D1CB542F2DBB8F153 +:101B5000000022DD00270546042800DA450005F1D3 +:101B600008018E4219DBF21F294604F11C00E5F73B +:101B7000A3FA90FBF5F0FDF7C9F8804608250AE0C6 +:101B800041463846FDF7B0F8074604EB8500394674 +:101B9000FDF71EF86D1CB542F2DB00220FE000BF1E +:101BA00034F92200FCF718FF09EB4203187004EB2C +:101BB0008200B0F90200FCF70FFF5870521CB242CD +:101BC000EEDB81E7F401002038B5049C00940C465C +:101BD0000146204642F60544A04738BD10B58EB0F8 +:101BE000017B0DF1280CC47B837B427BACE81E009B +:101BF000017A0DF1180CC47A837A427AACE81E009F +:101C000001790DF1080CC47983794279ACE81E00A2 +:101C1000C2788178CDE900124378027803490448FC +:101C2000E3F774F90EB0024810BD00002837020037 +:101C30002469002070B50C46054610220449E2F7DD +:101C400003FC22462846BDE870400021E4F75ABD57 +:101C50001837020010B50C220449001DE2F72DFCD4 +:101C600008B1002010BD012010BD00001C3702008B +:101C7000D0E9013201699A60D0E901235A604A68CB +:101C8000824201D182684A60002202610868401ED7 +:101C9000086008687047000010B5040004D140F2E5 +:101CA0008A7105A0FBF7D4FF00F07AF8A46B00F06E +:101CB00097F8204610BD000071756575652E6300AC +:101CC00010B5040004D140F2AC7102A0FBF7C0FFD4 +:101CD000A06B10BD71756575652E630010B50400AD +:101CE00004D140F29B7106A0FBF7B2FF00F058F858 +:101CF000D4E90E10441A00F073F8204610BD00001D +:101D000071756575652E6300034B036003F1540024 +:101D1000086080201060704760050020034B03605E +:101D200003F154000860802010607047B407002061 +:101D3000012200210720E9F737BC00F108014FF02C +:101D4000FF32C0E90112C1600161002101607047EA +:101D500000210161704730B50B685A1C02D000F1B8 +:101D6000080202E0026904E02246546825689D42A8 +:101D7000FAD953684B6099608A60516008610168C4 +:101D8000491C016030BD42684A6093688B6093686B +:101D90005960916008610168491C0160704700004A +:101DA000202080F31188BFF34F8FBFF36F8F084956 +:101DB0004868401C4860012809D10648006810F0B6 +:101DC000FF0F04D04FF4B37103A0FBF741BF70477E +:101DD0007400002004ED00E0706F72742E63000048 +:101DE00010B5074C606820B940F26D1105A0FBF7F3 +:101DF0002FFF6068401E606001D180F3118810BD24 +:101E000074000020706F72742E63000070B500289B +:101E100028D0154DA0F108046068E968084204D193 +:101E20004FF48B7111A0FBF713FF206820B140F233 +:101E300017110EA0FBF70CFF6168E868014211D092 +:101E40002268002A0ED18143616000F01FFA6068A9 +:101E50006968084468602046FCF7E2FABDE8704013 +:101E600001F02ABA70BD00008C0000206865617026 +:101E70005F342E630000000007482021816007497D +:101E8000C160002101614FF0E020016181611F21EB +:101E9000416103210161704774000020FFFF0700CA +:101EA0002DE9F041334E0546F068854200D90546DC +:101EB0004FF0E024206920F001002061A169B268A0 +:101EC000681E02FB00173069874200D93F1A72B6BC +:101ED000BFF34F8FBFF36F8FE5F75AF858B36761C1 +:101EE0004FF00008C4F81880206940F0010020611C +:101EF0002846FFF71FFA4046FFF7C0F962B6BFF366 +:101F00004F8FBFF36F8F72B6BFF34F8FBFF36F8FDB +:101F1000022020612069C00314D5A069B168381A75 +:101F2000081A3269401E904201D3884200D9481EE7 +:101F30006061681E10E0A0696061206940F00100E6 +:101F4000206111E0B168A0694D432A1AB2FBF1F09B +:101F5000431C4B43991A6161C4F81880216941F010 +:101F60000101216100F07AF9B068401E606162B63B +:101F7000BDE8F0817400002010B5E2F7FDF80F4CC9 +:101F800010280CD34FF0E021084490F8F00321789A +:101F9000884204D240F2A52109A0FBF759FE0A4865 +:101FA0000068616900F4E060884206D9BDE810402D +:101FB00040F2B52102A0FBF74BBE10BD740000201B +:101FC000706F72742E6300000CED00E010B5040019 +:101FD00004D140F2B77106A0FBF73AFE94F8460030 +:101FE000002804D12046BDE81040FFF70FBF10BD08 +:101FF00071756575652E630070B515460E4604460D +:10200000FFF7CEFE94F944104FF00000491C01D1B7 +:1020100084F8440094F94510491C01D184F8450026 +:10202000FFF7DEFEA06B28B92A46314604F12400F2 +:1020300000F056F82046BDE87040FCF7E9BB000010 +:1020400010B5040011D00D48006B20B140F23C5196 +:102050000BA0FBF7FDFD00F019F900212046FBF76E +:1020600079FF01F029F9002807D107494FF0805086 +:102070000860BFF34F8FBFF36F8F10BD24000020A7 +:102080007461736B732E630004ED00E002490A6A09 +:102090000260C968416070472400002001490120A6 +:1020A000C86170472400002070B50D46040004D1BB +:1020B00040F6CE3107A0FBF7CBFD0848016820466B +:1020C0001831FFF748FE2846BDE870400121FBF7B4 +:1020D00041BF00007461736B732E63002400002005 +:1020E00070B514460D46060004D140F6F93109A03A +:1020F000FBF7AEFD0948016830461831FFF743FE93 +:102100000CB14FF0FF3521462846BDE87040FBF783 +:1021100021BF00007461736B732E630024000020E4 +:1021200070B50D46040047D0A06C20B94FF4815122 +:1021300022A0FBF78DFD606CA84200D30546E06A43 +:10214000A84239D0A06C012836D11E4E3068844296 +:1021500004D141F23B0119A0FBF77AFDE06AE56288 +:10216000A169002902DBC5F10F01A161164D00EB49 +:102170008000616905EB800081421DD1201DFFF7C1 +:1021800077FD012150B9E06A00EB800255F822206A +:1021900022B9326901FA00F082433261E06A3269A1 +:1021A00081401143316100EB800005EB8000211D6F +:1021B000BDE87040FFF7E7BD70BD00007461736B50 +:1021C000732E630024000020080A002030B587B079 +:1021D0000024039405AA04A903A80494FFF794FD1E +:1021E000DDE903010094CDE90110002315A1174892 +:1021F000059A00F0CDFE164D0028E8621FD001F0D0 +:10220000F5F8012809D0401C19D107B04FF402613C +:10221000BDE830400FA0FBF71BBD202080F31188E4 +:10222000BFF34F8FBFF36F8F4FF0FF30A8620120D5 +:102230006861EC6007B0BDE8304000F083B807B0DB +:1022400030BD000049444C45000000005DE2010043 +:10225000240000207461736B732E630070B5084C0A +:102260000546E068A16A2844884204D940F6152151 +:1022700004A0FBF7EDFCE0682844E06070BD0000BE +:10228000240000207461736B732E63000248016B9D +:10229000491C0163704700002400002070B5134CF6 +:1022A000206B10B10120E06170BD0020E061206969 +:1022B0000F4EB0FA80F0C0F11F0000EB800556F819 +:1022C000250020B940F6B7310AA0FBF7C1FC06EBA8 +:1022D000850000F10802416849684160914201D1DE +:1022E00049684160C868206070BD0000240000207B +:1022F000080A00207461736B732E630080B2020AB7 +:10230000C3B2891CC8B21946FFF718BA401E042888 +:1023100004D20122196882401143196000207047DD +:1023200010B50446FBF70AFC401F618FA28F80B2F4 +:10233000914201D3002010BD511A89B28842FAD9C6 +:10234000084610BD7CB5294D28780190FF202870E3 +:1023500028788DF800009DF800009DF8001000F02E +:10236000E000884204D04FF48A7121A0FBF770FC92 +:102370009DF80000204C00F02000207007206061D4 +:1023800008E000BF9DF80010A0F101004FEA4101F4 +:102390008DF800109DF800100906F3D46061042840 +:1023A0000CD040F2271112A0FBF752FC6069042800 +:1023B00004D04FF498710EA0FBF74AFC207D000278 +:1023C00000F4E0606061019828700C48016841F4F5 +:1023D00060010160016841F060410160FFF74CFD60 +:1023E00000206060E1F792FE00207CBD00E400E088 +:1023F000706F72742E6300007400002020ED00E006 +:1024000070B50D460446FFF7CBFCA06C08B9A06B75 +:1024100008B1002401E0A5640124FFF7E1FC204697 +:1024200070BD000070B50C46050004D140F2D52106 +:1024300009A0FBF70DFCAC4204D940F2D62106A05E +:10244000FBF706FC02220021284600F047F800288E +:1024500000D0846370BD000071756575652E6300E2 +:10246000F8B516460C46050004D140F2B9210BA080 +:10247000FBF7EEFBAC4204D940F2BA2107A0FBF710 +:10248000E7FB02200022009033461146284600F068 +:102490004BF8002800D08463F8BD000071756575A5 +:1024A000652E630010B502460021012000F016F8E9 +:1024B0000446FBF71FFF204610BD38B50B4600222F +:1024C00000901146012000F02FF80446FBF712FFA0 +:1024D000204638BD00220421AFF30080F8B517462E +:1024E0000E46050004D14FF4BB710DA0FBF7B0FB05 +:1024F0009EB105FB06F04C30FCF7C6F904000AD08B +:10250000002084F8460004F14C023B463146284640 +:102510000094FBF7FAFE2046F8BD0020EBE7000030 +:1025200071756575652E63002DE9F8431C46DDF86D +:10253000208016460D46070004D14FF49D7112A06D +:10254000FBF786FB24B94FF49F710FA0FBF780FBCC +:102550001EB145B94FF4A17102E025B140F243111B +:1025600009A0FBF775FB4C2000904CB1012084F8CA +:10257000460043463246294638460094FBF7C5FEDE +:102580002046BDE8F883000071756575652E63000F +:1025900070B50D46040004D140F203111CA0FBF7F6 +:1025A00057FBFFF7FDFBD4E90F20216802FB001168 +:1025B000A1600021A163216861600A46E06B216C83 +:1025C000401E00FB0121E16004F144014FF0FF30A7 +:1025D0000870487004F1100055B1FFF7AEFB04F12C +:1025E0002400FFF7AAFB00BFFFF7FAFB012070BD34 +:1025F00021690029F8D000F01FFE0028F4D0064918 +:102600004FF080500860BFF34F8FBFF36F8FEBE741 +:1026100071756575652E630004ED00E02DE9FF47D7 +:1026200082B01D468A464FF00008040004D140F2F3 +:10263000F12152A0FBF70CFBBAF1000F06D1206C80 +:1026400020B140F2F2214DA0FBF702FB022D07D191 +:10265000E06B012804D040F2F32148A0FBF7F8FA20 +:1026600000F0D4FC30B9049820B140F2F62143A028 +:10267000FBF7EEFA434F4FF000094FF0805600BFD2 +:10268000FFF78EFBA06BE16B884207D3022D05D0CC +:10269000049840B3B8F1000F28D02CE0D4F838806B +:1026A0002A4651462046FBF72CFDA16C49B1022D6C +:1026B00002D1B8F1000F10D129462046FBF700FFE8 +:1026C00005E0616A19B104F1240000F0B5FD20B104 +:1026D0003E60BFF34F8FBFF36F8FFFF781FB012089 +:1026E00006B0BDE8F087FFF77BFB22E06846FFF706 +:1026F000CDFC4FF00108FFF773FBFFF7C7FDFFF7B5 +:102700004FFB94F94400401C01D184F8449094F9A3 +:102710004500401C01D184F84590FFF761FB04A9F6 +:10272000684600F0CFFB30B12046FCF771F800F0AE +:10273000C3FD0020D4E7FFF733FBA06BE16B8842B9 +:1027400013D1FFF74DFB04F110000499FFF7ACFC27 +:102750002046FCF75DF800F0AFFD002890D13E6008 +:10276000BFF34F8FBFF36F8F8AE7FFF739FB204628 +:10277000FCF74EF800F0A0FD82E70000717565756A +:10278000652E630004ED00E02DE9F04798461746FA +:102790008946040004D140F2C33129A0FBF758FA5E +:1027A000B9F1000F06D1206C20B14FF4717124A053 +:1027B000FBF74EFAB8F1020F07D1E06B012804D005 +:1027C00040F2C5311EA0FBF743FAFFF7D5FB2020EE +:1027D000EFF3118680F31188BFF34F8FBFF36F8F34 +:1027E000A06BE16B884207D3B8F1020F04D0002040 +:1027F00086F31188BDE8F08794F945504246494672 +:102800002046FBF77EFC681C04D06D1C84F8455004 +:102810000120EDE7A06C012520B141462046FBF7E1 +:102820004FFE06E0606A0028F2D004F1240000F0B8 +:1028300003FD0028ECD0002FEAD03D60E8E700005F +:1028400071756575652E63002DE9F0410E46040033 +:1028500004D14FF48C6123A0FBF7FAF9206C20B16E +:1028600040F264411FA0FBF7F3F9206830B9A0687B +:1028700020B140F269411BA0FBF7EAF9FFF77CFBAE +:102880002020EFF3118580F31188BFF34F8FBFF342 +:102890006F8FA16BE06B88421FD994F94500491CEA +:1028A000A163411C04D0401C84F84500012015E0C0 +:1028B000A06C012720B100212046FBF701FE06E0B5 +:1028C000606A0028F2D004F1240000F0B5FC002872 +:1028D000ECD0002EEAD03760E8E7002085F31188BD +:1028E000BDE8F08171756575652E630010B5040053 +:1028F00004D140F259210BA0FBF7AAF900F080FBAC +:10290000A16888420BD1E068401EE06005D1002339 +:102910001A4619462046FFF781FE012010BD00200F +:1029200010BD000071756575652E630010B504005B +:1029300004D140F6091104A0FBF78AF9A06B08B195 +:10294000002010BD012010BD71756575652E6300F6 +:1029500010B5040004D140F6311105A0FBF778F959 +:10296000A06BE16B884201D1012010BD002010BD99 +:1029700071756575652E63002DE9F743002582B0FA +:102980008946040004D14FF4CD6142A0FBF760F901 +:10299000B9F1000F06D1206C20B140F26C613DA06E +:1029A000FBF756F900F032FB30B9049820B140F241 +:1029B000716138A0FBF74CF9384F4FF000084FF029 +:1029C000805600BFFFF7ECF9A06BB8B1494620462E +:1029D000E568FBF783FBE560606A48B104F1240019 +:1029E00000F02AFC20B13E60BFF34F8FBFF36F8F22 +:1029F000FFF7F6F9012005B0BDE8F083049808B1AF +:102A00001DB106E0FFF7ECF927E06846FFF73EFB53 +:102A10000125FFF7E5F9FFF739FCFFF7C1F994F954 +:102A20004400401C01D184F8448094F94500401CC6 +:102A300001D184F84580FFF7D3F904A9684600F076 +:102A400041FA002820460AD0FBF7E2FE00F034FCF1 +:102A50002046FBF727FD0028B4D00020CBE7FBF78A +:102A600021FD88B104F124000499FFF71DFB2046E5 +:102A7000FBF7CEFE00F020FC0028A3D13E60BFF3A0 +:102A80004F8FBFF36F8F9DE72046FBF7C1FE00F02D +:102A900013FC97E771756575652E630004ED00E022 +:102AA0002DE9F0410E46040004D140F2577115A003 +:102AB000FBF7CEF836B9206C30B14FF4EB6111A0C2 +:102AC000FBF7C6F8206C20B940F259710DA0FBF756 +:102AD000BFF8FFF751FA2020EFF3118580F311883A +:102AE000BFF34F8FBFF36F8FA06B30B131462046DD +:102AF000E768FBF7F3FA0120E76085F31188BDE88A +:102B0000F081000071756575652E63002DE9F7474A +:102B1000002683B08A46040004D14FF4A06143A08C +:102B2000FBF796F8BAF1000F06D1206C20B140F205 +:102B300004513EA0FBF78CF800F068FA30B9059814 +:102B400020B140F2095139A0FBF782F84FF000099B +:102B50004FF08057DFF8DC80FFF722F9A56BC5B195 +:102B600051462046FBF7BAFA6D1EA563206950B1A5 +:102B700004F1100000F060FB28B1C8F80070BFF34A +:102B80004F8FBFF36F8FFFF72BF9012006B0BDE821 +:102B9000F087059808B11EB106E0FFF721F927E09C +:102BA0006846FFF773FA0126FFF71AF9FFF76EFB85 +:102BB000FFF7F6F894F94400401C01D184F84490E2 +:102BC00094F94500401C01D184F84590FFF708F9BD +:102BD00005A9684600F076F9002820460AD0FBF7E0 +:102BE00017FE00F069FB2046FBF75CFC0028B3D021 +:102BF0000020CBE7FBF756FC90B104F124000599C7 +:102C0000FFF752FA2046FBF703FE00F055FB0028C1 +:102C1000A2D1C8F80070BFF34F8FBFF36F8F9BE74F +:102C20002046FBF7F5FD00F047FB95E771756575EC +:102C3000652E630004ED00E02DE9F04790468946DB +:102C4000040004D140F2FB611EA0FBF701F8B9F1CA +:102C5000000F06D1206C20B140F2FC6119A0FAF7F8 +:102C6000F7FFFFF789F92020EFF3118680F3118831 +:102C7000BFF34F8FBFF36F8FA76BF7B194F9445039 +:102C800049462046FBF72AFA7F1EA763681C04D03A +:102C90006D1C84F84450012010E020690028FAD00F +:102CA00004F1100000F0C8FA0028F4D0B8F1000FC9 +:102CB000F1D00121C8F80010EDE7002086F311885B +:102CC000BDE8F08771756575652E630010B5044623 +:102CD000806C884201D1A06B08B1002010BDFFF7C5 +:102CE0005FF80020A064FFF77BF8012010BD08B555 +:102CF000002200920A466946FFF708FF009808BDC7 +:102D000008B500210A4600916946FFF795FF009833 +:102D100008BD00002DE9F343002683B004003546CA +:102D200004D140F2915153A0FAF792FF206C20B1E8 +:102D300040F295514FA0FAF78BFF00F067F930B9D8 +:102D4000049820B140F29A514AA0FAF781FFDFF8C7 +:102D50002C814FF000094FF0805700BFFFF720F89B +:102D6000A06BC8B1401EA063206810B9FBF700FE3D +:102D7000A060206950B104F1100000F05DFA28B1A4 +:102D8000C8F80070BFF34F8FBFF36F8FFFF728F8BD +:102D9000012005B0BDE8F083049808B14EB10CE005 +:102DA00025B140F2E15133A0FAF752FFFFF718F8CE +:102DB0005EE06846FFF76AF90126FFF711F8FFF7B2 +:102DC00065FAFEF7EDFF94F94400401C01D184F848 +:102DD000449094F94500401C01D184F84590FEF7D9 +:102DE000FFFF04A9684600F06DF80028204612D0C5 +:102DF000FBF70EFD00F060FA2046FBF753FB0028BE +:102E0000ACD075B3FEF7CCFF606A58B3206B006896 +:102E1000C0F10F0128E0FBF745FBE0B1206838B9AD +:102E2000FEF7BEFFA06800F0BDF90546FEF7D8FF2B +:102E300004F124000499FFF737F92046FBF7E8FC7A +:102E400000F03AFA002889D1C8F80070BFF34F8F1C +:102E5000BFF36F8F82E72046FBF7DAFC00F02CFA15 +:102E60007CE705E0FFE70021A068FFF759F99DE73F +:102E700000208EE771756575652E630004ED00E036 +:102E800070B50D46040004D14FF424710BA0FAF77D +:102E9000DFFE00F0B5F8A168884204D1E068401C6C +:102EA000E060012070BD29462046FFF733FF00286F +:102EB000F8D0E168491CE16070BD0000717565756E +:102EC000652E63002DE9F0410C46050004D140F663 +:102ED000944115A0FAF7BCFE24B940F6954112A022 +:102EE000FAF7B6FEFEF75CFF114EF2686B682068D9 +:102EF000D11A471C07D02F68366AB74209D09342CF +:102F000007D8012400E00024FEF76AFF2046BDE850 +:102F1000F081884205D9401A20602846FFF7B6F8AC +:102F2000F1E700202060ECE77461736B732E63009F +:102F3000240000202DE9FF5F8346DDE90E879946D6 +:102F400016468A469000FBF79FFC05001CD05420D3 +:102F5000FBF79AFC040014D00020256384F851008C +:102F6000CDE90240CDE900874B46324651465846EE +:102F7000FBF7DAF92046FBF725F8012004B0BDE89D +:102F8000F09F2846FEF742FF4FF0FF30F6E70000C3 +:102F90002DE9F04786B01F46DDE90F540E9E90469E +:102FA0008946824625B940F24D2113A0FAF750FE1A +:102FB00024B940F24E2110A0FAF74AFE54200090A6 +:102FC0000020B4B1ADB10221256384F85110039003 +:102FD00004A90096CDE901143B46424649465046B5 +:102FE000FBF7A2F92046FAF7EDFF049806B0BDE81A +:102FF000F0870490FAE700007461736B732E63002E +:10300000014800687047000024000020054841691D +:1030100019B1006B18B100207047012070470220E1 +:1030200070470000240000200148C068704700007D +:103030002400002010B5FEF79FFF0148C06810BDB6 +:10304000240000202DE9F0412D4C0027206B40B1D9 +:10305000A069401CA061E06900B101273846BDE8C5 +:10306000F081E668761CE66010D1606B006820B1E4 +:1030700040F67F2123A0FAF7EBFD606BA16B616343 +:10308000A063206A401C2062FBF73CFBA06ADFF8CB +:103090007C80864209D3606B006880B1606BC06839 +:1030A000C568686886420DD2A0622068C06A00EBDD +:1030B000800158F821000128CDD90127CBE74FF036 +:1030C000FF30F1E7281DFEF7D3FDA86A18B105F11E +:1030D0001800FEF7CDFDE86A012122698140114305 +:1030E000216100EB800108EB8100291DFEF74BFEFA +:1030F000E86A2168C96A8842CDD30127CBE700007E +:10310000240000207461736B732E6300080A002092 +:1031100070B504004FF000063AD01E4D2868844276 +:1031200004D040F6D1711CA0FAF792FDA06C20B932 +:1031300040F6D27118A0FAF78BFDA06C401EA06477 +:10314000626CE16A914223D010BB201DFEF790FD16 +:10315000134A012150B9E06A00EB800352F8233092 +:1031600023B92B6901FA00F083432B61606CE062A4 +:10317000C0F10F00A061E06A2B6981401943296109 +:1031800000EB800002EB8000211DFEF7FCFD012614 +:10319000304670BD240000207461736B732E630091 +:1031A000080A002070B504004FF0000038D0204D10 +:1031B000E16A2A68D26A914233D2A069002804DB0E +:1031C0002868C06AC0F10F00A0611A4E01EB8101AE +:1031D000606906EB810188421ED1201DFEF748FD83 +:1031E000012150B9E06A00EB800256F8222022B992 +:1031F0002A6901FA00F082432A612868C06AE06205 +:103200002A6981401143296100EB800006EB8000B0 +:10321000211DFEF7B8FD02E02868C06AE0620120C7 +:1032200070BD616C2A68D26A9142F8D370BD00000B +:1032300024000020080A00202DE9F041C068C4687D +:1032400024B940F6294117A0FAF702FD04F118004D +:103250000746FEF70DFD154D286B012660B1394676 +:103260001348FEF790FDE06A2968C96A884217D9B9 +:103270000120EE61BDE8F081201DFEF7F9FCE16A56 +:103280002A6906FA01F01043286101EB810009491F +:1032900001EB8000211DFEF776FDFBF733FAE2E734 +:1032A0000020E7E77461736B732E63002400002035 +:1032B0005C0B0020080A00202DE9F0472B4C00256C +:1032C0002E46206B20B940F6850129A0FAF7C0FCF4 +:1032D000FEF766FD206B401E2063206BE8BBA168F3 +:1032E000254F0120C9B3A7F5AA7980463868E8B10F +:1032F000F868C56805F11800FEF7BAFC281DFEF74E +:10330000B7FCE86A226908FA00F11143216100EB79 +:10331000800109EB8100291DFEF735FDE86A21686F +:10332000C96A8842E2D3C4F81C80DFE70DB1FBF71D +:10333000E9F9A56945B14746FFF784FE00B1E761A9 +:103340006D1EF9D10020A061E06930B10B49012662 +:1033500030070860BFF34F8F00E001E0BFF36F8FCD +:10336000FEF73EFD3046BDE8F08700002400002057 +:103370007461736B732E63005C0B002004ED00E03E +:103380002DE9FC4781461E461746884628200A9D9F +:10339000FBF77AFA04000AD0002084F82400CDE973 +:1033A000005433463A4641464846FBF70FF820465C +:1033B000BDE8FC877CB52826DDE90654009644B1BB +:1033C000022684F82460CDE90054FAF7FFFF204676 +:1033D0007CBD4FF4A57102A0FAF73AFCF7E70000B4 +:1033E00074696D6572732E630000000030B587B09C +:1033F0000024FAF74FFE114D2868B0B10020039069 +:10340000049005AA04A903A8FEF788FCDDE90321BE +:103410000E208DE80700002309A10B48059AFFF74D +:10342000B7FD686008B1012404E040F2131107A061 +:10343000FAF70EFC07B0204630BD00006000002007 +:10344000546D722053766300EDE7010074696D6579 +:1034500072732E63000000002DE9FE4F9946DDF8DF +:1034600030A090460E4607004FF0000404D14FF400 +:10347000C17111A0FAF7ECFB124D286880B1CDE9BB +:1034800000680297062E10DAFFF7C0FD02284FF001 +:10349000000308D0002269462868FFF7BFF80446F9 +:1034A0002046BDE8FE8F5246F5E700234A466946AE +:1034B000FFF76AF9F3E7000074696D6572732E63B4 +:1034C000000000006000002010B5040004D140F2AC +:1034D000D31102A0FAF7BCFB606810BD74696D657A +:1034E00072732E6300000000FDB40000E9B4000018 +:1034F0000100000802040506090E0F1011121A1827 +:1035000001735C0173A00174DE0100E8016A22020C +:10351000002C026A660210700260FFFF00000000CB +:10352000EFBE03000000000000000000EFBE04003A +:103530000000000006000000EFBE000000000000D8 +:1035400001000000EFBE00000000000002000000CB +:10355000EFBE00000000000000000000EFBE000011 +:103560000000000005000000FB349B5F800000802D +:1035700000100000000000006174745F76616C69E7 +:10358000646174655F73656375726974792E206612 +:103590006C61677320307825303478202D20726577 +:1035A0007120656E632073697A652025752C206112 +:1035B0007574686F72697A65642025752C20617551 +:1035C0007468656E746963617465642025752C2068 +:1035D000656E6372797074696F6E5F6B65795F7326 +:1035E000697A6520257500004154545F46494E4470 +:1035F0005F42595F545950455F56414C55455F52A3 +:103600004551554553543A2066726F6D202530342C +:103610005820746F20253034582C20747970652020 +:10362000253034582C2076616C75653A20000000F6 +:103630004154545F524541445F42595F47524F5590 +:10364000505F545950455F524551554553543A20A7 +:1036500066726F6D202530345820746F2025303409 +:10366000582C206275666665722073697A6520251C +:10367000752C20747970653A200000006174745FC5 +:103680007061636B65745F68616E646C65723A202B +:1036900064726F7070696E672061747420706475F5 +:1036A000203078253032782061732073697A652064 +:1036B0002575203E206174745F7265717565737441 +:1036C0005F62756666657220257500006174745FBF +:1036D0007061636B65745F68616E646C65723A20DB +:1036E000736B697070696E672061747420706475A3 +:1036F00020307825303278206173207365727665CA +:1037000072206E6F742069646C6520287374617414 +:103710006520257529000000000000000000100051 +:10372000800000805F9B34FB253032782530327872 +:1037300025303278253032782D25303278253032D8 +:10374000782D25303278253032782D253032782585 +:103750003032782D25303278253032782530327865 +:10376000253032782530327825303278000000005C +:103770005065726970686572616C206D747520693E +:1037800073206E6F7420696E697469616C697A6503 +:10379000640000004741545420636C69656E7420D6 +:1037A00074696D656F75742073746F702C20686117 +:1037B0006E646C6520307825303278007C6900209A +:1037C00051200000224E020052200000D24D020083 +:1037D00053200000C04D020054200000C64D0200DE +:1037E00055200000D14D020056200000CB4D0200B4 +:1037F00057200000DF4D020058200000044E020058 +:1038000059200000DF4D02005A200000ED4D02005B +:103810005B200000DB4D02005C200000D54D020063 +:103820005D200000D64D020001FC0000E24D0200C8 +:103830006863692E633A2061636C5F68616E646CD3 +:1038400065722063616C6C656420776974682041DF +:10385000434C207061636B6574206F662077726FD4 +:103860006E672073697A652025752C2065787065F0 +:1038700063746564202575203D3E2064726F70700E +:10388000696E67207061636B6574000041434C2072 +:10389000436F6E7420467261676D656E7420746F3D +:1038A000206C617267653A20636F6D62696E656452 +:1038B000207061636B6574202575203E20627566FB +:1038C0006665722073697A6520257520666F72209F +:1038D00068616E646C6520307825303278000000B5 +:1038E00041434C20466972737420467261676D656E +:1038F0006E7420627574206461746120696E206248 +:10390000756666657220666F722068616E646C65AC +:10391000203078253032782C2064726F7070696E98 +:1039200067207374616C6520667261676D656E7483 +:103930007300000041434C20466972737420467244 +:1039400061676D656E7420746F206C617267653A93 +:1039500020667261676D656E74202575203E206259 +:1039600075666665722073697A6520257520666FB5 +:10397000722068616E646C65203078253032780082 +:103980004254535441434B5F4556454E545F504F4C +:103990005745524F4E5F4641494C45440000000098 +:1039A0006863692E633A206576656E745F68616E40 +:1039B000646C65722063616C6C65642077697468FF +:1039C000206576656E74207061636B6574206F6628 +:1039D0002077726F6E672073697A652025752C20B9 +:1039E0006578706563746564202575203D3E2064AC +:1039F000726F7070696E67207061636B6574000030 +:103A00004843495F4556454E545F524541445F52D5 +:103A1000454D4F54455F535550504F525445445FA8 +:103A200046454154555245535F434F4D504C4554C4 +:103A3000452C20626F6E64696E6720666C616773E7 +:103A40002025782C206553434F2025750000000069 +:103A500006040000DF4D020011040000EF4D0200DB +:103A600013040000DF4D02001B040000EF4D0200B4 +:103A70001D040000EF4D0200030C000000000000D8 +:103A80007C0C0000F14D020005140000EF4D020017 +:103A900005200000F54D0200072000000000000096 +:103AA0000E200000000000001020000000000000B8 +:103AB00011200000F44D020012200000F44D02001D +:103AC00013200000F74D020014200000FF4D0200FB +:103AD00015200000EF4D020016200000EF4D0200FF +:103AE00017200000024E0200182000000000000015 +:103AF00019200000054E02001A2000000B4E0200A3 +:103B00001B200000EF4D020020200000F74D0200B6 +:103B1000222000000E4E020030200000F24D020074 +:103B200031200000C74D020032200000124E02007A +:103B300035200000F44D020036200000184E02002F +:103B400037200000284E020038200000284E0200D6 +:103B500039200000D24D02003C200000E04D020060 +:103B60003D200000E04D02003E2000002E4E0200ED +:103B70003F200000294E020040200000D24D0200EC +:103B800041200000C74D020042200000334E0200D9 +:103B900043200000384E0200442000003E4E020048 +:103BA000452000000000000046200000EF4D02000C +:103BB000472000003A4E0200482000003A4E020022 +:103BC00049200000000000004A2000000000000022 +:103BD000FF000000000000000000000000000000E6 +:103BE0004C324341505F4556454E545F4348414E29 +:103BF0004E454C5F4F50454E45442073746174757B +:103C000073203078257820616464722025732068E1 +:103C1000616E646C6520307825782070736D20307B +:103C2000782578206C6F63616C5F636964203078FD +:103C300025782072656D6F74655F636964203078E4 +:103C40002578206C6F63616C5F6D74752025752C11 +:103C50002072656D6F74655F6D74752025752C20FD +:103C6000666C7573685F74696D656F757420257512 +:103C7000000000006C326361705F73746F705F727C +:103C8000747820666F72206C6F63616C2063696466 +:103C900020307825303278004C324341505F455611 +:103CA000454E545F494E434F4D494E475F434F4E3B +:103CB0004E454354494F4E20616464722025732061 +:103CC00068616E646C6520307825782070736D2093 +:103CD00030782578206C6F63616C5F636964203095 +:103CE0007825782072656D6F74655F636964203034 +:103CF000782578006C32636170207265636569763F +:103D000065642072656D6F746520737570706F7275 +:103D10007465642066656174757265732C207365C3 +:103D2000635F6C6576656C5F305F616C6C6F776547 +:103D30006420666F722070736D202575203D2025EC +:103D4000750000000000000000000000FFFFFFFF02 +:103D5000000000000B01000002000200000200024F +:103D60000101030001000000000001010200010048 +:103D7000252D36732030782530347800736D3A2045 +:103D8000636F6E6E656374696F6E2030782578207E +:103D900072656C656173656420736574757020630A +:103DA0006F6E746578740000736D5F6B65795F6426 +:103DB0006973747269627574696F6E5F616C6C5F50 +:103DC00072656365697665643A20726563656976D4 +:103DD0006564203078253032782C206578706563F2 +:103DE00074696E6720307825303278006761705FC3 +:103DF00072616E646F6D5F616464726573735F742A +:103E000072696767657200000000000091B50000EC +:103E10008DB5000081B5000000000000A5D00000B5 +:103E20005BD000002DB500004D190200000000001D +:103E3000000000002000800000C00000000004001E +:103E400000002822000000000000000000F7FFFF33 +:103E50007F00000000F001F8FFFFFF0300000000FA +:103E60000000000000000000000000000000000052 +:103E7000000000003FF9FF0700000000FFFFFFFF08 +:103E8000FF01000000000000E84702004404002099 +:103E900003000100F401FA00960064004B003200B8 +:103EA0001E001400000000000000000000000000E0 +:103EB00000000000626C6535305F6C6C645F6563A8 +:103EC00070742E63000048082804904200200020EF +:103ED000004000400040000000000000A448020034 +:103EE0005E0400200100010006040304000001003C +:103EF0007D9D00001D040202010001007D9D000067 +:103F0000010C08080000030059D40100030C000054 +:103F100002000300000000002D0C03040200010059 +:103F20007D9D0000310C01010300030059D4010004 +:103F3000330C070804000300DD9F0000350CFD2250 +:103F400005000300ED9F0000630C0808010003005A +:103F500059D401007B0C02020400010059D4010075 +:103F60007C0C04040500010059D40100011000007C +:103F7000060003000000000002100000070003001C +:103F80000000000003100000080003000000000013 +:103F900005100000090003000000000009100000E7 +:103FA0000A000300000000000514020203000100E3 +:103FB0007D9D0000012008080B00030059D401007A +:103FC000022000000C00030000000000032000009D +:103FD0000D00030000000000052006060E0003008F +:103FE00059D4010006200F100000000059D4010030 +:103FF000072000000F000300000000000820202020 +:104000000100000059D40100092020200200000016 +:1040100059D401000A2001010300000059D4010015 +:104020000B2007071700030059D401000C200202DF +:104030001800030059D401000D20191904000000D4 +:1040400059D401000E20000005000000000000000F +:104050000F200000100003000000000010200000EE +:104060000600000000000000112007070700000004 +:1040700059D40100122007070800000059D401009C +:1040800013200E0E060001007D9D00001420050582 +:104090000900000059D401001520020207000100A8 +:1040A0007D9D000016200202080001007D9D000099 +:1040B000172020201100030059D40100182000000F +:1040C000120003000000000019201C1C0900010060 +:1040D0007D9D00001A2012120A0001007D9D000043 +:1040E0001B2002020B0001007D9D00001C2000002F +:1040F00013000300000000001D20010F0B00000052 +:10410000E59D00001E20030F0C000000FB9D000039 +:104110001F2000000A0000000000000020200E0EFA +:104120000D0001007D9D0000212003040E00010010 +:104130007D9D0000222006060C0001007D9D0000F0 +:1041400023200000150003000000000024200404C8 +:104150001600030059D401002F20000014000300B2 +:104160000000000030200202100001007D9D0000D0 +:10417000312003031A00030059D40100322007073D +:10418000110001007D9D00003320030F0B00000093 +:10419000CD9D00003420040F0C000000D99D0000CC +:1041A000352007070D000000719D00003620191909 +:1041B0000E000000719D00003720FFFF0F0000007F +:1041C000719D00003820FFFF10000000719D00006D +:1041D000392022221100000059D401003A200000A9 +:1041E0001B000300000000003B2000001C00030037 +:1041F000000000003C20010112000000719D000041 +:104200003D20000013000000000000003E200707D2 +:1042100014000000719D00003F20FFFF150000000A +:10422000719D0000402002021600000059D40100D8 +:1042300041200E0E2400030081A500004220060646 +:104240002500030059D4010043203C3C1700000026 +:10425000779E000044200E0E2600030059D4010072 +:104260004520000027000300000000004620020255 +:1042700001000400F19D0000472008081E00030013 +:1042800059D40100482008081F00030059D4010038 +:104290004920000020000300000000004A20000028 +:1042A00021000300000000004B2000001D0003005F +:1042B000000000004C20000022000300000000006D +:1042C0004D2004042300030059D401004F200F0F98 +:1042D0000B00000059D4010050200F0F0C0000000B +:1042E00059D4010051200D0D18000000719D0000EF +:1042F0005220020219000000719D000053200E0E92 +:1043000002000400F19D000054200D0D1200010078 +:104310007D9D000055200C0C130001007D9D0000C8 +:1043200056200707140001007D9D0000572003035D +:10433000150001007D9D00005820000028000300AA +:10434000000000005920030303000400F19D000059 +:104350005A200606160001007D9D00005B20050521 +:10436000170001007D9D00005C2008081800010076 +:104370007D9D00005D2006062900030059D4010040 +:104380005F2001012A00030059D4010001FC1E1E18 +:104390001900030059D40100FB010000DD9B00005F +:1043A000FE01000015A00000FB010620DD9B0000BF +:1043B000FB010820DD9B0000FB010920DD9B0000C4 +:1043C000FB010A20DD9B0000FB010E20DD9B0000AD +:1043D000FB011020DD9B0000FB011120DD9B000094 +:1043E000FB011220DD9B0000FB011420DD9B00007F +:1043F000FB031F2073A20000FB023620DD9B0000A0 +:10440000FE000000A9A10000FA000D20859C00001C +:10441000FE00000037A10000FE00000091A0000097 +:10442000FE000000D5A10000FE000000A3A10000D6 +:10443000FE00000023A20000FB010000DD9B000045 +:10444000FB01010CDD9B0000FB01310CDD9B00003A +:10445000FB01330CDD9B0000FB01350CDD9B0000F4 +:10446000FB09011091A30000FB410210DD9B00003D +:10447000FB090310DD9B0000FB0805107DA3000075 +:10448000FB070910DD9B0000FB033A20DD9B0000C9 +:10449000FB023B20DD9B0000FB034B20DD9B00006B +:1044A000FB024A20DD9B0000FB054C20DD9B000049 +:1044B000FE00000029A20000FE000000DBA10000B9 +:1044C000FE000000FDA10000FB055820DD9B000060 +:1044D000FB010120DD9B0000FB0402202FA2000055 +:1044E000FB090320DD9B0000FB010520DD9B000094 +:1044F000FB020720DD9B0000FB020F20DD9B00007C +:10450000FB111720DD9B0000FB0F01FCDD9B000071 +:10451000FB091820DD9B0000FB091C20DD9B00002F +:10452000FB092F20DD9B0000FB052320DD9B000005 +:10453000FB012420DD9B0000FA000604859C00009E +:10454000FA001D04859C0000FB042D0CD1A3000083 +:10455000FB040514C3A30000FE0000005B9D0000E7 +:10456000FE001D04A5A30000FE00000001A3000042 +:10457000FE0100002D9D0000FE041920459E000054 +:10458000FE0019205B9E0000FB0000001FA1000040 +:10459000FB057B0CDD9B0000FA001320859C0000CE +:1045A000FB0815203FA20000FA001620859C0000A1 +:1045B000FA001920859C0000FE00132043A1000092 +:1045C000FE0C162067A20000FE0D00006BA100008B +:1045D000FE0000001DA20000FB0B22204FA10000E6 +:1045E000FB010000F9A60000FB053020DD9B000068 +:1045F000FE000000F1A10000FE000000BFA10000CD +:10460000FE000000CFA10000FE000000F7A10000A6 +:104610000000000000000000FB000000259F0000DB +:10462000FB0000007D9F0000FB0000004D9F00008C +:10463000FE00000003A20000FE00000009A200002E +:10464000FE000000AFA10000504C0200704C0200C0 +:104650005F040020040008000F000300BD320100C9 +:104660000B000300313401000C000300153301007E +:104670000D0003003D3301000E000300593401001A +:10468000100003000D340100110003004D2B010048 +:10469000120003009132010013000300DD3301001A +:1046A000140003006D33010015000300A93301005D +:1046B00016000300453501000A0003004D3B0100D0 +:1046C000060003000D3C010007000300A93B0100A8 +:1046D000030003006142010008000300D93B010010 +:1046E00000000300A542010001000300D9420100BF +:1046F00002000300212F010004000300F527010040 +:10470000050003002128010009000300813B01008E +:10471000170003000935010018000300B934010037 +:10472000240003008931010025000300C930010085 +:10473000190003004D2B01001B000300952D010003 +:104740001C000300E12D01001A00030049300100A4 +:1047500020000300E92B010021000300292E0100A5 +:104760001D000300B12E010022000300712E010084 +:104770001E000300792B01001F0003003D2F0100E4 +:10478000230003004132010026000300752C0100C4 +:10479000270003002D2D010028000300F52E010045 +:1047A00029000300A53001002A000300312C01007C +:1047B0004C000300AD2F01004D0003000930010043 +:1047C0004E0003001D3201004F000300252C0100A4 +:1047D00000000200853601000100020015370100CB +:1047E000020002007135010058460200320000004C +:1047F000904D0200B84D02000C7B0020050009001E +:104800000C0002040600000000000000000400008C +:104810001000000000000000000000000000000088 +:10482000000000000000000000000000080004007C +:10483000C5C2010001000400D1C101000200040052 +:1048400025C2010003000400A5C20100000002000F +:104850005DC301000100020061C30100020002000B +:10486000E1C20100000000000000000000000000A4 +:104870000000000000000000000000002C480200C2 +:1048800007000000644802007C4802005604002033 +:1048900003000800FFFF0000D9A40000010005008C +:1048A00039A300009448020002000000E1E2000089 +:1048B0003C0001000C0C0000E1E200003D000100A2 +:1048C00008080000E1E200003E00010002020000D2 +:1048D000E1E200003F00010017170000E1E20000E4 +:1048E000400001000D0D0000E1E200004100010068 +:1048F00001010000E1E200004200010001010000AE +:10490000E1E200004300010002020000E1E20000D9 +:104910004400010009090000E1E200004500010037 +:1049200009090000E1E20000460001000101000069 +:10493000E1E200004700010001010000E1E20000A7 +:104940004800010006060000E1E200004900010005 +:1049500002020000E1E200004A0001000909000033 +:10496000E1E200004B00010018180000E1E2000045 +:104970004C00010018180000E1E200004D000100A9 +:1049800003030000E1E200004E000100010100000D +:10499000E1E200004F00010001010000E1E200003F +:1049A0005000010009090000E1E20000510001008F +:1049B00009090000E1E200005200010003030000C9 +:1049C000E1E200005300010003030000E1E2000007 +:1049D0005400010005050000E1E20000550001005F +:1049E00003030000E1E200005600010002020000A3 +:1049F000E1E200005700010001010000E1E20000D7 +:104A00005800010023230000E1E2000059000100EA +:104A100002020000E1E200005A0001000202000070 +:104A20000000020045000100010002007D000100BD +:104A30000200020041FE000000000100BDE700008E +:104A4000010001005107010002000100C10801003E +:104A50000400010021EC000005000100850E0100AA +:104A6000030001006108010006000100DDEE000006 +:104A700007000100ADF800000800010005F9000082 +:104A800009000100D5FA00000A000100D5F7000076 +:104A90000B0001007DF700000C00010041FA00004E +:104AA0000D000100A9F900000E00010061F90000ED +:104AB0000F000100A9E600001000010095F40000BD +:104AC00011000100F5F5000012000100E1F4000002 +:104AD0001300010081F5000014000100DDF000006A +:104AE0001500010071F10000160001002DF3000017 +:104AF00017000100D9F100001800010029F700009B +:104B000037000100D5E3000000000200450001006D +:104B1000010002007D0001000200020041FE0000D1 +:104B2000380001000DD70000390001004DD700000A +:104B30003A00010085FB00003B000100B9180100AC +:104B40002D000100F10A01003C000100AD4501000B +:104B50003D000100494501003F00010049470100B7 +:104B600040000100C547010041000100555301000C +:104B700042000100BD530100430001004D540100FB +:104B8000440001000D480100450001006548010096 +:104B900046000100E55001004700010059510100A5 +:104BA0004800010041550100490001000552010083 +:104BB0004A000100CD5201004B0001004D4E0100A2 +:104BC0004C000100854F01004D0001009151010092 +:104BD0004E000100415001004F000100A5500100AE +:104BE0005000010045460100510001002947010025 +:104BF00052000100354C010053000100054D010039 +:104C000054000100A94D010055000100454A010072 +:104C1000560001006D49010057000100094A0100DA +:104C200058000100914A010059000100B9480100F3 +:104C30005A000100214901004400030019F000005E +:104C400031000000010F010032000000B9800100B6 +:104C5000204A0200030000000000000000000000E5 +:104C60000000000000000000000000000000000044 +:104C7000384A020043000000051314151A293B00AE +:104C8000000002007999010001000200AD990100C5 +:104C9000020002006196010000000000F193010093 +:104CA00001000000E5920100030000007193010083 +:104CB00002000000CD9401000D0000005D8801009D +:104CC0000E000000DD8C01000F000000058A0100CD +:104CD00010000000398F0100110000007D8B0100E1 +:104CE000120000000D880100130000006986010019 +:104CF00014000000A1910100150000003590010092 +:104D000016000000FD90010004000000C5850100B0 +:104D100005000000A1850100090000004D9401007C +:104D2000170000007D870100330000005D85010051 +:104D300006000000618501000700000019850100E0 +:104D400008000000A59201000A0000008195010002 +:104D50000B000000C18601000C0000001F8701004D +:104D60001800000069890100190000002589010070 +:104D70002F0000003D94010000000200799901001D +:104D800001000200AD9901000200020061960100DD +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000804C02000300000032 +:104DB0000000000000000000984C02001F000000EE +:104DC00048313131310048313131004831323131EF +:104DD0000048313100483132323100483231004828 +:104DE00031003131323234343434343400483248D2 +:104DF000004832003142004832323232323200341E +:104E0000310050500048343432500048500048328D +:104E100032004831313132003132333331313142B5 +:104E200031313131313131003131313141003132C3 +:104E300032320031313232003131314231003131E0 +:104E40003142323231003232324400006C4E0200C4 +:104E50000000002074040000AE490000CC4E0200A7 +:104E600074040020A47A0000664F000001781AAA9A +:104E70000101801AFF0132016904416908091734F0 +:104E800011124014484E021A0F0414FA4D021A4728 +:104E9000085A461029045A49045AF21C2924290C9C +:104EA0005AF90429241945011D13E473025C2002F8 +:104EB000FF0501FF011B1201E3CC302A4C1013FF48 +:0C4EC000A003122003E3201C02277F0047 +:020000040008F2 +:107FEC00000000005A5A5A5A00000000000000001D +:047FFC000040000041 +:00000001FF diff --git a/bundles/typical/ING9188xx/symdefs.g b/bundles/typical/ING9188xx/symdefs.g new file mode 100644 index 000000000..58329e1d1 --- /dev/null +++ b/bundles/typical/ING9188xx/symdefs.g @@ -0,0 +1,281 @@ +att_dispatch_client_can_send_now = 0x00005ab9; +att_dispatch_client_request_can_send_now_event = 0x00005abf; +att_dispatch_register_client = 0x00005ac5; +att_dispatch_register_server = 0x00005ad9; +att_dispatch_server_can_send_now = 0x00005aed; +att_dispatch_server_request_can_send_now_event = 0x00005af3; +att_emit_general_event = 0x00005bb1; +att_server_can_send_packet_now = 0x000062e9; +att_server_get_mtu = 0x000062ed; +att_server_indicate = 0x00006361; +att_server_init = 0x000063e5; +att_server_notify = 0x00006421; +att_server_register_packet_handler = 0x00006509; +att_server_request_can_send_now_event = 0x00006515; +att_set_db = 0x00006531; +att_set_read_callback = 0x00006545; +att_set_write_callback = 0x00006551; +bd_addr_cmp = 0x00006695; +bd_addr_copy = 0x0000669b; +bd_addr_to_str = 0x000066a5; +big_endian_read_16 = 0x000066dd; +big_endian_read_32 = 0x000066e5; +big_endian_store_16 = 0x000066f9; +big_endian_store_32 = 0x00006705; +btstack_memory_pool_create = 0x000069d9; +btstack_memory_pool_free = 0x00006a01; +btstack_memory_pool_get = 0x00006a61; +btstack_push_user_msg = 0x00006a89; +char_for_nibble = 0x00006d01; +eTaskConfirmSleepModeStatus = 0x00006f91; +gap_add_dev_to_periodic_list = 0x000076a5; +gap_add_whitelist = 0x000076bd; +gap_aes_encrypt = 0x000076d1; +gap_clear_white_lists = 0x000076f9; +gap_clr_adv_set = 0x00007709; +gap_clr_periodic_adv_list = 0x00007719; +gap_create_connection_cancel = 0x00007745; +gap_default_periodic_adv_sync_transfer_param = 0x00007755; +gap_disconnect = 0x0000776d; +gap_disconnect_all = 0x00007799; +gap_ext_create_connection = 0x00007841; +gap_get_connection_parameter_range = 0x00007905; +gap_le_read_channel_map = 0x00007941; +gap_periodic_adv_create_sync = 0x000079b5; +gap_periodic_adv_create_sync_cancel = 0x000079d9; +gap_periodic_adv_set_info_transfer = 0x000079e9; +gap_periodic_adv_sync_transfer = 0x00007a01; +gap_periodic_adv_sync_transfer_param = 0x00007a19; +gap_periodic_adv_term_sync = 0x00007a35; +gap_read_antenna_info = 0x00007ac9; +gap_read_periodic_adv_list_size = 0x00007ad9; +gap_read_phy = 0x00007ae9; +gap_read_remote_info = 0x00007afd; +gap_read_remote_used_features = 0x00007b11; +gap_read_rssi = 0x00007b25; +gap_remove_whitelist = 0x00007b39; +gap_rmv_adv_set = 0x00007bc5; +gap_rmv_dev_from_periodic_list = 0x00007bd9; +gap_set_adv_set_random_addr = 0x00007c19; +gap_set_connection_cte_request_enable = 0x00007c65; +gap_set_connection_cte_response_enable = 0x00007c81; +gap_set_connection_cte_rx_param = 0x00007c95; +gap_set_connection_cte_tx_param = 0x00007cf1; +gap_set_connection_parameter_range = 0x00007d45; +gap_set_connectionless_cte_tx_enable = 0x00007d5d; +gap_set_connectionless_cte_tx_param = 0x00007d71; +gap_set_connectionless_iq_sampling_enable = 0x00007dd1; +gap_set_def_phy = 0x00007e35; +gap_set_ext_adv_data = 0x00007e4d; +gap_set_ext_adv_enable = 0x00007e65; +gap_set_ext_adv_para = 0x00007ee1; +gap_set_ext_scan_enable = 0x00007fc1; +gap_set_ext_scan_para = 0x00007fd9; +gap_set_ext_scan_response_data = 0x00008081; +gap_set_host_channel_classification = 0x00008099; +gap_set_periodic_adv_data = 0x000080ad; +gap_set_periodic_adv_enable = 0x00008121; +gap_set_periodic_adv_para = 0x00008135; +gap_set_periodic_adv_rx_enable = 0x0000814d; +gap_set_phy = 0x00008161; +gap_set_random_device_address = 0x0000817d; +gap_start_ccm = 0x000081e1; +gap_update_connection_parameters = 0x00008215; +gatt_client_cancel_write = 0x000086fd; +gatt_client_discover_characteristic_descriptors = 0x00008723; +gatt_client_discover_characteristics_for_handle_range_by_uuid128 = 0x00008765; +gatt_client_discover_characteristics_for_handle_range_by_uuid16 = 0x000087b5; +gatt_client_discover_characteristics_for_service = 0x00008805; +gatt_client_discover_primary_services = 0x0000883b; +gatt_client_discover_primary_services_by_uuid128 = 0x0000886d; +gatt_client_discover_primary_services_by_uuid16 = 0x000088b1; +gatt_client_execute_write = 0x000088ed; +gatt_client_find_included_services_for_service = 0x00008913; +gatt_client_get_mtu = 0x00008941; +gatt_client_is_ready = 0x000089e9; +gatt_client_listen_for_characteristic_value_updates = 0x000089ff; +gatt_client_prepare_write = 0x00008a23; +gatt_client_pts_suppress_mtu_exchange = 0x00008a61; +gatt_client_read_characteristic_descriptor_using_descriptor_handle = 0x00008a6d; +gatt_client_read_long_characteristic_descriptor_using_descriptor_handle = 0x00008a97; +gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset = 0x00008a9d; +gatt_client_read_long_value_of_characteristic_using_value_handle = 0x00008acb; +gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset = 0x00008ad1; +gatt_client_read_multiple_characteristic_values = 0x00008aff; +gatt_client_read_value_of_characteristic_using_value_handle = 0x00008b2f; +gatt_client_read_value_of_characteristics_by_uuid128 = 0x00008b5d; +gatt_client_read_value_of_characteristics_by_uuid16 = 0x00008ba9; +gatt_client_register_handler = 0x00008bf5; +gatt_client_reliable_write_long_value_of_characteristic = 0x00008c01; +gatt_client_signed_write_without_response = 0x0000902d; +gatt_client_write_characteristic_descriptor_using_descriptor_handle = 0x000090f1; +gatt_client_write_client_characteristic_configuration = 0x0000912b; +gatt_client_write_long_characteristic_descriptor_using_descriptor_handle = 0x0000917d; +gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset = 0x0000918d; +gatt_client_write_long_value_of_characteristic = 0x000091c9; +gatt_client_write_long_value_of_characteristic_with_offset = 0x000091d9; +gatt_client_write_value_of_characteristic = 0x00009215; +gatt_client_write_value_of_characteristic_without_response = 0x0000924b; +hci_add_event_handler = 0x0000a725; +hci_power_control = 0x0000aed5; +hci_register_acl_packet_handler = 0x0000b089; +kv_commit = 0x0000b6d5; +kv_get = 0x0000b72d; +kv_init = 0x0000b745; +kv_put = 0x0000b7ad; +kv_remove = 0x0000b825; +kv_remove_all = 0x0000b861; +kv_value_modified = 0x0000b8a5; +kv_visit = 0x0000b8a9; +l2cap_can_send_fixed_channel_packet_now = 0x0000b969; +l2cap_can_send_packet_now = 0x0000b96d; +l2cap_create_channel = 0x0000bb25; +l2cap_disconnect = 0x0000bc5d; +l2cap_get_remote_mtu_for_local_cid = 0x0000bf01; +l2cap_init = 0x0000c381; +l2cap_le_send_flow_control_credit = 0x0000c3c9; +l2cap_max_le_mtu = 0x0000c62d; +l2cap_max_mtu = 0x0000c631; +l2cap_next_local_cid = 0x0000c635; +l2cap_next_sig_id = 0x0000c645; +l2cap_register_fixed_channel = 0x0000c6dd; +l2cap_register_packet_handler = 0x0000c6f9; +l2cap_register_service = 0x0000c705; +l2cap_request_can_send_fix_channel_now_event = 0x0000c7ed; +l2cap_request_can_send_now_event = 0x0000c811; +l2cap_request_connection_parameter_update = 0x0000c82b; +l2cap_require_security_level_2_for_outgoing_sdp = 0x0000c85d; +l2cap_send = 0x0000cc21; +l2cap_send_connectionless = 0x0000cc99; +l2cap_send_connectionless3 = 0x0000cd29; +l2cap_send_echo_request = 0x0000cdc1; +l2cap_send_signaling_le = 0x0000ce25; +l2cap_unregister_service = 0x0000ce7d; +ll_hint_on_ce_len = 0x0000d061; +ll_set_adv_coded_scheme = 0x0000d345; +ll_set_def_antenna = 0x0000d375; +ll_set_initiating_coded_scheme = 0x0000d391; +nibble_for_char = 0x0001daa1; +platform_calibrate_32k = 0x0001db57; +platform_config = 0x0001db5d; +platform_get_heap_status = 0x0001dc05; +platform_get_us_time = 0x0001dc1d; +platform_get_version = 0x0001dc21; +platform_hrng = 0x0001dc29; +platform_patch_rf_init_data = 0x0001dc31; +platform_printf = 0x0001dc3d; +platform_raise_assertion = 0x0001dc51; +platform_rand = 0x0001dc65; +platform_read_info = 0x0001dc69; +platform_read_persistent_reg = 0x0001dc85; +platform_reset = 0x0001dc95; +platform_set_evt_callback = 0x0001dcc9; +platform_set_irq_callback = 0x0001dcdd; +platform_set_rf_clk_source = 0x0001dd15; +platform_set_rf_init_data = 0x0001dd21; +platform_set_rf_power_mapping = 0x0001dd2d; +platform_shutdown = 0x0001dd39; +platform_switch_app = 0x0001dd3d; +platform_trace_raw = 0x0001dd69; +platform_write_persistent_reg = 0x0001dd7d; +printf_hexdump = 0x0001dd8d; +pvPortMalloc = 0x0001e889; +pvTaskIncrementMutexHeldCount = 0x0001e971; +pvTimerGetTimerID = 0x0001e989; +pxPortInitialiseStack = 0x0001e9b5; +reverse_128 = 0x0001eb95; +reverse_24 = 0x0001eb9b; +reverse_48 = 0x0001eba1; +reverse_56 = 0x0001eba7; +reverse_64 = 0x0001ebad; +reverse_bd_addr = 0x0001ebb3; +reverse_bytes = 0x0001ebb9; +sm_add_event_handler = 0x0001ee59; +sm_address_resolution_lookup = 0x0001ef85; +sm_authenticated = 0x0001f05f; +sm_authorization_decline = 0x0001f06d; +sm_authorization_grant = 0x0001f08d; +sm_authorization_state = 0x0001f0ad; +sm_bonding_decline = 0x0001f0c9; +sm_config = 0x0001f4a1; +sm_encryption_key_size = 0x0001f5ad; +sm_just_works_confirm = 0x0001fd7d; +sm_le_device_key = 0x0001ffcd; +sm_passkey_input = 0x00020065; +sm_private_random_address_generation_get = 0x000203f1; +sm_private_random_address_generation_get_mode = 0x000203f9; +sm_private_random_address_generation_set_mode = 0x00020405; +sm_private_random_address_generation_set_update_period = 0x0002042d; +sm_register_oob_data_callback = 0x00020465; +sm_request_pairing = 0x00020471; +sm_send_security_request = 0x00020eab; +sm_set_accepted_stk_generation_methods = 0x00020ed1; +sm_set_authentication_requirements = 0x00020edd; +sm_set_encryption_key_size_range = 0x00020ee9; +sscanf_bd_addr = 0x000211e5; +sysSetPublicDeviceAddr = 0x00021501; +uuid128_to_str = 0x00021bdd; +uuid_add_bluetooth_prefix = 0x00021c35; +uuid_has_bluetooth_prefix = 0x00021c55; +uxQueueMessagesWaiting = 0x00021c99; +uxQueueMessagesWaitingFromISR = 0x00021cc1; +uxQueueSpacesAvailable = 0x00021cdd; +vPortEnterCritical = 0x00021da1; +vPortExitCritical = 0x00021de1; +vPortFree = 0x00021e0d; +vPortSuppressTicksAndSleep = 0x00021ea1; +vPortValidateInterruptPriority = 0x00021f79; +vQueueDelete = 0x00021fcd; +vQueueWaitForMessageRestricted = 0x00021ff9; +vTaskDelay = 0x00022041; +vTaskInternalSetTimeOutState = 0x0002208d; +vTaskMissedYield = 0x0002209d; +vTaskPlaceOnEventList = 0x000220a9; +vTaskPlaceOnEventListRestricted = 0x000220e1; +vTaskPriorityDisinheritAfterTimeout = 0x00022121; +vTaskStartScheduler = 0x000221cd; +vTaskStepTick = 0x0002225d; +vTaskSuspendAll = 0x0002228d; +vTaskSwitchContext = 0x0002229d; +xPortStartScheduler = 0x00022345; +xQueueAddToSet = 0x00022401; +xQueueCreateCountingSemaphore = 0x00022425; +xQueueCreateCountingSemaphoreStatic = 0x00022461; +xQueueCreateMutex = 0x000224a5; +xQueueCreateMutexStatic = 0x000224bb; +xQueueCreateSet = 0x000224d5; +xQueueGenericCreate = 0x000224dd; +xQueueGenericCreateStatic = 0x00022529; +xQueueGenericReset = 0x00022591; +xQueueGenericSend = 0x0002261d; +xQueueGenericSendFromISR = 0x00022789; +xQueueGiveFromISR = 0x00022849; +xQueueGiveMutexRecursive = 0x000228ed; +xQueueIsQueueEmptyFromISR = 0x0002292d; +xQueueIsQueueFullFromISR = 0x00022951; +xQueuePeek = 0x00022979; +xQueuePeekFromISR = 0x00022aa1; +xQueueReceive = 0x00022b0d; +xQueueReceiveFromISR = 0x00022c39; +xQueueRemoveFromSet = 0x00022ccd; +xQueueSelectFromSet = 0x00022cef; +xQueueSelectFromSetFromISR = 0x00022d01; +xQueueSemaphoreTake = 0x00022d15; +xQueueTakeMutexRecursive = 0x00022e81; +xTaskCheckForTimeOut = 0x00022ec5; +xTaskCreate = 0x00022f35; +xTaskCreateStatic = 0x00022f91; +xTaskGetCurrentTaskHandle = 0x00023001; +xTaskGetSchedulerState = 0x0002300d; +xTaskGetTickCount = 0x00023029; +xTaskGetTickCountFromISR = 0x00023035; +xTaskIncrementTick = 0x00023045; +xTaskPriorityDisinherit = 0x00023111; +xTaskPriorityInherit = 0x000231a5; +xTaskRemoveFromEventList = 0x00023239; +xTaskResumeAll = 0x000232b9; +xTimerCreate = 0x00023381; +xTimerCreateStatic = 0x000233b5; +xTimerCreateTimerTask = 0x000233ed; +xTimerGenericCommand = 0x00023459; +xTimerGetExpiryTime = 0x000234c9; diff --git a/bundles/typical/ING9188xx/symdefs.i b/bundles/typical/ING9188xx/symdefs.i new file mode 100644 index 000000000..d14b41f6a --- /dev/null +++ b/bundles/typical/ING9188xx/symdefs.i @@ -0,0 +1,281 @@ +--define_symbol att_dispatch_client_can_send_now=0x00005ab9 +--define_symbol att_dispatch_client_request_can_send_now_event=0x00005abf +--define_symbol att_dispatch_register_client=0x00005ac5 +--define_symbol att_dispatch_register_server=0x00005ad9 +--define_symbol att_dispatch_server_can_send_now=0x00005aed +--define_symbol att_dispatch_server_request_can_send_now_event=0x00005af3 +--define_symbol att_emit_general_event=0x00005bb1 +--define_symbol att_server_can_send_packet_now=0x000062e9 +--define_symbol att_server_get_mtu=0x000062ed +--define_symbol att_server_indicate=0x00006361 +--define_symbol att_server_init=0x000063e5 +--define_symbol att_server_notify=0x00006421 +--define_symbol att_server_register_packet_handler=0x00006509 +--define_symbol att_server_request_can_send_now_event=0x00006515 +--define_symbol att_set_db=0x00006531 +--define_symbol att_set_read_callback=0x00006545 +--define_symbol att_set_write_callback=0x00006551 +--define_symbol bd_addr_cmp=0x00006695 +--define_symbol bd_addr_copy=0x0000669b +--define_symbol bd_addr_to_str=0x000066a5 +--define_symbol big_endian_read_16=0x000066dd +--define_symbol big_endian_read_32=0x000066e5 +--define_symbol big_endian_store_16=0x000066f9 +--define_symbol big_endian_store_32=0x00006705 +--define_symbol btstack_memory_pool_create=0x000069d9 +--define_symbol btstack_memory_pool_free=0x00006a01 +--define_symbol btstack_memory_pool_get=0x00006a61 +--define_symbol btstack_push_user_msg=0x00006a89 +--define_symbol char_for_nibble=0x00006d01 +--define_symbol eTaskConfirmSleepModeStatus=0x00006f91 +--define_symbol gap_add_dev_to_periodic_list=0x000076a5 +--define_symbol gap_add_whitelist=0x000076bd +--define_symbol gap_aes_encrypt=0x000076d1 +--define_symbol gap_clear_white_lists=0x000076f9 +--define_symbol gap_clr_adv_set=0x00007709 +--define_symbol gap_clr_periodic_adv_list=0x00007719 +--define_symbol gap_create_connection_cancel=0x00007745 +--define_symbol gap_default_periodic_adv_sync_transfer_param=0x00007755 +--define_symbol gap_disconnect=0x0000776d +--define_symbol gap_disconnect_all=0x00007799 +--define_symbol gap_ext_create_connection=0x00007841 +--define_symbol gap_get_connection_parameter_range=0x00007905 +--define_symbol gap_le_read_channel_map=0x00007941 +--define_symbol gap_periodic_adv_create_sync=0x000079b5 +--define_symbol gap_periodic_adv_create_sync_cancel=0x000079d9 +--define_symbol gap_periodic_adv_set_info_transfer=0x000079e9 +--define_symbol gap_periodic_adv_sync_transfer=0x00007a01 +--define_symbol gap_periodic_adv_sync_transfer_param=0x00007a19 +--define_symbol gap_periodic_adv_term_sync=0x00007a35 +--define_symbol gap_read_antenna_info=0x00007ac9 +--define_symbol gap_read_periodic_adv_list_size=0x00007ad9 +--define_symbol gap_read_phy=0x00007ae9 +--define_symbol gap_read_remote_info=0x00007afd +--define_symbol gap_read_remote_used_features=0x00007b11 +--define_symbol gap_read_rssi=0x00007b25 +--define_symbol gap_remove_whitelist=0x00007b39 +--define_symbol gap_rmv_adv_set=0x00007bc5 +--define_symbol gap_rmv_dev_from_periodic_list=0x00007bd9 +--define_symbol gap_set_adv_set_random_addr=0x00007c19 +--define_symbol gap_set_connection_cte_request_enable=0x00007c65 +--define_symbol gap_set_connection_cte_response_enable=0x00007c81 +--define_symbol gap_set_connection_cte_rx_param=0x00007c95 +--define_symbol gap_set_connection_cte_tx_param=0x00007cf1 +--define_symbol gap_set_connection_parameter_range=0x00007d45 +--define_symbol gap_set_connectionless_cte_tx_enable=0x00007d5d +--define_symbol gap_set_connectionless_cte_tx_param=0x00007d71 +--define_symbol gap_set_connectionless_iq_sampling_enable=0x00007dd1 +--define_symbol gap_set_def_phy=0x00007e35 +--define_symbol gap_set_ext_adv_data=0x00007e4d +--define_symbol gap_set_ext_adv_enable=0x00007e65 +--define_symbol gap_set_ext_adv_para=0x00007ee1 +--define_symbol gap_set_ext_scan_enable=0x00007fc1 +--define_symbol gap_set_ext_scan_para=0x00007fd9 +--define_symbol gap_set_ext_scan_response_data=0x00008081 +--define_symbol gap_set_host_channel_classification=0x00008099 +--define_symbol gap_set_periodic_adv_data=0x000080ad +--define_symbol gap_set_periodic_adv_enable=0x00008121 +--define_symbol gap_set_periodic_adv_para=0x00008135 +--define_symbol gap_set_periodic_adv_rx_enable=0x0000814d +--define_symbol gap_set_phy=0x00008161 +--define_symbol gap_set_random_device_address=0x0000817d +--define_symbol gap_start_ccm=0x000081e1 +--define_symbol gap_update_connection_parameters=0x00008215 +--define_symbol gatt_client_cancel_write=0x000086fd +--define_symbol gatt_client_discover_characteristic_descriptors=0x00008723 +--define_symbol gatt_client_discover_characteristics_for_handle_range_by_uuid128=0x00008765 +--define_symbol gatt_client_discover_characteristics_for_handle_range_by_uuid16=0x000087b5 +--define_symbol gatt_client_discover_characteristics_for_service=0x00008805 +--define_symbol gatt_client_discover_primary_services=0x0000883b +--define_symbol gatt_client_discover_primary_services_by_uuid128=0x0000886d +--define_symbol gatt_client_discover_primary_services_by_uuid16=0x000088b1 +--define_symbol gatt_client_execute_write=0x000088ed +--define_symbol gatt_client_find_included_services_for_service=0x00008913 +--define_symbol gatt_client_get_mtu=0x00008941 +--define_symbol gatt_client_is_ready=0x000089e9 +--define_symbol gatt_client_listen_for_characteristic_value_updates=0x000089ff +--define_symbol gatt_client_prepare_write=0x00008a23 +--define_symbol gatt_client_pts_suppress_mtu_exchange=0x00008a61 +--define_symbol gatt_client_read_characteristic_descriptor_using_descriptor_handle=0x00008a6d +--define_symbol gatt_client_read_long_characteristic_descriptor_using_descriptor_handle=0x00008a97 +--define_symbol gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x00008a9d +--define_symbol gatt_client_read_long_value_of_characteristic_using_value_handle=0x00008acb +--define_symbol gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset=0x00008ad1 +--define_symbol gatt_client_read_multiple_characteristic_values=0x00008aff +--define_symbol gatt_client_read_value_of_characteristic_using_value_handle=0x00008b2f +--define_symbol gatt_client_read_value_of_characteristics_by_uuid128=0x00008b5d +--define_symbol gatt_client_read_value_of_characteristics_by_uuid16=0x00008ba9 +--define_symbol gatt_client_register_handler=0x00008bf5 +--define_symbol gatt_client_reliable_write_long_value_of_characteristic=0x00008c01 +--define_symbol gatt_client_signed_write_without_response=0x0000902d +--define_symbol gatt_client_write_characteristic_descriptor_using_descriptor_handle=0x000090f1 +--define_symbol gatt_client_write_client_characteristic_configuration=0x0000912b +--define_symbol gatt_client_write_long_characteristic_descriptor_using_descriptor_handle=0x0000917d +--define_symbol gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x0000918d +--define_symbol gatt_client_write_long_value_of_characteristic=0x000091c9 +--define_symbol gatt_client_write_long_value_of_characteristic_with_offset=0x000091d9 +--define_symbol gatt_client_write_value_of_characteristic=0x00009215 +--define_symbol gatt_client_write_value_of_characteristic_without_response=0x0000924b +--define_symbol hci_add_event_handler=0x0000a725 +--define_symbol hci_power_control=0x0000aed5 +--define_symbol hci_register_acl_packet_handler=0x0000b089 +--define_symbol kv_commit=0x0000b6d5 +--define_symbol kv_get=0x0000b72d +--define_symbol kv_init=0x0000b745 +--define_symbol kv_put=0x0000b7ad +--define_symbol kv_remove=0x0000b825 +--define_symbol kv_remove_all=0x0000b861 +--define_symbol kv_value_modified=0x0000b8a5 +--define_symbol kv_visit=0x0000b8a9 +--define_symbol l2cap_can_send_fixed_channel_packet_now=0x0000b969 +--define_symbol l2cap_can_send_packet_now=0x0000b96d +--define_symbol l2cap_create_channel=0x0000bb25 +--define_symbol l2cap_disconnect=0x0000bc5d +--define_symbol l2cap_get_remote_mtu_for_local_cid=0x0000bf01 +--define_symbol l2cap_init=0x0000c381 +--define_symbol l2cap_le_send_flow_control_credit=0x0000c3c9 +--define_symbol l2cap_max_le_mtu=0x0000c62d +--define_symbol l2cap_max_mtu=0x0000c631 +--define_symbol l2cap_next_local_cid=0x0000c635 +--define_symbol l2cap_next_sig_id=0x0000c645 +--define_symbol l2cap_register_fixed_channel=0x0000c6dd +--define_symbol l2cap_register_packet_handler=0x0000c6f9 +--define_symbol l2cap_register_service=0x0000c705 +--define_symbol l2cap_request_can_send_fix_channel_now_event=0x0000c7ed +--define_symbol l2cap_request_can_send_now_event=0x0000c811 +--define_symbol l2cap_request_connection_parameter_update=0x0000c82b +--define_symbol l2cap_require_security_level_2_for_outgoing_sdp=0x0000c85d +--define_symbol l2cap_send=0x0000cc21 +--define_symbol l2cap_send_connectionless=0x0000cc99 +--define_symbol l2cap_send_connectionless3=0x0000cd29 +--define_symbol l2cap_send_echo_request=0x0000cdc1 +--define_symbol l2cap_send_signaling_le=0x0000ce25 +--define_symbol l2cap_unregister_service=0x0000ce7d +--define_symbol ll_hint_on_ce_len=0x0000d061 +--define_symbol ll_set_adv_coded_scheme=0x0000d345 +--define_symbol ll_set_def_antenna=0x0000d375 +--define_symbol ll_set_initiating_coded_scheme=0x0000d391 +--define_symbol nibble_for_char=0x0001daa1 +--define_symbol platform_calibrate_32k=0x0001db57 +--define_symbol platform_config=0x0001db5d +--define_symbol platform_get_heap_status=0x0001dc05 +--define_symbol platform_get_us_time=0x0001dc1d +--define_symbol platform_get_version=0x0001dc21 +--define_symbol platform_hrng=0x0001dc29 +--define_symbol platform_patch_rf_init_data=0x0001dc31 +--define_symbol platform_printf=0x0001dc3d +--define_symbol platform_raise_assertion=0x0001dc51 +--define_symbol platform_rand=0x0001dc65 +--define_symbol platform_read_info=0x0001dc69 +--define_symbol platform_read_persistent_reg=0x0001dc85 +--define_symbol platform_reset=0x0001dc95 +--define_symbol platform_set_evt_callback=0x0001dcc9 +--define_symbol platform_set_irq_callback=0x0001dcdd +--define_symbol platform_set_rf_clk_source=0x0001dd15 +--define_symbol platform_set_rf_init_data=0x0001dd21 +--define_symbol platform_set_rf_power_mapping=0x0001dd2d +--define_symbol platform_shutdown=0x0001dd39 +--define_symbol platform_switch_app=0x0001dd3d +--define_symbol platform_trace_raw=0x0001dd69 +--define_symbol platform_write_persistent_reg=0x0001dd7d +--define_symbol printf_hexdump=0x0001dd8d +--define_symbol pvPortMalloc=0x0001e889 +--define_symbol pvTaskIncrementMutexHeldCount=0x0001e971 +--define_symbol pvTimerGetTimerID=0x0001e989 +--define_symbol pxPortInitialiseStack=0x0001e9b5 +--define_symbol reverse_128=0x0001eb95 +--define_symbol reverse_24=0x0001eb9b +--define_symbol reverse_48=0x0001eba1 +--define_symbol reverse_56=0x0001eba7 +--define_symbol reverse_64=0x0001ebad +--define_symbol reverse_bd_addr=0x0001ebb3 +--define_symbol reverse_bytes=0x0001ebb9 +--define_symbol sm_add_event_handler=0x0001ee59 +--define_symbol sm_address_resolution_lookup=0x0001ef85 +--define_symbol sm_authenticated=0x0001f05f +--define_symbol sm_authorization_decline=0x0001f06d +--define_symbol sm_authorization_grant=0x0001f08d +--define_symbol sm_authorization_state=0x0001f0ad +--define_symbol sm_bonding_decline=0x0001f0c9 +--define_symbol sm_config=0x0001f4a1 +--define_symbol sm_encryption_key_size=0x0001f5ad +--define_symbol sm_just_works_confirm=0x0001fd7d +--define_symbol sm_le_device_key=0x0001ffcd +--define_symbol sm_passkey_input=0x00020065 +--define_symbol sm_private_random_address_generation_get=0x000203f1 +--define_symbol sm_private_random_address_generation_get_mode=0x000203f9 +--define_symbol sm_private_random_address_generation_set_mode=0x00020405 +--define_symbol sm_private_random_address_generation_set_update_period=0x0002042d +--define_symbol sm_register_oob_data_callback=0x00020465 +--define_symbol sm_request_pairing=0x00020471 +--define_symbol sm_send_security_request=0x00020eab +--define_symbol sm_set_accepted_stk_generation_methods=0x00020ed1 +--define_symbol sm_set_authentication_requirements=0x00020edd +--define_symbol sm_set_encryption_key_size_range=0x00020ee9 +--define_symbol sscanf_bd_addr=0x000211e5 +--define_symbol sysSetPublicDeviceAddr=0x00021501 +--define_symbol uuid128_to_str=0x00021bdd +--define_symbol uuid_add_bluetooth_prefix=0x00021c35 +--define_symbol uuid_has_bluetooth_prefix=0x00021c55 +--define_symbol uxQueueMessagesWaiting=0x00021c99 +--define_symbol uxQueueMessagesWaitingFromISR=0x00021cc1 +--define_symbol uxQueueSpacesAvailable=0x00021cdd +--define_symbol vPortEnterCritical=0x00021da1 +--define_symbol vPortExitCritical=0x00021de1 +--define_symbol vPortFree=0x00021e0d +--define_symbol vPortSuppressTicksAndSleep=0x00021ea1 +--define_symbol vPortValidateInterruptPriority=0x00021f79 +--define_symbol vQueueDelete=0x00021fcd +--define_symbol vQueueWaitForMessageRestricted=0x00021ff9 +--define_symbol vTaskDelay=0x00022041 +--define_symbol vTaskInternalSetTimeOutState=0x0002208d +--define_symbol vTaskMissedYield=0x0002209d +--define_symbol vTaskPlaceOnEventList=0x000220a9 +--define_symbol vTaskPlaceOnEventListRestricted=0x000220e1 +--define_symbol vTaskPriorityDisinheritAfterTimeout=0x00022121 +--define_symbol vTaskStartScheduler=0x000221cd +--define_symbol vTaskStepTick=0x0002225d +--define_symbol vTaskSuspendAll=0x0002228d +--define_symbol vTaskSwitchContext=0x0002229d +--define_symbol xPortStartScheduler=0x00022345 +--define_symbol xQueueAddToSet=0x00022401 +--define_symbol xQueueCreateCountingSemaphore=0x00022425 +--define_symbol xQueueCreateCountingSemaphoreStatic=0x00022461 +--define_symbol xQueueCreateMutex=0x000224a5 +--define_symbol xQueueCreateMutexStatic=0x000224bb +--define_symbol xQueueCreateSet=0x000224d5 +--define_symbol xQueueGenericCreate=0x000224dd +--define_symbol xQueueGenericCreateStatic=0x00022529 +--define_symbol xQueueGenericReset=0x00022591 +--define_symbol xQueueGenericSend=0x0002261d +--define_symbol xQueueGenericSendFromISR=0x00022789 +--define_symbol xQueueGiveFromISR=0x00022849 +--define_symbol xQueueGiveMutexRecursive=0x000228ed +--define_symbol xQueueIsQueueEmptyFromISR=0x0002292d +--define_symbol xQueueIsQueueFullFromISR=0x00022951 +--define_symbol xQueuePeek=0x00022979 +--define_symbol xQueuePeekFromISR=0x00022aa1 +--define_symbol xQueueReceive=0x00022b0d +--define_symbol xQueueReceiveFromISR=0x00022c39 +--define_symbol xQueueRemoveFromSet=0x00022ccd +--define_symbol xQueueSelectFromSet=0x00022cef +--define_symbol xQueueSelectFromSetFromISR=0x00022d01 +--define_symbol xQueueSemaphoreTake=0x00022d15 +--define_symbol xQueueTakeMutexRecursive=0x00022e81 +--define_symbol xTaskCheckForTimeOut=0x00022ec5 +--define_symbol xTaskCreate=0x00022f35 +--define_symbol xTaskCreateStatic=0x00022f91 +--define_symbol xTaskGetCurrentTaskHandle=0x00023001 +--define_symbol xTaskGetSchedulerState=0x0002300d +--define_symbol xTaskGetTickCount=0x00023029 +--define_symbol xTaskGetTickCountFromISR=0x00023035 +--define_symbol xTaskIncrementTick=0x00023045 +--define_symbol xTaskPriorityDisinherit=0x00023111 +--define_symbol xTaskPriorityInherit=0x000231a5 +--define_symbol xTaskRemoveFromEventList=0x00023239 +--define_symbol xTaskResumeAll=0x000232b9 +--define_symbol xTimerCreate=0x00023381 +--define_symbol xTimerCreateStatic=0x000233b5 +--define_symbol xTimerCreateTimerTask=0x000233ed +--define_symbol xTimerGenericCommand=0x00023459 +--define_symbol xTimerGetExpiryTime=0x000234c9 diff --git a/bundles/typical/ING9188xx/symdefs.m b/bundles/typical/ING9188xx/symdefs.m new file mode 100644 index 000000000..a933ae62d --- /dev/null +++ b/bundles/typical/ING9188xx/symdefs.m @@ -0,0 +1,282 @@ +## ARM Linker, 5.03 [Build 76]: Last Updated: Thu Oct 17 00:00:00 2019 +0x00005ab9 T att_dispatch_client_can_send_now +0x00005abf T att_dispatch_client_request_can_send_now_event +0x00005ac5 T att_dispatch_register_client +0x00005ad9 T att_dispatch_register_server +0x00005aed T att_dispatch_server_can_send_now +0x00005af3 T att_dispatch_server_request_can_send_now_event +0x00005bb1 T att_emit_general_event +0x000062e9 T att_server_can_send_packet_now +0x000062ed T att_server_get_mtu +0x00006361 T att_server_indicate +0x000063e5 T att_server_init +0x00006421 T att_server_notify +0x00006509 T att_server_register_packet_handler +0x00006515 T att_server_request_can_send_now_event +0x00006531 T att_set_db +0x00006545 T att_set_read_callback +0x00006551 T att_set_write_callback +0x00006695 T bd_addr_cmp +0x0000669b T bd_addr_copy +0x000066a5 T bd_addr_to_str +0x000066dd T big_endian_read_16 +0x000066e5 T big_endian_read_32 +0x000066f9 T big_endian_store_16 +0x00006705 T big_endian_store_32 +0x000069d9 T btstack_memory_pool_create +0x00006a01 T btstack_memory_pool_free +0x00006a61 T btstack_memory_pool_get +0x00006a89 T btstack_push_user_msg +0x00006d01 T char_for_nibble +0x00006f91 T eTaskConfirmSleepModeStatus +0x000076a5 T gap_add_dev_to_periodic_list +0x000076bd T gap_add_whitelist +0x000076d1 T gap_aes_encrypt +0x000076f9 T gap_clear_white_lists +0x00007709 T gap_clr_adv_set +0x00007719 T gap_clr_periodic_adv_list +0x00007745 T gap_create_connection_cancel +0x00007755 T gap_default_periodic_adv_sync_transfer_param +0x0000776d T gap_disconnect +0x00007799 T gap_disconnect_all +0x00007841 T gap_ext_create_connection +0x00007905 T gap_get_connection_parameter_range +0x00007941 T gap_le_read_channel_map +0x000079b5 T gap_periodic_adv_create_sync +0x000079d9 T gap_periodic_adv_create_sync_cancel +0x000079e9 T gap_periodic_adv_set_info_transfer +0x00007a01 T gap_periodic_adv_sync_transfer +0x00007a19 T gap_periodic_adv_sync_transfer_param +0x00007a35 T gap_periodic_adv_term_sync +0x00007ac9 T gap_read_antenna_info +0x00007ad9 T gap_read_periodic_adv_list_size +0x00007ae9 T gap_read_phy +0x00007afd T gap_read_remote_info +0x00007b11 T gap_read_remote_used_features +0x00007b25 T gap_read_rssi +0x00007b39 T gap_remove_whitelist +0x00007bc5 T gap_rmv_adv_set +0x00007bd9 T gap_rmv_dev_from_periodic_list +0x00007c19 T gap_set_adv_set_random_addr +0x00007c65 T gap_set_connection_cte_request_enable +0x00007c81 T gap_set_connection_cte_response_enable +0x00007c95 T gap_set_connection_cte_rx_param +0x00007cf1 T gap_set_connection_cte_tx_param +0x00007d45 T gap_set_connection_parameter_range +0x00007d5d T gap_set_connectionless_cte_tx_enable +0x00007d71 T gap_set_connectionless_cte_tx_param +0x00007dd1 T gap_set_connectionless_iq_sampling_enable +0x00007e35 T gap_set_def_phy +0x00007e4d T gap_set_ext_adv_data +0x00007e65 T gap_set_ext_adv_enable +0x00007ee1 T gap_set_ext_adv_para +0x00007fc1 T gap_set_ext_scan_enable +0x00007fd9 T gap_set_ext_scan_para +0x00008081 T gap_set_ext_scan_response_data +0x00008099 T gap_set_host_channel_classification +0x000080ad T gap_set_periodic_adv_data +0x00008121 T gap_set_periodic_adv_enable +0x00008135 T gap_set_periodic_adv_para +0x0000814d T gap_set_periodic_adv_rx_enable +0x00008161 T gap_set_phy +0x0000817d T gap_set_random_device_address +0x000081e1 T gap_start_ccm +0x00008215 T gap_update_connection_parameters +0x000086fd T gatt_client_cancel_write +0x00008723 T gatt_client_discover_characteristic_descriptors +0x00008765 T gatt_client_discover_characteristics_for_handle_range_by_uuid128 +0x000087b5 T gatt_client_discover_characteristics_for_handle_range_by_uuid16 +0x00008805 T gatt_client_discover_characteristics_for_service +0x0000883b T gatt_client_discover_primary_services +0x0000886d T gatt_client_discover_primary_services_by_uuid128 +0x000088b1 T gatt_client_discover_primary_services_by_uuid16 +0x000088ed T gatt_client_execute_write +0x00008913 T gatt_client_find_included_services_for_service +0x00008941 T gatt_client_get_mtu +0x000089e9 T gatt_client_is_ready +0x000089ff T gatt_client_listen_for_characteristic_value_updates +0x00008a23 T gatt_client_prepare_write +0x00008a61 T gatt_client_pts_suppress_mtu_exchange +0x00008a6d T gatt_client_read_characteristic_descriptor_using_descriptor_handle +0x00008a97 T gatt_client_read_long_characteristic_descriptor_using_descriptor_handle +0x00008a9d T gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset +0x00008acb T gatt_client_read_long_value_of_characteristic_using_value_handle +0x00008ad1 T gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset +0x00008aff T gatt_client_read_multiple_characteristic_values +0x00008b2f T gatt_client_read_value_of_characteristic_using_value_handle +0x00008b5d T gatt_client_read_value_of_characteristics_by_uuid128 +0x00008ba9 T gatt_client_read_value_of_characteristics_by_uuid16 +0x00008bf5 T gatt_client_register_handler +0x00008c01 T gatt_client_reliable_write_long_value_of_characteristic +0x0000902d T gatt_client_signed_write_without_response +0x000090f1 T gatt_client_write_characteristic_descriptor_using_descriptor_handle +0x0000912b T gatt_client_write_client_characteristic_configuration +0x0000917d T gatt_client_write_long_characteristic_descriptor_using_descriptor_handle +0x0000918d T gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset +0x000091c9 T gatt_client_write_long_value_of_characteristic +0x000091d9 T gatt_client_write_long_value_of_characteristic_with_offset +0x00009215 T gatt_client_write_value_of_characteristic +0x0000924b T gatt_client_write_value_of_characteristic_without_response +0x0000a725 T hci_add_event_handler +0x0000aed5 T hci_power_control +0x0000b089 T hci_register_acl_packet_handler +0x0000b6d5 T kv_commit +0x0000b72d T kv_get +0x0000b745 T kv_init +0x0000b7ad T kv_put +0x0000b825 T kv_remove +0x0000b861 T kv_remove_all +0x0000b8a5 T kv_value_modified +0x0000b8a9 T kv_visit +0x0000b969 T l2cap_can_send_fixed_channel_packet_now +0x0000b96d T l2cap_can_send_packet_now +0x0000bb25 T l2cap_create_channel +0x0000bc5d T l2cap_disconnect +0x0000bf01 T l2cap_get_remote_mtu_for_local_cid +0x0000c381 T l2cap_init +0x0000c3c9 T l2cap_le_send_flow_control_credit +0x0000c62d T l2cap_max_le_mtu +0x0000c631 T l2cap_max_mtu +0x0000c635 T l2cap_next_local_cid +0x0000c645 T l2cap_next_sig_id +0x0000c6dd T l2cap_register_fixed_channel +0x0000c6f9 T l2cap_register_packet_handler +0x0000c705 T l2cap_register_service +0x0000c7ed T l2cap_request_can_send_fix_channel_now_event +0x0000c811 T l2cap_request_can_send_now_event +0x0000c82b T l2cap_request_connection_parameter_update +0x0000c85d T l2cap_require_security_level_2_for_outgoing_sdp +0x0000cc21 T l2cap_send +0x0000cc99 T l2cap_send_connectionless +0x0000cd29 T l2cap_send_connectionless3 +0x0000cdc1 T l2cap_send_echo_request +0x0000ce25 T l2cap_send_signaling_le +0x0000ce7d T l2cap_unregister_service +0x0000d061 T ll_hint_on_ce_len +0x0000d345 T ll_set_adv_coded_scheme +0x0000d375 T ll_set_def_antenna +0x0000d391 T ll_set_initiating_coded_scheme +0x0001daa1 T nibble_for_char +0x0001db57 T platform_calibrate_32k +0x0001db5d T platform_config +0x0001dc05 T platform_get_heap_status +0x0001dc1d T platform_get_us_time +0x0001dc21 T platform_get_version +0x0001dc29 T platform_hrng +0x0001dc31 T platform_patch_rf_init_data +0x0001dc3d T platform_printf +0x0001dc51 T platform_raise_assertion +0x0001dc65 T platform_rand +0x0001dc69 T platform_read_info +0x0001dc85 T platform_read_persistent_reg +0x0001dc95 T platform_reset +0x0001dcc9 T platform_set_evt_callback +0x0001dcdd T platform_set_irq_callback +0x0001dd15 T platform_set_rf_clk_source +0x0001dd21 T platform_set_rf_init_data +0x0001dd2d T platform_set_rf_power_mapping +0x0001dd39 T platform_shutdown +0x0001dd3d T platform_switch_app +0x0001dd69 T platform_trace_raw +0x0001dd7d T platform_write_persistent_reg +0x0001dd8d T printf_hexdump +0x0001e889 T pvPortMalloc +0x0001e971 T pvTaskIncrementMutexHeldCount +0x0001e989 T pvTimerGetTimerID +0x0001e9b5 T pxPortInitialiseStack +0x0001eb95 T reverse_128 +0x0001eb9b T reverse_24 +0x0001eba1 T reverse_48 +0x0001eba7 T reverse_56 +0x0001ebad T reverse_64 +0x0001ebb3 T reverse_bd_addr +0x0001ebb9 T reverse_bytes +0x0001ee59 T sm_add_event_handler +0x0001ef85 T sm_address_resolution_lookup +0x0001f05f T sm_authenticated +0x0001f06d T sm_authorization_decline +0x0001f08d T sm_authorization_grant +0x0001f0ad T sm_authorization_state +0x0001f0c9 T sm_bonding_decline +0x0001f4a1 T sm_config +0x0001f5ad T sm_encryption_key_size +0x0001fd7d T sm_just_works_confirm +0x0001ffcd T sm_le_device_key +0x00020065 T sm_passkey_input +0x000203f1 T sm_private_random_address_generation_get +0x000203f9 T sm_private_random_address_generation_get_mode +0x00020405 T sm_private_random_address_generation_set_mode +0x0002042d T sm_private_random_address_generation_set_update_period +0x00020465 T sm_register_oob_data_callback +0x00020471 T sm_request_pairing +0x00020eab T sm_send_security_request +0x00020ed1 T sm_set_accepted_stk_generation_methods +0x00020edd T sm_set_authentication_requirements +0x00020ee9 T sm_set_encryption_key_size_range +0x000211e5 T sscanf_bd_addr +0x00021501 T sysSetPublicDeviceAddr +0x00021bdd T uuid128_to_str +0x00021c35 T uuid_add_bluetooth_prefix +0x00021c55 T uuid_has_bluetooth_prefix +0x00021c99 T uxQueueMessagesWaiting +0x00021cc1 T uxQueueMessagesWaitingFromISR +0x00021cdd T uxQueueSpacesAvailable +0x00021da1 T vPortEnterCritical +0x00021de1 T vPortExitCritical +0x00021e0d T vPortFree +0x00021ea1 T vPortSuppressTicksAndSleep +0x00021f79 T vPortValidateInterruptPriority +0x00021fcd T vQueueDelete +0x00021ff9 T vQueueWaitForMessageRestricted +0x00022041 T vTaskDelay +0x0002208d T vTaskInternalSetTimeOutState +0x0002209d T vTaskMissedYield +0x000220a9 T vTaskPlaceOnEventList +0x000220e1 T vTaskPlaceOnEventListRestricted +0x00022121 T vTaskPriorityDisinheritAfterTimeout +0x000221cd T vTaskStartScheduler +0x0002225d T vTaskStepTick +0x0002228d T vTaskSuspendAll +0x0002229d T vTaskSwitchContext +0x00022345 T xPortStartScheduler +0x00022401 T xQueueAddToSet +0x00022425 T xQueueCreateCountingSemaphore +0x00022461 T xQueueCreateCountingSemaphoreStatic +0x000224a5 T xQueueCreateMutex +0x000224bb T xQueueCreateMutexStatic +0x000224d5 T xQueueCreateSet +0x000224dd T xQueueGenericCreate +0x00022529 T xQueueGenericCreateStatic +0x00022591 T xQueueGenericReset +0x0002261d T xQueueGenericSend +0x00022789 T xQueueGenericSendFromISR +0x00022849 T xQueueGiveFromISR +0x000228ed T xQueueGiveMutexRecursive +0x0002292d T xQueueIsQueueEmptyFromISR +0x00022951 T xQueueIsQueueFullFromISR +0x00022979 T xQueuePeek +0x00022aa1 T xQueuePeekFromISR +0x00022b0d T xQueueReceive +0x00022c39 T xQueueReceiveFromISR +0x00022ccd T xQueueRemoveFromSet +0x00022cef T xQueueSelectFromSet +0x00022d01 T xQueueSelectFromSetFromISR +0x00022d15 T xQueueSemaphoreTake +0x00022e81 T xQueueTakeMutexRecursive +0x00022ec5 T xTaskCheckForTimeOut +0x00022f35 T xTaskCreate +0x00022f91 T xTaskCreateStatic +0x00023001 T xTaskGetCurrentTaskHandle +0x0002300d T xTaskGetSchedulerState +0x00023029 T xTaskGetTickCount +0x00023035 T xTaskGetTickCountFromISR +0x00023045 T xTaskIncrementTick +0x00023111 T xTaskPriorityDisinherit +0x000231a5 T xTaskPriorityInherit +0x00023239 T xTaskRemoveFromEventList +0x000232b9 T xTaskResumeAll +0x00023381 T xTimerCreate +0x000233b5 T xTimerCreateStatic +0x000233ed T xTimerCreateTimerTask +0x00023459 T xTimerGenericCommand +0x000234c9 T xTimerGetExpiryTime diff --git a/bundles/typical/ING9188xx/symdefs.s b/bundles/typical/ING9188xx/symdefs.s new file mode 100644 index 000000000..0804fa498 --- /dev/null +++ b/bundles/typical/ING9188xx/symdefs.s @@ -0,0 +1,281 @@ +--defsym:att_dispatch_client_can_send_now=0x00005ab9 +--defsym:att_dispatch_client_request_can_send_now_event=0x00005abf +--defsym:att_dispatch_register_client=0x00005ac5 +--defsym:att_dispatch_register_server=0x00005ad9 +--defsym:att_dispatch_server_can_send_now=0x00005aed +--defsym:att_dispatch_server_request_can_send_now_event=0x00005af3 +--defsym:att_emit_general_event=0x00005bb1 +--defsym:att_server_can_send_packet_now=0x000062e9 +--defsym:att_server_get_mtu=0x000062ed +--defsym:att_server_indicate=0x00006361 +--defsym:att_server_init=0x000063e5 +--defsym:att_server_notify=0x00006421 +--defsym:att_server_register_packet_handler=0x00006509 +--defsym:att_server_request_can_send_now_event=0x00006515 +--defsym:att_set_db=0x00006531 +--defsym:att_set_read_callback=0x00006545 +--defsym:att_set_write_callback=0x00006551 +--defsym:bd_addr_cmp=0x00006695 +--defsym:bd_addr_copy=0x0000669b +--defsym:bd_addr_to_str=0x000066a5 +--defsym:big_endian_read_16=0x000066dd +--defsym:big_endian_read_32=0x000066e5 +--defsym:big_endian_store_16=0x000066f9 +--defsym:big_endian_store_32=0x00006705 +--defsym:btstack_memory_pool_create=0x000069d9 +--defsym:btstack_memory_pool_free=0x00006a01 +--defsym:btstack_memory_pool_get=0x00006a61 +--defsym:btstack_push_user_msg=0x00006a89 +--defsym:char_for_nibble=0x00006d01 +--defsym:eTaskConfirmSleepModeStatus=0x00006f91 +--defsym:gap_add_dev_to_periodic_list=0x000076a5 +--defsym:gap_add_whitelist=0x000076bd +--defsym:gap_aes_encrypt=0x000076d1 +--defsym:gap_clear_white_lists=0x000076f9 +--defsym:gap_clr_adv_set=0x00007709 +--defsym:gap_clr_periodic_adv_list=0x00007719 +--defsym:gap_create_connection_cancel=0x00007745 +--defsym:gap_default_periodic_adv_sync_transfer_param=0x00007755 +--defsym:gap_disconnect=0x0000776d +--defsym:gap_disconnect_all=0x00007799 +--defsym:gap_ext_create_connection=0x00007841 +--defsym:gap_get_connection_parameter_range=0x00007905 +--defsym:gap_le_read_channel_map=0x00007941 +--defsym:gap_periodic_adv_create_sync=0x000079b5 +--defsym:gap_periodic_adv_create_sync_cancel=0x000079d9 +--defsym:gap_periodic_adv_set_info_transfer=0x000079e9 +--defsym:gap_periodic_adv_sync_transfer=0x00007a01 +--defsym:gap_periodic_adv_sync_transfer_param=0x00007a19 +--defsym:gap_periodic_adv_term_sync=0x00007a35 +--defsym:gap_read_antenna_info=0x00007ac9 +--defsym:gap_read_periodic_adv_list_size=0x00007ad9 +--defsym:gap_read_phy=0x00007ae9 +--defsym:gap_read_remote_info=0x00007afd +--defsym:gap_read_remote_used_features=0x00007b11 +--defsym:gap_read_rssi=0x00007b25 +--defsym:gap_remove_whitelist=0x00007b39 +--defsym:gap_rmv_adv_set=0x00007bc5 +--defsym:gap_rmv_dev_from_periodic_list=0x00007bd9 +--defsym:gap_set_adv_set_random_addr=0x00007c19 +--defsym:gap_set_connection_cte_request_enable=0x00007c65 +--defsym:gap_set_connection_cte_response_enable=0x00007c81 +--defsym:gap_set_connection_cte_rx_param=0x00007c95 +--defsym:gap_set_connection_cte_tx_param=0x00007cf1 +--defsym:gap_set_connection_parameter_range=0x00007d45 +--defsym:gap_set_connectionless_cte_tx_enable=0x00007d5d +--defsym:gap_set_connectionless_cte_tx_param=0x00007d71 +--defsym:gap_set_connectionless_iq_sampling_enable=0x00007dd1 +--defsym:gap_set_def_phy=0x00007e35 +--defsym:gap_set_ext_adv_data=0x00007e4d +--defsym:gap_set_ext_adv_enable=0x00007e65 +--defsym:gap_set_ext_adv_para=0x00007ee1 +--defsym:gap_set_ext_scan_enable=0x00007fc1 +--defsym:gap_set_ext_scan_para=0x00007fd9 +--defsym:gap_set_ext_scan_response_data=0x00008081 +--defsym:gap_set_host_channel_classification=0x00008099 +--defsym:gap_set_periodic_adv_data=0x000080ad +--defsym:gap_set_periodic_adv_enable=0x00008121 +--defsym:gap_set_periodic_adv_para=0x00008135 +--defsym:gap_set_periodic_adv_rx_enable=0x0000814d +--defsym:gap_set_phy=0x00008161 +--defsym:gap_set_random_device_address=0x0000817d +--defsym:gap_start_ccm=0x000081e1 +--defsym:gap_update_connection_parameters=0x00008215 +--defsym:gatt_client_cancel_write=0x000086fd +--defsym:gatt_client_discover_characteristic_descriptors=0x00008723 +--defsym:gatt_client_discover_characteristics_for_handle_range_by_uuid128=0x00008765 +--defsym:gatt_client_discover_characteristics_for_handle_range_by_uuid16=0x000087b5 +--defsym:gatt_client_discover_characteristics_for_service=0x00008805 +--defsym:gatt_client_discover_primary_services=0x0000883b +--defsym:gatt_client_discover_primary_services_by_uuid128=0x0000886d +--defsym:gatt_client_discover_primary_services_by_uuid16=0x000088b1 +--defsym:gatt_client_execute_write=0x000088ed +--defsym:gatt_client_find_included_services_for_service=0x00008913 +--defsym:gatt_client_get_mtu=0x00008941 +--defsym:gatt_client_is_ready=0x000089e9 +--defsym:gatt_client_listen_for_characteristic_value_updates=0x000089ff +--defsym:gatt_client_prepare_write=0x00008a23 +--defsym:gatt_client_pts_suppress_mtu_exchange=0x00008a61 +--defsym:gatt_client_read_characteristic_descriptor_using_descriptor_handle=0x00008a6d +--defsym:gatt_client_read_long_characteristic_descriptor_using_descriptor_handle=0x00008a97 +--defsym:gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x00008a9d +--defsym:gatt_client_read_long_value_of_characteristic_using_value_handle=0x00008acb +--defsym:gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset=0x00008ad1 +--defsym:gatt_client_read_multiple_characteristic_values=0x00008aff +--defsym:gatt_client_read_value_of_characteristic_using_value_handle=0x00008b2f +--defsym:gatt_client_read_value_of_characteristics_by_uuid128=0x00008b5d +--defsym:gatt_client_read_value_of_characteristics_by_uuid16=0x00008ba9 +--defsym:gatt_client_register_handler=0x00008bf5 +--defsym:gatt_client_reliable_write_long_value_of_characteristic=0x00008c01 +--defsym:gatt_client_signed_write_without_response=0x0000902d +--defsym:gatt_client_write_characteristic_descriptor_using_descriptor_handle=0x000090f1 +--defsym:gatt_client_write_client_characteristic_configuration=0x0000912b +--defsym:gatt_client_write_long_characteristic_descriptor_using_descriptor_handle=0x0000917d +--defsym:gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x0000918d +--defsym:gatt_client_write_long_value_of_characteristic=0x000091c9 +--defsym:gatt_client_write_long_value_of_characteristic_with_offset=0x000091d9 +--defsym:gatt_client_write_value_of_characteristic=0x00009215 +--defsym:gatt_client_write_value_of_characteristic_without_response=0x0000924b +--defsym:hci_add_event_handler=0x0000a725 +--defsym:hci_power_control=0x0000aed5 +--defsym:hci_register_acl_packet_handler=0x0000b089 +--defsym:kv_commit=0x0000b6d5 +--defsym:kv_get=0x0000b72d +--defsym:kv_init=0x0000b745 +--defsym:kv_put=0x0000b7ad +--defsym:kv_remove=0x0000b825 +--defsym:kv_remove_all=0x0000b861 +--defsym:kv_value_modified=0x0000b8a5 +--defsym:kv_visit=0x0000b8a9 +--defsym:l2cap_can_send_fixed_channel_packet_now=0x0000b969 +--defsym:l2cap_can_send_packet_now=0x0000b96d +--defsym:l2cap_create_channel=0x0000bb25 +--defsym:l2cap_disconnect=0x0000bc5d +--defsym:l2cap_get_remote_mtu_for_local_cid=0x0000bf01 +--defsym:l2cap_init=0x0000c381 +--defsym:l2cap_le_send_flow_control_credit=0x0000c3c9 +--defsym:l2cap_max_le_mtu=0x0000c62d +--defsym:l2cap_max_mtu=0x0000c631 +--defsym:l2cap_next_local_cid=0x0000c635 +--defsym:l2cap_next_sig_id=0x0000c645 +--defsym:l2cap_register_fixed_channel=0x0000c6dd +--defsym:l2cap_register_packet_handler=0x0000c6f9 +--defsym:l2cap_register_service=0x0000c705 +--defsym:l2cap_request_can_send_fix_channel_now_event=0x0000c7ed +--defsym:l2cap_request_can_send_now_event=0x0000c811 +--defsym:l2cap_request_connection_parameter_update=0x0000c82b +--defsym:l2cap_require_security_level_2_for_outgoing_sdp=0x0000c85d +--defsym:l2cap_send=0x0000cc21 +--defsym:l2cap_send_connectionless=0x0000cc99 +--defsym:l2cap_send_connectionless3=0x0000cd29 +--defsym:l2cap_send_echo_request=0x0000cdc1 +--defsym:l2cap_send_signaling_le=0x0000ce25 +--defsym:l2cap_unregister_service=0x0000ce7d +--defsym:ll_hint_on_ce_len=0x0000d061 +--defsym:ll_set_adv_coded_scheme=0x0000d345 +--defsym:ll_set_def_antenna=0x0000d375 +--defsym:ll_set_initiating_coded_scheme=0x0000d391 +--defsym:nibble_for_char=0x0001daa1 +--defsym:platform_calibrate_32k=0x0001db57 +--defsym:platform_config=0x0001db5d +--defsym:platform_get_heap_status=0x0001dc05 +--defsym:platform_get_us_time=0x0001dc1d +--defsym:platform_get_version=0x0001dc21 +--defsym:platform_hrng=0x0001dc29 +--defsym:platform_patch_rf_init_data=0x0001dc31 +--defsym:platform_printf=0x0001dc3d +--defsym:platform_raise_assertion=0x0001dc51 +--defsym:platform_rand=0x0001dc65 +--defsym:platform_read_info=0x0001dc69 +--defsym:platform_read_persistent_reg=0x0001dc85 +--defsym:platform_reset=0x0001dc95 +--defsym:platform_set_evt_callback=0x0001dcc9 +--defsym:platform_set_irq_callback=0x0001dcdd +--defsym:platform_set_rf_clk_source=0x0001dd15 +--defsym:platform_set_rf_init_data=0x0001dd21 +--defsym:platform_set_rf_power_mapping=0x0001dd2d +--defsym:platform_shutdown=0x0001dd39 +--defsym:platform_switch_app=0x0001dd3d +--defsym:platform_trace_raw=0x0001dd69 +--defsym:platform_write_persistent_reg=0x0001dd7d +--defsym:printf_hexdump=0x0001dd8d +--defsym:pvPortMalloc=0x0001e889 +--defsym:pvTaskIncrementMutexHeldCount=0x0001e971 +--defsym:pvTimerGetTimerID=0x0001e989 +--defsym:pxPortInitialiseStack=0x0001e9b5 +--defsym:reverse_128=0x0001eb95 +--defsym:reverse_24=0x0001eb9b +--defsym:reverse_48=0x0001eba1 +--defsym:reverse_56=0x0001eba7 +--defsym:reverse_64=0x0001ebad +--defsym:reverse_bd_addr=0x0001ebb3 +--defsym:reverse_bytes=0x0001ebb9 +--defsym:sm_add_event_handler=0x0001ee59 +--defsym:sm_address_resolution_lookup=0x0001ef85 +--defsym:sm_authenticated=0x0001f05f +--defsym:sm_authorization_decline=0x0001f06d +--defsym:sm_authorization_grant=0x0001f08d +--defsym:sm_authorization_state=0x0001f0ad +--defsym:sm_bonding_decline=0x0001f0c9 +--defsym:sm_config=0x0001f4a1 +--defsym:sm_encryption_key_size=0x0001f5ad +--defsym:sm_just_works_confirm=0x0001fd7d +--defsym:sm_le_device_key=0x0001ffcd +--defsym:sm_passkey_input=0x00020065 +--defsym:sm_private_random_address_generation_get=0x000203f1 +--defsym:sm_private_random_address_generation_get_mode=0x000203f9 +--defsym:sm_private_random_address_generation_set_mode=0x00020405 +--defsym:sm_private_random_address_generation_set_update_period=0x0002042d +--defsym:sm_register_oob_data_callback=0x00020465 +--defsym:sm_request_pairing=0x00020471 +--defsym:sm_send_security_request=0x00020eab +--defsym:sm_set_accepted_stk_generation_methods=0x00020ed1 +--defsym:sm_set_authentication_requirements=0x00020edd +--defsym:sm_set_encryption_key_size_range=0x00020ee9 +--defsym:sscanf_bd_addr=0x000211e5 +--defsym:sysSetPublicDeviceAddr=0x00021501 +--defsym:uuid128_to_str=0x00021bdd +--defsym:uuid_add_bluetooth_prefix=0x00021c35 +--defsym:uuid_has_bluetooth_prefix=0x00021c55 +--defsym:uxQueueMessagesWaiting=0x00021c99 +--defsym:uxQueueMessagesWaitingFromISR=0x00021cc1 +--defsym:uxQueueSpacesAvailable=0x00021cdd +--defsym:vPortEnterCritical=0x00021da1 +--defsym:vPortExitCritical=0x00021de1 +--defsym:vPortFree=0x00021e0d +--defsym:vPortSuppressTicksAndSleep=0x00021ea1 +--defsym:vPortValidateInterruptPriority=0x00021f79 +--defsym:vQueueDelete=0x00021fcd +--defsym:vQueueWaitForMessageRestricted=0x00021ff9 +--defsym:vTaskDelay=0x00022041 +--defsym:vTaskInternalSetTimeOutState=0x0002208d +--defsym:vTaskMissedYield=0x0002209d +--defsym:vTaskPlaceOnEventList=0x000220a9 +--defsym:vTaskPlaceOnEventListRestricted=0x000220e1 +--defsym:vTaskPriorityDisinheritAfterTimeout=0x00022121 +--defsym:vTaskStartScheduler=0x000221cd +--defsym:vTaskStepTick=0x0002225d +--defsym:vTaskSuspendAll=0x0002228d +--defsym:vTaskSwitchContext=0x0002229d +--defsym:xPortStartScheduler=0x00022345 +--defsym:xQueueAddToSet=0x00022401 +--defsym:xQueueCreateCountingSemaphore=0x00022425 +--defsym:xQueueCreateCountingSemaphoreStatic=0x00022461 +--defsym:xQueueCreateMutex=0x000224a5 +--defsym:xQueueCreateMutexStatic=0x000224bb +--defsym:xQueueCreateSet=0x000224d5 +--defsym:xQueueGenericCreate=0x000224dd +--defsym:xQueueGenericCreateStatic=0x00022529 +--defsym:xQueueGenericReset=0x00022591 +--defsym:xQueueGenericSend=0x0002261d +--defsym:xQueueGenericSendFromISR=0x00022789 +--defsym:xQueueGiveFromISR=0x00022849 +--defsym:xQueueGiveMutexRecursive=0x000228ed +--defsym:xQueueIsQueueEmptyFromISR=0x0002292d +--defsym:xQueueIsQueueFullFromISR=0x00022951 +--defsym:xQueuePeek=0x00022979 +--defsym:xQueuePeekFromISR=0x00022aa1 +--defsym:xQueueReceive=0x00022b0d +--defsym:xQueueReceiveFromISR=0x00022c39 +--defsym:xQueueRemoveFromSet=0x00022ccd +--defsym:xQueueSelectFromSet=0x00022cef +--defsym:xQueueSelectFromSetFromISR=0x00022d01 +--defsym:xQueueSemaphoreTake=0x00022d15 +--defsym:xQueueTakeMutexRecursive=0x00022e81 +--defsym:xTaskCheckForTimeOut=0x00022ec5 +--defsym:xTaskCreate=0x00022f35 +--defsym:xTaskCreateStatic=0x00022f91 +--defsym:xTaskGetCurrentTaskHandle=0x00023001 +--defsym:xTaskGetSchedulerState=0x0002300d +--defsym:xTaskGetTickCount=0x00023029 +--defsym:xTaskGetTickCountFromISR=0x00023035 +--defsym:xTaskIncrementTick=0x00023045 +--defsym:xTaskPriorityDisinherit=0x00023111 +--defsym:xTaskPriorityInherit=0x000231a5 +--defsym:xTaskRemoveFromEventList=0x00023239 +--defsym:xTaskResumeAll=0x000232b9 +--defsym:xTimerCreate=0x00023381 +--defsym:xTimerCreateStatic=0x000233b5 +--defsym:xTimerCreateTimerTask=0x000233ed +--defsym:xTimerGenericCommand=0x00023459 +--defsym:xTimerGetExpiryTime=0x000234c9 diff --git a/bundles/typical/inc/att_db.h b/bundles/typical/inc/att_db.h index 1766aff40..e9423d68e 100644 --- a/bundles/typical/inc/att_db.h +++ b/bundles/typical/inc/att_db.h @@ -1,15 +1,15 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- + +/** @file +* @brief API for ATT server +* +* INGCHIPS confidential and proprietary. +* COPYRIGHT (c) 2018 by INGCHIPS +* +* All rights are reserved. Reproduction in whole or in part is +* prohibited without the written consent of the copyright owner. +* +* +*/ #ifndef __ATT_H #define __ATT_H @@ -22,6 +22,12 @@ extern "C" { #endif +/** + * @brief Bluetooth + * @defgroup Bluetooth_att_db + * @ingroup bluetooth_host + * @{ + */ // custom BTstack error codes #define ATT_ERROR_HCI_DISCONNECT_RECEIVED 0x1f @@ -29,76 +35,80 @@ extern "C" { #define ATT_ERROR_DATA_MISMATCH 0x7e #define ATT_ERROR_TIMEOUT 0x7F -// ATT Client Read Callback for Dynamic Data +/**@brief ATT Client Read Callback for Dynamic Data // - if buffer == NULL, don't copy data, just return size of value // - if buffer != NULL, copy data and return number bytes copied -// @param con_handle of hci le connection -// @param attribute_handle to be read -// @param offset defines start of attribute value -// @param buffer -// @param buffer_size + * @param con_handle hci le connection + * @param attribute_handle attribute handle in att database + * @param offset defines start of attribute value + * @param buffer buffer to allocate the read value + * @param buffer_size buffer size + * @retrun + */ typedef uint16_t (*att_read_callback_t)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size); -// ATT Client Write Callback for Dynamic Data -// @param con_handle of hci le connection -// @param attribute_handle to be written -// @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE -// @param offset into the value - used for queued writes and long attributes -// @param buffer -// @param buffer_size -// @param signature used for signed write commmands -// @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer +/** + * @brief ATT Client Write Callback for Dynamic Data + * @param con_handle of hci le connection + * @param attribute_handle the attribute handle in the att database + * @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE + * @param offset into the value - used for queued writes and long attributes + * @param buffer the data to be written + * @param buffer_size the size of buffer + * @param signature used for signed write commmands + * @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer + */ typedef int (*att_write_callback_t)(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, const uint8_t *buffer, uint16_t buffer_size); /* API_START */ /* * @brief setup ATT server - * @param read_callback, see att_db.h, can be NULL - * @param write_callback, see attl.h, can be NULL - * NOTE: this function function must be called before seting up a custom HCI handler (if any) + * @param db attribute database in att server + * @param read_callback see function type @link att_read_callback_t() @endlink + * @param write_callback see function type @link att_write_callback_t() @endlink */ void att_server_init(att_read_callback_t read_callback, att_write_callback_t write_callback); /* * @brief register packet handler for ATT server events: - * - ATT_EVENT_MTU_EXCHANGE_COMPLETE + * - ATT_EVENT_MTU_EXCHANGE_COMPLETE * - ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE - * @param handler + * @param handler see function type @link btstack_packet_handler_t() @endlink */ void att_server_register_packet_handler(btstack_packet_handler_t handler); /* * @brief tests if a notification or indication can be send right now - * @param con_handle + * @param con_handle le connection handle * @return 1, if packet can be sent */ int att_server_can_send_packet_now(hci_con_handle_t con_handle); -/** +/** * @brief Request emission of ATT_EVENT_CAN_SEND_NOW as soon as possible * @note ATT_EVENT_CAN_SEND_NOW might be emitted during call to this function * so packet handler should be ready to handle it - * @param con_handle + * @param con_handle le connection handle */ void att_server_request_can_send_now_event(hci_con_handle_t con_handle); /* * @brief notify client about attribute value change - * @param con_handle - * @param attribute_handle - * @param value - * @param value_len - * @return 0 if ok, error otherwise + * @param con_handle le connection handle + * @param attribute_handle the attribute handle in the att database + * @param value buffer to value + * @param value_len length of value + * @return 0 if ok, error otherwise */ int att_server_notify(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); -/* +/** * @brief indicate value change to client. client is supposed to reply with an indication_response - * @param con_handle - * @param attribute_handle - * @param value - * @param value_len - * @return 0 if ok, error otherwise + * @param con_handle le connection handle + * @param attribute_handle the attribute handle in the att database + * @param value buffer to value + * @param value_len length of value + * @return 0 if ok, error otherwise */ int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len); @@ -108,10 +118,10 @@ int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, */ uint16_t att_server_get_mtu(hci_con_handle_t con_handle); -/* +/** * @brief emit a general event to att handler - * @param event - * @param length + * @param event event to be sent + * @param length length of event * @return void */ void att_emit_general_event(uint8_t *event, uint16_t length); @@ -123,18 +133,21 @@ void att_emit_general_event(uint8_t *event, uint16_t length); */ void att_set_db(hci_con_handle_t con_handle, const uint8_t *db); -/* +/** * @brief set callback for read of dynamic attributes - * @param callback + * @param callback see function type @link att_read_callback_t() @endlink */ void att_set_read_callback(att_read_callback_t callback); -/* +/** * @brief set callback for write of dynamic attributes - * @param callback + * @param callback see function type @link att_write_callback_t() @endlink */ void att_set_write_callback(att_write_callback_t callback); +/** + * @} + */ #ifdef __cplusplus } #endif diff --git a/bundles/typical/inc/att_db.nim b/bundles/typical/inc/att_db.nim index c101b6862..beff39bdf 100644 --- a/bundles/typical/inc/att_db.nim +++ b/bundles/typical/inc/att_db.nim @@ -1,19 +1,24 @@ -## ---------------------------------------------------------------------------- -## Copyright Message -## ---------------------------------------------------------------------------- +## * @file +## @brief API for ATT server ## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018 by INGCHIPS +## INGCHIPS confidential and proprietary. +## COPYRIGHT (c) 2018 by INGCHIPS +## +## All rights are reserved. Reproduction in whole or in part is +## prohibited without the written consent of the copyright owner. ## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. ## ## -## ---------------------------------------------------------------------------- import bluetooth, bt_types +## * +## @brief Bluetooth +## @defgroup Bluetooth_att_db +## @ingroup bluetooth_host +## @{ +## ## custom BTstack error codes const @@ -25,29 +30,33 @@ const ATT_ERROR_DATA_MISMATCH* = 0x0000007E ATT_ERROR_TIMEOUT* = 0x0000007F -## ATT Client Read Callback for Dynamic Data -## - if buffer == NULL, don't copy data, just return size of value -## - if buffer != NULL, copy data and return number bytes copied -## @param con_handle of hci le connection -## @param attribute_handle to be read -## @param offset defines start of attribute value -## @param buffer -## @param buffer_size +## *@brief ATT Client Read Callback for Dynamic Data +## // - if buffer == NULL, don't copy data, just return size of value +## // - if buffer != NULL, copy data and return number bytes copied +## @param con_handle hci le connection +## @param attribute_handle attribute handle in att database +## @param offset defines start of attribute value +## @param buffer buffer to allocate the read value +## @param buffer_size buffer size +## @retrun +## type att_read_callback_t* = proc (con_handle: hci_con_handle_t; attribute_handle: uint16; offset: uint16; buffer: ptr uint8; buffer_size: uint16): uint16 {.noconv.} -## ATT Client Write Callback for Dynamic Data +## * +## @brief ATT Client Write Callback for Dynamic Data ## @param con_handle of hci le connection -## @param attribute_handle to be written +## @param attribute_handle the attribute handle in the att database ## @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE ## @param offset into the value - used for queued writes and long attributes -## @param buffer -## @param buffer_size +## @param buffer the data to be written +## @param buffer_size the size of buffer ## @param signature used for signed write commmands -## @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer +## @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer +## type att_write_callback_t* = proc (con_handle: hci_con_handle_t; @@ -58,9 +67,9 @@ type ## API_START ## ## @brief setup ATT server -## @param read_callback, see att_db.h, can be NULL -## @param write_callback, see attl.h, can be NULL -## NOTE: this function function must be called before seting up a custom HCI handler (if any) +## @param db attribute database in att server +## @param read_callback see function type @link att_read_callback_t() @endlink +## @param write_callback see function type @link att_write_callback_t() @endlink ## proc att_server_init*(read_callback: att_read_callback_t; @@ -70,14 +79,14 @@ proc att_server_init*(read_callback: att_read_callback_t; ## @brief register packet handler for ATT server events: ## - ATT_EVENT_MTU_EXCHANGE_COMPLETE ## - ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE -## @param handler +## @param handler see function type @link btstack_packet_handler_t() @endlink ## proc att_server_register_packet_handler*(handler: btstack_packet_handler_t) {. importc: "att_server_register_packet_handler", header: "att_db.h".} ## ## @brief tests if a notification or indication can be send right now -## @param con_handle +## @param con_handle le connection handle ## @return 1, if packet can be sent ## @@ -87,30 +96,30 @@ proc att_server_can_send_packet_now*(con_handle: hci_con_handle_t): cint {. ## @brief Request emission of ATT_EVENT_CAN_SEND_NOW as soon as possible ## @note ATT_EVENT_CAN_SEND_NOW might be emitted during call to this function ## so packet handler should be ready to handle it -## @param con_handle +## @param con_handle le connection handle ## proc att_server_request_can_send_now_event*(con_handle: hci_con_handle_t) {. importc: "att_server_request_can_send_now_event", header: "att_db.h".} ## ## @brief notify client about attribute value change -## @param con_handle -## @param attribute_handle -## @param value -## @param value_len -## @return 0 if ok, error otherwise +## @param con_handle le connection handle +## @param attribute_handle the attribute handle in the att database +## @param value buffer to value +## @param value_len length of value +## @return 0 if ok, error otherwise ## proc att_server_notify*(con_handle: hci_con_handle_t; attribute_handle: uint16; value: ptr uint8; value_len: uint16): cint {. importc: "att_server_notify", header: "att_db.h".} -## +## * ## @brief indicate value change to client. client is supposed to reply with an indication_response -## @param con_handle -## @param attribute_handle -## @param value -## @param value_len -## @return 0 if ok, error otherwise +## @param con_handle le connection handle +## @param attribute_handle the attribute handle in the att database +## @param value buffer to value +## @param value_len length of value +## @return 0 if ok, error otherwise ## proc att_server_indicate*(con_handle: hci_con_handle_t; attribute_handle: uint16; @@ -123,10 +132,10 @@ proc att_server_indicate*(con_handle: hci_con_handle_t; attribute_handle: uint16 proc att_server_get_mtu*(con_handle: hci_con_handle_t): uint16 {. importc: "att_server_get_mtu", header: "att_db.h".} -## +## * ## @brief emit a general event to att handler -## @param event -## @param length +## @param event event to be sent +## @param length length of event ## @return void ## @@ -140,17 +149,20 @@ proc att_emit_general_event*(event: ptr uint8; length: uint16) {. proc att_set_db*(con_handle: hci_con_handle_t; db: ptr uint8) {.importc: "att_set_db", header: "att_db.h".} -## +## * ## @brief set callback for read of dynamic attributes -## @param callback +## @param callback see function type @link att_read_callback_t() @endlink ## proc att_set_read_callback*(callback: att_read_callback_t) {. importc: "att_set_read_callback", header: "att_db.h".} -## +## * ## @brief set callback for write of dynamic attributes -## @param callback +## @param callback see function type @link att_write_callback_t() @endlink ## proc att_set_write_callback*(callback: att_write_callback_t) {. importc: "att_set_write_callback", header: "att_db.h".} +## * +## @} +## diff --git a/bundles/typical/inc/bluetooth.h b/bundles/typical/inc/bluetooth.h index d1ec9d45a..c9ace3555 100644 --- a/bundles/typical/inc/bluetooth.h +++ b/bundles/typical/inc/bluetooth.h @@ -1,14 +1,16 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- +/** @file +* @brief basic bluetooth macro definition +* +* Copyright Message +* +* +* INGCHIPS confidential and proprietary. +* COPYRIGHT (c) 2018 by INGCHIPS +* +* All rights are reserved. Reproduction in whole or in part is +* prohibited without the written consent of the copyright owner. +* +*/ #ifndef __BLUETOOTH_H #define __BLUETOOTH_H @@ -494,7 +496,10 @@ typedef enum { #define HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED 0X12 #define HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED 0X13 #define HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM 0X14 - +#define HCI_SUBEVENT_LE_CONNECTIONLESS_IQ_REPORT 0x15 +#define HCI_SUBEVENT_LE_CONNECTION_IQ_REPORT 0x16 +#define HCI_SUBEVENT_LE_CTE_REQ_FAILED 0x17 +#define HCI_SUBEVENT_LE_PRD_ADV_SYNC_TRANSFER_RCVD 0x18 // last used HCI_EVENT in 2.1 is 0x3d // last used HCI_EVENT in 4.1 is 0x57 @@ -606,7 +611,8 @@ typedef enum { #define ATT_ERROR_INSUFFICIENT_ENCRYPTION 0x0f #define ATT_ERROR_UNSUPPORTED_GROUP_TYPE 0x10 #define ATT_ERROR_INSUFFICIENT_RESOURCES 0x11 - +#define ATT_ERROR_DATABASE_OUT_OF_SYNC 0x12 +#define ATT_ERROR_VALUE_NOT_ALLOWED 0x13 // MARK: Attribute Property Flags #define ATT_PROPERTY_BROADCAST 0x01 #define ATT_PROPERTY_READ 0x02 diff --git a/bundles/typical/inc/bluetooth.nim b/bundles/typical/inc/bluetooth.nim index 8f56e531b..974d5ed35 100644 --- a/bundles/typical/inc/bluetooth.nim +++ b/bundles/typical/inc/bluetooth.nim @@ -1,14 +1,16 @@ -## ---------------------------------------------------------------------------- -## Copyright Message -## ---------------------------------------------------------------------------- +## * @file +## @brief basic bluetooth macro definition ## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018 by INGCHIPS +## Copyright Message +## +## +## INGCHIPS confidential and proprietary. +## COPYRIGHT (c) 2018 by INGCHIPS +## +## All rights are reserved. Reproduction in whole or in part is +## prohibited without the written consent of the copyright owner. ## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. ## -## ---------------------------------------------------------------------------- const BD_ADDR_LEN* = 0x00000006 @@ -595,6 +597,10 @@ const HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED* = 0x00000012 HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED* = 0x00000013 HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM* = 0x00000014 + HCI_SUBEVENT_LE_CONNECTIONLESS_IQ_REPORT* = 0x00000015 + HCI_SUBEVENT_LE_CONNECTION_IQ_REPORT* = 0x00000016 + HCI_SUBEVENT_LE_CTE_REQ_FAILED* = 0x00000017 + HCI_SUBEVENT_LE_PRD_ADV_SYNC_TRANSFER_RCVD* = 0x00000018 ## last used HCI_EVENT in 2.1 is 0x3d ## last used HCI_EVENT in 4.1 is 0x57 @@ -718,6 +724,8 @@ const ATT_ERROR_INSUFFICIENT_ENCRYPTION* = 0x0000000F ATT_ERROR_UNSUPPORTED_GROUP_TYPE* = 0x00000010 ATT_ERROR_INSUFFICIENT_RESOURCES* = 0x00000011 + ATT_ERROR_DATABASE_OUT_OF_SYNC* = 0x00000012 + ATT_ERROR_VALUE_NOT_ALLOWED* = 0x00000013 ## MARK: Attribute Property Flags diff --git a/bundles/typical/inc/btstack_event.h b/bundles/typical/inc/btstack_event.h index 515f75390..ebaf921c4 100644 --- a/bundles/typical/inc/btstack_event.h +++ b/bundles/typical/inc/btstack_event.h @@ -1,13 +1,15 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// +/** @file +* @brief basic function APIs and events for bluetooth +* Copyright Message +* +* +* INGCHIPS confidential and proprietary. +* COPYRIGHT (c) 2018 by INGCHIPS +* +* All rights are reserved. Reproduction in whole or in part is +* prohibited without the written consent of the copyright owner. +* +*/ // ---------------------------------------------------------------------------- #ifndef __BTSTACK_EVENT_H @@ -804,6 +806,32 @@ typedef struct le_meta_directed_adv_report le_directed_adv_report_t reports[1]; } le_meta_directed_adv_report_t; +typedef struct le_meta_event_enh_create_conn_complete +{ + //Status of received command + uint8_t status; + //Connection handle + uint16_t handle; + //Device role - 0=Master/ 1=Slave + uint8_t role; + //Peer address type - 0=public/1=random + bd_addr_type_t peer_addr_type; + //Peer address + bd_addr_t peer_addr; + //Local_Resolvable_Private_Address + bd_addr_type_t local_resolv_priv_addr; + //Peer_Resolvable_Private_Address + bd_addr_type_t peer_resolv_priv_addr; + //Connection interval + uint16_t interval; + //Connection latency + uint16_t latency; + //Link supervision timeout + uint16_t sup_timeout; + //Master clock accuracy + uint8_t clk_accuracy; +} le_meta_event_enh_create_conn_complete_t; + // LE PHY Update Complete Event typedef struct le_meta_phy_update_complete { diff --git a/bundles/typical/inc/btstack_event.nim b/bundles/typical/inc/btstack_event.nim index 15091ad40..c10b2ef9e 100644 --- a/bundles/typical/inc/btstack_event.nim +++ b/bundles/typical/inc/btstack_event.nim @@ -1,12 +1,14 @@ -## ---------------------------------------------------------------------------- -## Copyright Message -## ---------------------------------------------------------------------------- +## * @file +## @brief basic function APIs and events for bluetooth +## Copyright Message +## +## +## INGCHIPS confidential and proprietary. +## COPYRIGHT (c) 2018 by INGCHIPS ## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018 by INGCHIPS +## All rights are reserved. Reproduction in whole or in part is +## prohibited without the written consent of the copyright owner. ## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. ## ## ---------------------------------------------------------------------------- @@ -847,6 +849,22 @@ type num_of_reports* {.importc: "num_of_reports".}: uint8 reports* {.importc: "reports".}: array[1, le_directed_adv_report_t] + le_meta_event_enh_create_conn_complete_t* {. + importc: "le_meta_event_enh_create_conn_complete_t", + header: "btstack_event.h", bycopy.} = object + status* {.importc: "status".}: uint8 ## Status of received command + ## Connection handle + handle* {.importc: "handle".}: uint16 ## Device role - 0=Master/ 1=Slave + role* {.importc: "role".}: uint8 ## Peer address type - 0=public/1=random + peer_addr_type* {.importc: "peer_addr_type".}: bd_addr_type_t ## Peer address + peer_addr* {.importc: "peer_addr".}: bd_addr_t ## Local_Resolvable_Private_Address + local_resolv_priv_addr* {.importc: "local_resolv_priv_addr".}: bd_addr_type_t ## Peer_Resolvable_Private_Address + peer_resolv_priv_addr* {.importc: "peer_resolv_priv_addr".}: bd_addr_type_t ## Connection interval + interval* {.importc: "interval".}: uint16 ## Connection latency + latency* {.importc: "latency".}: uint16 ## Link supervision timeout + sup_timeout* {.importc: "sup_timeout".}: uint16 ## Master clock accuracy + clk_accuracy* {.importc: "clk_accuracy".}: uint8 + ## LE PHY Update Complete Event diff --git a/bundles/typical/inc/btstack_util.h b/bundles/typical/inc/btstack_util.h index ccd78430e..071765489 100644 --- a/bundles/typical/inc/btstack_util.h +++ b/bundles/typical/inc/btstack_util.h @@ -151,7 +151,7 @@ void uuid_add_bluetooth_prefix(uint8_t * uuid128, uint32_t short_uuid); * @param uui128 to test * @return 1 if it can be expressed as UUID32 */ -int uuid_has_bluetooth_prefix(uint8_t * uuid128); +int uuid_has_bluetooth_prefix(const uint8_t * uuid128); #ifdef __cplusplus } diff --git a/bundles/typical/inc/compiler.h b/bundles/typical/inc/compiler.h deleted file mode 100644 index e17f58fae..000000000 --- a/bundles/typical/inc/compiler.h +++ /dev/null @@ -1,26 +0,0 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// ---------------------------------------------------------------------------- - -#ifndef _COMPILER_H_ -#define _COMPILER_H_ - -#include - -#ifdef __CC_ARM - #define __INLINE __inline -#else - #define __INLINE inline -#endif - -#define __ASM __asm - -#endif // _COMPILER_H_ diff --git a/bundles/typical/inc/compiler.nim b/bundles/typical/inc/compiler.nim deleted file mode 100644 index bb7db6eed..000000000 --- a/bundles/typical/inc/compiler.nim +++ /dev/null @@ -1,12 +0,0 @@ -## ---------------------------------------------------------------------------- -## Copyright Message -## ---------------------------------------------------------------------------- -## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018 by INGCHIPS -## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. -## -## ---------------------------------------------------------------------------- - diff --git a/bundles/typical/inc/gap.h b/bundles/typical/inc/gap.h index 08d053c01..fafabe39a 100644 --- a/bundles/typical/inc/gap.h +++ b/bundles/typical/inc/gap.h @@ -1,15 +1,12 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- +/** @file +* @brief function API and data structure for BLE +* @version 1.0.0. * +* @date 2019/10/10 * +* * +* Copyright (c) 2019 IngChips corp. * +* * +* * + *************************************************************************************************************/ #ifndef __GAP_EXTERNAL_H #define __GAP_EXTERNAL_H @@ -22,6 +19,12 @@ extern "C" { #endif +/** + * @brief Bluetooth + * @defgroup Bluetooth_gap + * @ingroup bluetooth_host + * @{ + */ typedef struct le_connection_parameter_range{ uint16_t le_conn_interval_min; uint16_t le_conn_interval_max; @@ -40,18 +43,89 @@ typedef enum scan_type SCAN_ACTIVE = 0x01, } scan_type_t; +/** + * @brief set random address device + * + * @param address random address + */ void gap_set_random_device_address(const uint8_t *address); /** - * Disconnect connection with handle + * @brief Disconnect connection with handle * - * @param handle + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @return 0: Message is sent out or the connection alreay release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief disconnect multi-connections + */ +void gap_disconnect_all(void); +/** + * @brief add whitelist to the controller + * + * @param[in] address BLE address + * @param[in] addtype BLE address type + * @return 0: Message is sent to controller + */ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); + +/** + * @brief remove whitelist from controller + * + * @param address BLE address + * @param addtype BLE address type + * @return 0: Message is sent to controller + */ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +/** + * @brief clear white lists in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_clear_white_lists(void); + +/** + * @brief read rssi value of a appointed hci connection + * + * @param handle connection handle + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_rssi(hci_con_handle_t handle); + +/** + * @brief read remote features upon hci connection + * + * @param handle connection handle + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_remote_used_features(hci_con_handle_t handle); + +/** + * @brief read remote features upon hci connection + * + * @param handle connection handle + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_remote_info(hci_con_handle_t handle); + +/** + * @brief read the channel map of a hci connection + * + * @param handle connection handle + * + * @return 0: message sent out others: failed + */ +uint8_t gap_le_read_channel_map(hci_con_handle_t handle); + +/** + * @brief physical channel type + */ typedef enum phy_type { PHY_1M = 0x01, @@ -59,7 +133,9 @@ typedef enum phy_type PHY_CODED = 0x03, } phy_type_t; -/*bit configure for */ +/** + * @brief bit of physical channel type + */ typedef enum phy_bittype { PHY_1M_BIT = BIT(0), @@ -69,6 +145,9 @@ typedef enum phy_bittype typedef uint8_t phy_bittypes_t; +/** + * @brief enum of the definition about advertising event + */ typedef enum { ADV_CONNECTABLE, @@ -95,10 +174,39 @@ typedef uint8_t adv_event_properties_t; #define PERIODIC_ADV_BIT_INC_TX BIT(6) typedef uint8_t periodic_adv_properties_t; +/** + * @brief read physical channel of connected handle + * + * @param con_handle connected handle + * @return 0: Message is sent to controller + */ uint8_t gap_read_phy(const uint16_t con_handle); +/** + * @brief Host to specify its preferred values for the transmitter PHY and receiver PHY + * + * @param all_phys BIT(0): no preference for transmit channel + * BIT(1): no preference for receive channel + * Others: reserved for future + * + * @param tx_phys BIT(0): prefer LE 1M transmitter PHY + * BIT(1): prefer LE 2M transmitter PHY + * BIT(2): prefer LE coded transmitter PHY + * Others: reserved for future + * + * @param rx_phys BIT(0): prefer LE 1M receiver PHY + * BIT(1): prefer LE 2M receiver PHY + * BIT(2): prefer LE coded receiver PHY + * Others: reserved for future + * + * @return 0: Message is sent to controller + */ uint8_t gap_set_def_phy(const uint8_t all_phys, const phy_bittypes_t tx_phys, const phy_bittypes_t rx_phys); +/** + * @brief enum of the PHY option + * + */ typedef enum phy_option { HOST_NO_PREFERRED_CODING, @@ -106,11 +214,44 @@ typedef enum phy_option HOST_PREFER_S8_CODING } phy_option_t; +/** + * @brief Host to set PHY preferences for a connection + * + * @param con_handle connection handl. (0x000--0x0EFF) + * + * @param all_phys BIT(0): no preference for transmit channel + * BIT(1): no preference for receive channel + * Others: reserved for future + * + * @param tx_phys BIT(0): prefer LE 1M transmitter PHY + * BIT(1): prefer LE 2M transmitter PHY + * BIT(2): prefer LE coded transmitter PHY + * Others: reserved for future + * + * @param rx_phys BIT(0): prefer LE 1M receiver PHY + * BIT(1): prefer LE 2M receiver PHY + * BIT(2): prefer LE coded receiver PHY + * Others: reserved for future + * + * @return 0: Message is sent to controller + */ uint8_t gap_set_phy(const uint16_t con_handle, const uint8_t all_phys, const phy_bittypes_t tx_phys, const phy_bittypes_t rx_phys, const phy_option_t phy_opt); +/** + * @brief Host to set a random address for an advertising set + * + * @param adv_handle handle to advertising set + * + * @param random_addr random address + * + * @return 0: Message is sent to controller + */ uint8_t gap_set_adv_set_random_addr(const uint8_t adv_handle, const uint8_t *random_addr); +/** + * @brief Structure of PHY configuration + */ typedef struct scan_phy_config { // Which phy to scan (valid phys: 1M & Coded) @@ -123,13 +264,15 @@ typedef struct scan_phy_config uint16_t window; } scan_phy_config_t; -//Scan filter policy +/** + * @brief enum of definition: Scan filter policy + */ typedef enum scan_filter_policy { // Accept all advertising packets except directed advertising packets not // addressed to this device (default). SCAN_ACCEPT_ALL_EXCEPT_NOT_DIRECTED, - // Accept only advertising packets from devices where the advertiser¡¯s + // Accept only advertising packets from devices where the advertiser¡¯s // address is in the White List. Directed advertising packets which are not // addressed to this device shall be ignored SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, @@ -144,12 +287,64 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; +/** + * @brief to set the extended scan parameters + * + * @param addr_type address type + * + * @param filter @link #scan_filter_policy_t @endlink + * + * @param config_num configure number 3 at most. It indicates that host would configure how many kinds of PHY + * + * @param configs struture pointer to the configuration of each PHY host specify + * + * @return 0: messgae sent to controller + */ uint8_t gap_set_ext_scan_para(const bd_addr_type_t addr_type, const scan_filter_policy_t filter, const uint8_t config_num, const scan_phy_config_t *configs); +/** + * @brief to set the extended scan response data for an advertising set + * + * @param adv_handle handle of advertising set handle + * + * @param length length of advertising data + * + * @param data pointer to the advertising data. + * + * @return 0: messgae sent to controller + */ uint8_t gap_set_ext_scan_response_data(const uint8_t adv_handle, const uint16_t length, const uint8_t *data); +/** + * @brief to enable or disable scanning + * + * @param enable 0: disable 1: enable + * + * @param filter policy to filter the advertising package + * 0x00: Duplicate filtering disabled + * 0x01: Duplicate filtering enabled + * 0x02: Duplicate filtering enabled, reset for each scan period + * others:Reserved for future + * + * @param duration 0x0000: Scan continuously until explicitly disable + * N=0xXXXX: Scan duration + * Range: 0x0001 to 0xFFFF + * Time = N * 10 ms + * Time Range: 10 ms to 655.35 s + * + * @param period 0x0000: Scan continuously + * N=0xXXXX: Time interval from when the Controller started its last Scan_Duration + * until it begins the subsequent Scan_Duration + * Range: 0x0001 to 0xFFFF + * Time = N * 1.28 sec + * Time Range: 1.28 s to 83,884.8 s + * + * @return 0: messgae sent to controller + */ uint8_t gap_set_ext_scan_enable(const uint8_t enable, const uint8_t filter, const uint16_t duration, const uint16_t period); - +/** + * @brief structure of advertising set information + */ typedef struct ext_adv_set_en { uint8_t handle; @@ -160,9 +355,23 @@ typedef struct ext_adv_set_en uint8_t max_events; } ext_adv_set_en_t; +/** + * @brief to enable or disable an advertising set + * + * @param enalbe 0: disable advertising specified by adv_sets + * 1: enable advertising sepecified by adv_sets + * @param set_number number of advertising set + * + * @param adv_sets see structure @link #ext_adv_set_en_t @endlink + * + * @return 0: message sent to controller + */ uint8_t gap_set_ext_adv_enable(const uint8_t enable, const uint8_t set_number, const ext_adv_set_en_t *adv_sets); -// channel map bit +/** + * @brief channel map bit + * + */ #define PRIMARY_ADV_CH_37 BIT(0) #define PRIMARY_ADV_CH_38 BIT(1) #define PRIMARY_ADV_CH_39 BIT(2) @@ -170,7 +379,10 @@ uint8_t gap_set_ext_adv_enable(const uint8_t enable, const uint8_t set_number, c typedef uint8_t adv_channel_bits_t; -//Advertising filter policy +/** + * @brief Advertising filter policy + * + */ typedef enum adv_filter_policy { //Allow both scan and connection requests from anyone @@ -183,6 +395,49 @@ typedef enum adv_filter_policy ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST } adv_filter_policy_t; +/** + * @brief to set the advertising set parameter + * + * @param adv_handle handle of an advertising set + * 1: enable advertising sepecified by adv_sets + * @param properties see structure @link #adv_event_properties_t @endlink + * + * @param interval_min Range: 0x000020 to 0xFFFFFF + * Time = N * 0.625 ms + * Time Range: 20 ms to 10,485.759375 s + * + * @param interal_max see @link #interval_min @endlink + * + * @param primary_adv_channel_map see structure @link #adv_channel_bits_t @endlink + * + * @param own_addr_type own BLE device address type + * + * @param peer_addr_type peer BLE device address type + * + * @param peer_addr peer BLE device address + * + * @param adv_filter_policy filter policy , see structure @link #adv_filter_policy_t @endlink + * + * @param tx_power tranmission power + * 0xXX : Size: 1 octet (signed integer) + * Range: -127 to +20 + * Units: dBm + * 0x7f : Host has no preference + * + * @param primary_adv_phy see structure @link #phy_type_t @endlink + * + * @param secondary_adv_max_skip 0x00 : AUX_ADV_IND shall be sent prior to the next advertising event + * 0x01-0xFF: Maximum advertising events the Controller can skip + * + * @param secondary_adv_phy see structure @link #phy_type_t @endlink + * + * @param sid 0x00-0x0f:Value of the Advertising SID subfield in the ADI field of the PDU + * + * @param scan_req_notification_enable 0x00: Scan request notifications disabled + * 0x01: Scan request notifications enabled + * + * @return 0: message sent to controller + */ uint8_t gap_set_ext_adv_para(const uint8_t adv_handle, const adv_event_properties_t properties, const uint32_t interval_min, @@ -199,30 +454,116 @@ uint8_t gap_set_ext_adv_para(const uint8_t adv_handle, const uint8_t sid, const uint8_t scan_req_notification_enable); +/** + * @brief structure adv_data_frag_pref_t_t + */ typedef enum adv_data_frag_pref { ADV_DATA_CTRL_MAY_FRAG = 0, ADV_DATA_CTRL_NOT_FRAG = 1 } adv_data_frag_pref_t_t; +/** + * @brief to set extended advertising data + * + * @param adv_handle advertising set handle. + * + * @param length advertising data length + * + * @param data pointer to advertising data + * + * @return 0: message sent to controller + */ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const uint8_t *data); +/** + * @brief LE Set Periodic Advertising Data command + * + * @param adv_handle advertising set handle. + * + * @param length advertising data length + * + * @param data pointer to periodic advertising data + * + * @return 0: message sent to controller + */ uint8_t gap_set_periodic_adv_data(const uint8_t adv_handle, uint16_t length, const uint8_t *data); + +/** + * @brief LE Set Periodic Advertising Enable command + * + * @param enable 0x00: Periodic advertising is disabled (default) + * 0x01: Periodic advertising is enabled + * + * @param adv_handle handle of advertising set + * + * @return 0: message sent to controller + */ uint8_t gap_set_periodic_adv_enable(const uint8_t enable, const uint8_t adv_handle); +/** + * @brief LE Set Periodic Advertising Parameters command + * + * @param adv_handle handle of advertising set + * + * @param interval_min 0xXXXX Range: 0x0006 to 0xFFFF + * Time = N * 1.25 ms + * Time Range: 7.5ms to 81.91875 s + * + * @param interval_max refer to interval_min + * + * @param properties BIT(6): Include TxPower in the advertising PDU + * + * @return 0: message sent to controller + */ uint8_t gap_set_periodic_adv_para(const uint8_t adv_handle, const uint16_t interval_min, const uint16_t interval_max, const periodic_adv_properties_t properties); +/** + * @brief LE Clear Advertising Sets command + * + * @return 0: message sent to controller + */ uint8_t gap_clr_adv_set(void); +/** + * @brief LE Remove Advertising Set command + * + * @param adv_handle handle of advertising set to be removed + * + * @return 0: message sent to controller + */ uint8_t gap_rmv_adv_set(const uint8_t adv_handle); +/** + * @brief enum of periodical advertising filter policy + */ typedef enum periodic_adv_filter_policy { PERIODIC_ADVERTISER_FROM_PARAM = 0, PERIODIC_ADVERTISER_FROM_LIST = 1 } periodic_adv_filter_policy_t; +/** + * @brief LE Periodic Advertising Create Sync command + * + * @param filter_policy see structure periodic_adv_filter_policy_t + * + * @param adv_sid 0x00-0x0f: Advertising SID subfield in the ADI field used to identify the Periodic + * Advertising + * @param addr_type see structure @link #bd_addr_type_t @endlink + * + * @param addr pointer to address + * + * @param skip 0x0000-0x01f3: The number of periodic advertising packets that can be skipped after a + * successful receive + * @param sync_timeout Synchronization timeout for the periodic advertising + * Range: 0x000A to 0x4000 + * Time = N*10 ms + * Time Range: 100 ms to 163.84 s + * + * @return 0: message sent to controller + */ uint8_t gap_periodic_adv_create_sync(const periodic_adv_filter_policy_t filter_policy, const uint8_t adv_sid, const bd_addr_type_t addr_type, @@ -231,19 +572,71 @@ uint8_t gap_periodic_adv_create_sync(const periodic_adv_filter_policy_t filter_p const uint16_t sync_timeout, const uint8_t sync_cte_type ); +/** + * @brief LE Periodic Advertising Create Sync Cancel command + * + * @return 0: message sent to controller + */ uint8_t gap_periodic_adv_create_sync_cancel(void); +/** + * @brief LE Periodic Advertising Terminate Sync command + * + * @param sync_handle Sync_Handle identifying the periodic advertising train + * + * @return 0: message sent to controller + */ uint8_t gap_periodic_adv_term_sync(const uint16_t sync_handle); +/** + * @brief LE Add Device To Periodic Advertiser List command + * + * @param addr_type device address type + * + * @param addr pointer to device address + * + * @param sid 0x00-0x0F: Advertising SID subfield in the ADI field used to identify the Periodic Advertising + * + * @return 0: message sent to controller + */ uint8_t gap_add_dev_to_periodic_list(const uint8_t addr_type, const uint8_t *addr, const uint8_t sid); +/** + * @brief LE Remove Device From Periodic Advertiser List command + * + * @param addr_type device address type + * + * @param addr pointer to device address + * + * @param sid 0x00-0x0F: Advertising SID subfield in the ADI field used to identify the Periodic Advertising + * + * @return 0: message sent to controller + */ uint8_t gap_rmv_dev_from_periodic_list(const uint8_t addr_type, const uint8_t *addr, const uint8_t sid); +/** + * @brief LE Clear Periodic Advertiser List command + * + * @return 0: message sent to controller + */ uint8_t gap_clr_periodic_adv_list(void); +/** + * @brief LE Read Periodic Advertiser List Size command + * + * @return 0: message sent to controller + */ uint8_t gap_read_periodic_adv_list_size(void); +/** + * @brief structure initiating_filter_policy_t + * + */ typedef enum initiating_filter_policy { INITIATING_ADVERTISER_FROM_PARAM = 0, INITIATING_ADVERTISER_FROM_LIST = 1 } initiating_filter_policy_t; +/** + * @brief structure connection parameters + * + */ typedef struct { //Scan interval, units is 625us uint16_t scan_int; @@ -261,13 +654,33 @@ typedef struct { uint16_t max_ce_len; } conn_para_t; +/** + * @brief structure initiating PHY configuration + * + */ typedef struct initiating_phy_config { phy_type_t phy; conn_para_t conn_param; } initiating_phy_config_t; - +/** + * @brief LE Extended Create Connection command + * + * @param filter_policy see structure @link #initiating_filter_policy_t @endlink + * + * @param own_addr_type own device address type + * + * @param peer_addr_type peer device address type + * + * @param peer_addr pointer to peer device address + * + * @param initiating_phy_num PHY numbers configured for initiating process + * + * @param phy_configs see structure @link #initiating_phy_config_t @endlink. phy_configs type array according to initiating_phy_num. + * + * @return 0: message sent to controller + */ uint8_t gap_ext_create_connection(const initiating_filter_policy_t filter_policy, const bd_addr_type_t own_addr_type, const bd_addr_type_t peer_addr_type, @@ -277,9 +690,14 @@ uint8_t gap_ext_create_connection(const initiating_filter_policy_t filter_policy /** * @brief Cancel connection process initiated by gap_ext_create_connection + * */ uint8_t gap_create_connection_cancel(void); +/** + * @brief structure:cte_type_t + * + */ typedef enum { CTE_AOA, @@ -293,7 +711,7 @@ typedef enum * identified by the Advertising_Handle parameter. * * @param adv_handle Used to identify an advertising set. Range: 0x00 to 0xEF - * @param cte_len Constant Tone Extension length in 8 ¦Ìs units. Range: 0x02 to 0x14 + * @param cte_len Constant Tone Extension length in 8 us units. Range: 0x02 to 0x14 * @param cte_type CTE Type * @param cte_count The number of Constant Tone Extensions to transmit in each periodic * advertising interval. @@ -302,14 +720,12 @@ typedef enum * @param antenna_ids List of Antenna IDs in the pattern * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_set_connectionless_cte_tx_param(const uint8_t adv_handle, -// const uint8_t cte_len, -// const cte_type_t cte_type, -// const uint8_t cte_count, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_connectionless_cte_tx_param(const uint8_t adv_handle, + const uint8_t cte_len, + const cte_type_t cte_type, + const uint8_t cte_count, + const uint8_t switching_pattern_len, + const uint8_t *antenna_ids); /** * @brief Request that the Controller enables or disables the use of Constant Tone @@ -321,15 +737,16 @@ typedef enum * @param cte_enable Disable (0x00), Enable (0x01) * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_set_connectionless_cte_tx_enable(const uint8_t adv_handle, -// const uint8_t cte_enable); -// WARNING: ^^^ this API is not available in this release - - +uint8_t gap_set_connectionless_cte_tx_enable(const uint8_t adv_handle, + const uint8_t cte_enable); +/** + * @brief structure:cte_slot_duration_type_t + * + */ typedef enum { - CTE_SLOT_DURATION_1US, - CTE_SLOT_DURATION_2US + CTE_SLOT_DURATION_1US = 1, + CTE_SLOT_DURATION_2US = 2 } cte_slot_duration_type_t; /** @@ -348,14 +765,12 @@ typedef enum * * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_set_connectionless_iq_sampling_enable(const uint16_t sync_handle, -// const uint8_t sampling_enable, -// const uint8_t slot_durations, -// const uint8_t max_sampled_ctes, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_connectionless_iq_sampling_enable(const uint16_t sync_handle, + const uint8_t sampling_enable, + const uint8_t slot_durations, + const uint8_t max_sampled_ctes, + const uint8_t switching_pattern_len, + const uint8_t *antenna_ids); /** * @brief Enable or disable sampling received Constant Tone Extension fields on the @@ -371,13 +786,11 @@ typedef enum * @return 0: Message is sent out; Other: Message is not sent out * */ -// uint8_t gap_set_connection_cte_rx_param(const hci_con_handle_t conn_handle, -// const uint8_t sampling_enable, -// const uint8_t slot_durations, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_connection_cte_rx_param(const hci_con_handle_t conn_handle, + const uint8_t sampling_enable, + const uint8_t slot_durations, + const uint8_t switching_pattern_len, + const uint8_t *antenna_ids); /** * @brief Set the antenna switching pattern and permitted Constant Tone Extension @@ -391,12 +804,10 @@ typedef enum * @return 0: Message is sent out; Other: Message is not sent out * */ -// uint8_t gap_set_connection_cte_tx_param(const hci_con_handle_t conn_handle, -// const uint8_t cte_types, -// const uint8_t switching_pattern_len, -// const uint8_t *antenna_ids); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_connection_cte_tx_param(const hci_con_handle_t conn_handle, + const uint8_t cte_types, + const uint8_t switching_pattern_len, + const uint8_t *antenna_ids); /** @@ -412,18 +823,16 @@ typedef enum * Requested interval for initiating the Constant Tone Extension Request * procedure in number of connection events. * @param requested_cte_length Minimum length of the Constant Tone Extension being requested in 8 - * ¦Ìs units. Range: 0x02 to 0x14. + * us units. Range: 0x02 to 0x14. * @param requested_cte_type Requested CTE type * @return 0: Message is sent out; Other: Message is not sent out * */ -// uint8_t gap_set_connection_cte_request_enable(const hci_con_handle_t conn_handle, -// const uint8_t enable, -// const uint16_t requested_cte_interval, -// const uint8_t requested_cte_length, -// const cte_type_t requested_cte_type); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_connection_cte_request_enable(const hci_con_handle_t conn_handle, + const uint8_t enable, + const uint16_t requested_cte_interval, + const uint8_t requested_cte_length, + const cte_type_t requested_cte_type); /** @@ -434,19 +843,15 @@ typedef enum * @param enable Disable (0x00), Enable (0x01) * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_set_connection_cte_response_enable(const hci_con_handle_t conn_handle, -// const uint8_t enable); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_connection_cte_response_enable(const hci_con_handle_t conn_handle, + const uint8_t enable); /** * @brief Read the switching rates, the sampling rates, the number of antennae, and the * maximum length of a transmitted Constant Tone Extension supported by the * Controller. * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_read_antenna_info(void); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_read_antenna_info(void); /** * @brief Enable or disable reports for the periodic advertising train identified by the @@ -457,10 +862,8 @@ typedef enum * * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_set_periodic_adv_rx_enable(const uint16_t sync_handle, -// const uint8_t enable); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_set_periodic_adv_rx_enable(const uint16_t sync_handle, + const uint8_t enable); /** * @brief Instruct the Controller to send synchronization information about the periodic @@ -474,11 +877,9 @@ typedef enum * * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_periodic_adv_sync_transfer(const hci_con_handle_t conn_handle, -// const uint16_t service_data, -// const uint16_t sync_handle); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_periodic_adv_sync_transfer(const hci_con_handle_t conn_handle, + const uint16_t service_data, + const uint16_t sync_handle); /** * @brief Instruct the Controller to send synchronization information about the periodic @@ -491,11 +892,9 @@ typedef enum * * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_periodic_adv_set_info_transfer(const hci_con_handle_t conn_handle, -// const uint16_t service_data, -// const uint8_t adv_handle); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_periodic_adv_set_info_transfer(const hci_con_handle_t conn_handle, + const uint16_t service_data, + const uint8_t adv_handle); typedef enum @@ -529,13 +928,11 @@ typedef enum * Combination of SYNC_EXCL_XXX * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_periodic_adv_sync_transfer_param(const hci_con_handle_t conn_handle, -// const periodic_adv_sync_transfer_mode_t mode, -// const uint16_t skip, -// const uint16_t sync_timeout, -// const uint8_t cte_excl_types); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_periodic_adv_sync_transfer_param(const hci_con_handle_t conn_handle, + const periodic_adv_sync_transfer_mode_t mode, + const uint16_t skip, + const uint16_t sync_timeout, + const uint8_t cte_excl_types); /** * @brief Specify the initial value for the mode, skip, timeout, and @@ -556,13 +953,11 @@ typedef enum * Combination of SYNC_EXCL_XXX * @return 0: Message is sent out; Other: Message is not sent out */ -// uint8_t gap_default_periodic_adv_sync_transfer_param( -// const periodic_adv_sync_transfer_mode_t mode, -// const uint16_t skip, -// const uint16_t sync_timeout, -// const uint8_t cte_excl_types); -// WARNING: ^^^ this API is not available in this release - +uint8_t gap_default_periodic_adv_sync_transfer_param( + const periodic_adv_sync_transfer_mode_t mode, + const uint16_t skip, + const uint16_t sync_timeout, + const uint8_t cte_excl_types); uint8_t gap_set_host_channel_classification(const uint32_t channel_low, const uint8_t channel_high); @@ -590,13 +985,13 @@ int gap_update_connection_parameters(hci_con_handle_t con_handle, uint16_t conn_ /** * @brief Set accepted connection parameter range - * @param range + * @param range see structure @link #le_connection_parameter_range_t @endlink */ void gap_get_connection_parameter_range(le_connection_parameter_range_t * range); /** * @brief Get accepted connection parameter range - * @param range + * @param range see structure @link #le_connection_parameter_range_t @endlink */ void gap_set_connection_parameter_range(le_connection_parameter_range_t * range); @@ -614,6 +1009,32 @@ uint8_t gap_aes_encrypt(const uint8_t *key, const uint8_t *plaintext); #define HCI_VENDOR_CCM 0xFC01 +/** + * @brief host require controller to do AES-CCM functionality, and CCM referece to + * the document rfc3610:Counter with CBC-MAC (CCM) + * + * @param type 0: encrypt 1:decrypt + * + * @param mic_size 8: mic size in 8 bytes 4: mic size in 4 bytes + * + * @param msg_len messge length to be encrypt or decrypt + * + * @param aad_len Additional authenticated data length + * + * @param tag a value to identify a AES-CCM request. + * + * @param key 128 bits long key as required by AES-CCM + * + * @param nonce random value of each AES-CCM require 13 bytes long + * + * @param msg pointer to the message input + * + * @param aad Additional authenticated data + * + * @param out_msg the output buffer to store the result of the AES-CCM ,calculated by controller. + * + * @return 0: success others: failed + */ uint8_t gap_start_ccm( uint8_t type, // 0: encrypt 1: decrypt uint8_t mic_size, @@ -629,17 +1050,25 @@ uint8_t gap_start_ccm( //HCI func interface /** - * @brief Add event packet handler. + * @brief Add event packet handler into HCI callback queue + * + * @param callback_handler see structure @link #btstack_packet_callback_registration_t @endlink */ void hci_add_event_handler(btstack_packet_callback_registration_t * callback_handler); /** * @brief Registers a packet handler for ACL data. Used by L2CAP + * + * @param handler see function type @link btstack_packet_handler_t() @endlink */ void hci_register_acl_packet_handler(btstack_packet_handler_t handler); /** * @brief Requests the change of BTstack power mode. + * + * @param mode 0:HCI_POWER_OFF ,1:HCI_POWER_ON , 2:HCI_POWER_SLEEP + * + * @return 0: succss */ int hci_power_control(HCI_POWER_MODE mode); @@ -661,6 +1090,9 @@ typedef enum { LEVEL_4, } gap_security_level_t; +/** + * @} + */ #ifdef __cplusplus } #endif diff --git a/bundles/typical/inc/gap.nim b/bundles/typical/inc/gap.nim index a825c870b..9e70a2f5c 100644 --- a/bundles/typical/inc/gap.nim +++ b/bundles/typical/inc/gap.nim @@ -1,19 +1,24 @@ -## ---------------------------------------------------------------------------- -## Copyright Message -## ---------------------------------------------------------------------------- +## * @file +## @brief function API and data structure for BLE +## @version 1.0.0. * +## @date 2019/10/10 * +## * +## Copyright (c) 2019 IngChips corp. * +## * +## * ## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018 by INGCHIPS -## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. -## -## -## ---------------------------------------------------------------------------- +## *********************************************************************************************************** import bluetooth, bt_types +## * +## @brief Bluetooth +## @defgroup Bluetooth_gap +## @ingroup bluetooth_host +## @{ +## + type le_connection_parameter_range_t* {.importc: "le_connection_parameter_range_t", header: "gap.h", bycopy.} = object @@ -33,37 +38,125 @@ type ## Passive scan SCAN_ACTIVE = 0x00000001 +## * +## @brief set random address device +## +## @param address random address +## + proc gap_set_random_device_address*(address: ptr uint8) {. importc: "gap_set_random_device_address", header: "gap.h".} ## * -## Disconnect connection with handle +## @brief Disconnect connection with handle ## -## @param handle +## @param handle Used to identify an advertising set. Range: 0x00 to 0xEF +## @return 0: Message is sent out or the connection alreay release ## proc gap_disconnect*(handle: hci_con_handle_t): uint8 {.importc: "gap_disconnect", header: "gap.h".} +## * +## @brief disconnect multi-connections +## + +proc gap_disconnect_all*() {.importc: "gap_disconnect_all", header: "gap.h".} +## * +## @brief add whitelist to the controller +## +## @param[in] address BLE address +## @param[in] addtype BLE address type +## @return 0: Message is sent to controller +## + proc gap_add_whitelist*(address: ptr uint8; addtype: bd_addr_type_t): uint8 {. importc: "gap_add_whitelist", header: "gap.h".} +## * +## @brief remove whitelist from controller +## +## @param address BLE address +## @param addtype BLE address type +## @return 0: Message is sent to controller +## + proc gap_remove_whitelist*(address: ptr uint8; addtype: bd_addr_type_t): uint8 {. importc: "gap_remove_whitelist", header: "gap.h".} +## * +## @brief clear white lists in controller +## +## @return 0: message sent out others: failed +## + +proc gap_clear_white_lists*(): uint8 {.importc: "gap_clear_white_lists", + header: "gap.h".} +## * +## @brief read rssi value of a appointed hci connection +## +## @param handle connection handle +## +## @return 0: message sent out others: failed +## + +proc gap_read_rssi*(handle: hci_con_handle_t): uint8 {.importc: "gap_read_rssi", + header: "gap.h".} +## * +## @brief read remote features upon hci connection +## +## @param handle connection handle +## +## @return 0: message sent out others: failed +## + +proc gap_read_remote_used_features*(handle: hci_con_handle_t): uint8 {. + importc: "gap_read_remote_used_features", header: "gap.h".} +## * +## @brief read remote features upon hci connection +## +## @param handle connection handle +## +## @return 0: message sent out others: failed +## + +proc gap_read_remote_info*(handle: hci_con_handle_t): uint8 {. + importc: "gap_read_remote_info", header: "gap.h".} +## * +## @brief read the channel map of a hci connection +## +## @param handle connection handle +## +## @return 0: message sent out others: failed +## + +proc gap_le_read_channel_map*(handle: hci_con_handle_t): uint8 {. + importc: "gap_le_read_channel_map", header: "gap.h".} +## * +## @brief physical channel type +## + type phy_type_t* {.size: sizeof(cint).} = enum PHY_1M = 0x00000001, PHY_2M = 0x00000002, PHY_CODED = 0x00000003 -## bit configure for +## * +## @brief bit of physical channel type +## type phy_bittype_t* {.size: sizeof(cint).} = enum PHY_1M_BIT = BIT(0), PHY_2M_BIT = BIT(1), PHY_CODED_BIT = BIT(2) phy_bittypes_t* = uint8 + + +## * +## @brief enum of the definition about advertising event +## + +type adv_event_property_t* {.size: sizeof(cint).} = enum ADV_CONNECTABLE, ADV_SCANNABLE, ADV_DIRECT, ADV_HIGH_DUTY_DIR_ADV, ADV_LEGACY, ADV_ANONYMOUS, ADV_INC_TX_POWER - type adv_event_properties_t* = uint8 @@ -73,21 +166,89 @@ const type periodic_adv_properties_t* = uint8 +## * +## @brief read physical channel of connected handle +## +## @param con_handle connected handle +## @return 0: Message is sent to controller +## + proc gap_read_phy*(con_handle: uint16): uint8 {.importc: "gap_read_phy", header: "gap.h".} +## * +## @brief Host to specify its preferred values for the transmitter PHY and receiver PHY +## +## @param all_phys BIT(0): no preference for transmit channel +## BIT(1): no preference for receive channel +## Others: reserved for future +## +## @param tx_phys BIT(0): prefer LE 1M transmitter PHY +## BIT(1): prefer LE 2M transmitter PHY +## BIT(2): prefer LE coded transmitter PHY +## Others: reserved for future +## +## @param rx_phys BIT(0): prefer LE 1M receiver PHY +## BIT(1): prefer LE 2M receiver PHY +## BIT(2): prefer LE coded receiver PHY +## Others: reserved for future +## +## @return 0: Message is sent to controller +## + proc gap_set_def_phy*(all_phys: uint8; tx_phys: phy_bittypes_t; rx_phys: phy_bittypes_t): uint8 {.importc: "gap_set_def_phy", header: "gap.h".} +## * +## @brief enum of the PHY option +## +## + type phy_option_t* {.size: sizeof(cint).} = enum HOST_NO_PREFERRED_CODING, HOST_PREFER_S2_CODING, HOST_PREFER_S8_CODING +## * +## @brief Host to set PHY preferences for a connection +## +## @param con_handle connection handl. (0x000--0x0EFF) +## +## @param all_phys BIT(0): no preference for transmit channel +## BIT(1): no preference for receive channel +## Others: reserved for future +## +## @param tx_phys BIT(0): prefer LE 1M transmitter PHY +## BIT(1): prefer LE 2M transmitter PHY +## BIT(2): prefer LE coded transmitter PHY +## Others: reserved for future +## +## @param rx_phys BIT(0): prefer LE 1M receiver PHY +## BIT(1): prefer LE 2M receiver PHY +## BIT(2): prefer LE coded receiver PHY +## Others: reserved for future +## +## @return 0: Message is sent to controller +## + proc gap_set_phy*(con_handle: uint16; all_phys: uint8; tx_phys: phy_bittypes_t; rx_phys: phy_bittypes_t; phy_opt: phy_option_t): uint8 {. importc: "gap_set_phy", header: "gap.h".} +## * +## @brief Host to set a random address for an advertising set +## +## @param adv_handle handle to advertising set +## +## @param random_addr random address +## +## @return 0: Message is sent to controller +## + proc gap_set_adv_set_random_addr*(adv_handle: uint8; random_addr: ptr uint8): uint8 {. importc: "gap_set_adv_set_random_addr", header: "gap.h".} +## * +## @brief Structure of PHY configuration +## + type scan_phy_config_t* {.importc: "scan_phy_config_t", header: "gap.h", bycopy.} = object phy* {.importc: "phy".}: phy_type_t ## Which phy to scan (valid phys: 1M & Coded) @@ -97,12 +258,14 @@ type window* {.importc: "window".}: uint16 -## Scan filter policy +## * +## @brief enum of definition: Scan filter policy +## type ## Accept all advertising packets except directed advertising packets not ## addressed to this device (default). scan_filter_policy_t* {.size: sizeof(cint).} = enum - SCAN_ACCEPT_ALL_EXCEPT_NOT_DIRECTED, ## Accept only advertising packets from devices where the advertiser¡¯s + SCAN_ACCEPT_ALL_EXCEPT_NOT_DIRECTED, ## Accept only advertising packets from devices where the advertiser¡¯s ## address is in the White List. Directed advertising packets which are not ## addressed to this device shall be ignored SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, ## Accept all advertising packets except directed advertising packets @@ -115,16 +278,73 @@ type ## Accept all advertising packets except directed advertising packets not SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH +## * +## @brief to set the extended scan parameters +## +## @param addr_type address type +## +## @param filter @link #scan_filter_policy_t @endlink +## +## @param config_num configure number 3 at most. It indicates that host would configure how many kinds of PHY +## +## @param configs struture pointer to the configuration of each PHY host specify +## +## @return 0: messgae sent to controller +## + proc gap_set_ext_scan_para*(addr_type: bd_addr_type_t; filter: scan_filter_policy_t; config_num: uint8; configs: ptr scan_phy_config_t): uint8 {. importc: "gap_set_ext_scan_para", header: "gap.h".} +## * +## @brief to set the extended scan response data for an advertising set +## +## @param adv_handle handle of advertising set handle +## +## @param length length of advertising data +## +## @param data pointer to the advertising data. +## +## @return 0: messgae sent to controller +## + proc gap_set_ext_scan_response_data*(adv_handle: uint8; length: uint16; data: ptr uint8): uint8 {. importc: "gap_set_ext_scan_response_data", header: "gap.h".} +## * +## @brief to enable or disable scanning +## +## @param enable 0: disable 1: enable +## +## @param filter policy to filter the advertising package +## 0x00: Duplicate filtering disabled +## 0x01: Duplicate filtering enabled +## 0x02: Duplicate filtering enabled, reset for each scan period +## others:Reserved for future +## +## @param duration 0x0000: Scan continuously until explicitly disable +## N=0xXXXX: Scan duration +## Range: 0x0001 to 0xFFFF +## Time = N * 10 ms +## Time Range: 10 ms to 655.35 s +## +## @param period 0x0000: Scan continuously +## N=0xXXXX: Time interval from when the Controller started its last Scan_Duration +## until it begins the subsequent Scan_Duration +## Range: 0x0001 to 0xFFFF +## Time = N * 1.28 sec +## Time Range: 1.28 s to 83,884.8 s +## +## @return 0: messgae sent to controller +## + proc gap_set_ext_scan_enable*(enable: uint8; filter: uint8; duration: uint16; period: uint16): uint8 {. importc: "gap_set_ext_scan_enable", header: "gap.h".} +## * +## @brief structure of advertising set information +## + type ext_adv_set_en_t* {.importc: "ext_adv_set_en_t", header: "gap.h", bycopy.} = object handle* {.importc: "handle".}: uint8 ## Advertising duration, unit 10ms. 0 for continuous advertising @@ -133,10 +353,25 @@ type max_events* {.importc: "max_events".}: uint8 +## * +## @brief to enable or disable an advertising set +## +## @param enalbe 0: disable advertising specified by adv_sets +## 1: enable advertising sepecified by adv_sets +## @param set_number number of advertising set +## +## @param adv_sets see structure @link #ext_adv_set_en_t @endlink +## +## @return 0: message sent to controller +## + proc gap_set_ext_adv_enable*(enable: uint8; set_number: uint8; adv_sets: ptr ext_adv_set_en_t): uint8 {. importc: "gap_set_ext_adv_enable", header: "gap.h".} -## channel map bit +## * +## @brief channel map bit +## +## const PRIMARY_ADV_CH_37* = BIT(0) @@ -148,7 +383,10 @@ const type adv_channel_bits_t* = uint8 -## Advertising filter policy +## * +## @brief Advertising filter policy +## +## type ## Allow both scan and connection requests from anyone adv_filter_policy_t* {.size: sizeof(cint).} = enum @@ -158,6 +396,50 @@ type ## Allow both scan and connection requests from an ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST +## * +## @brief to set the advertising set parameter +## +## @param adv_handle handle of an advertising set +## 1: enable advertising sepecified by adv_sets +## @param properties see structure @link #adv_event_properties_t @endlink +## +## @param interval_min Range: 0x000020 to 0xFFFFFF +## Time = N * 0.625 ms +## Time Range: 20 ms to 10,485.759375 s +## +## @param interal_max see @link #interval_min @endlink +## +## @param primary_adv_channel_map see structure @link #adv_channel_bits_t @endlink +## +## @param own_addr_type own BLE device address type +## +## @param peer_addr_type peer BLE device address type +## +## @param peer_addr peer BLE device address +## +## @param adv_filter_policy filter policy , see structure @link #adv_filter_policy_t @endlink +## +## @param tx_power tranmission power +## 0xXX : Size: 1 octet (signed integer) +## Range: -127 to +20 +## Units: dBm +## 0x7f : Host has no preference +## +## @param primary_adv_phy see structure @link #phy_type_t @endlink +## +## @param secondary_adv_max_skip 0x00 : AUX_ADV_IND shall be sent prior to the next advertising event +## 0x01-0xFF: Maximum advertising events the Controller can skip +## +## @param secondary_adv_phy see structure @link #phy_type_t @endlink +## +## @param sid 0x00-0x0f:Value of the Advertising SID subfield in the ADI field of the PDU +## +## @param scan_req_notification_enable 0x00: Scan request notifications disabled +## 0x01: Scan request notifications enabled +## +## @return 0: message sent to controller +## + proc gap_set_ext_adv_para*(adv_handle: uint8; properties: adv_event_properties_t; interval_min: uint32; interval_max: uint32; primary_adv_channel_map: adv_channel_bits_t; @@ -169,49 +451,206 @@ proc gap_set_ext_adv_para*(adv_handle: uint8; properties: adv_event_properties_t secondary_adv_phy: phy_type_t; sid: uint8; scan_req_notification_enable: uint8): uint8 {. importc: "gap_set_ext_adv_para", header: "gap.h".} +## * +## @brief structure adv_data_frag_pref_t_t +## + type adv_data_frag_pref_t_t* {.size: sizeof(cint).} = enum ADV_DATA_CTRL_MAY_FRAG = 0, ADV_DATA_CTRL_NOT_FRAG = 1 +## * +## @brief to set extended advertising data +## +## @param adv_handle advertising set handle. +## +## @param length advertising data length +## +## @param data pointer to advertising data +## +## @return 0: message sent to controller +## + proc gap_set_ext_adv_data*(adv_handle: uint8; length: uint16; data: ptr uint8): uint8 {. importc: "gap_set_ext_adv_data", header: "gap.h".} +## * +## @brief LE Set Periodic Advertising Data command +## +## @param adv_handle advertising set handle. +## +## @param length advertising data length +## +## @param data pointer to periodic advertising data +## +## @return 0: message sent to controller +## + proc gap_set_periodic_adv_data*(adv_handle: uint8; length: uint16; data: ptr uint8): uint8 {. importc: "gap_set_periodic_adv_data", header: "gap.h".} +## * +## @brief LE Set Periodic Advertising Enable command +## +## @param enable 0x00: Periodic advertising is disabled (default) +## 0x01: Periodic advertising is enabled +## +## @param adv_handle handle of advertising set +## +## @return 0: message sent to controller +## + proc gap_set_periodic_adv_enable*(enable: uint8; adv_handle: uint8): uint8 {. importc: "gap_set_periodic_adv_enable", header: "gap.h".} +## * +## @brief LE Set Periodic Advertising Parameters command +## +## @param adv_handle handle of advertising set +## +## @param interval_min 0xXXXX Range: 0x0006 to 0xFFFF +## Time = N * 1.25 ms +## Time Range: 7.5ms to 81.91875 s +## +## @param interval_max refer to interval_min +## +## @param properties BIT(6): Include TxPower in the advertising PDU +## +## @return 0: message sent to controller +## + proc gap_set_periodic_adv_para*(adv_handle: uint8; interval_min: uint16; interval_max: uint16; properties: periodic_adv_properties_t): uint8 {. importc: "gap_set_periodic_adv_para", header: "gap.h".} +## * +## @brief LE Clear Advertising Sets command +## +## @return 0: message sent to controller +## + proc gap_clr_adv_set*(): uint8 {.importc: "gap_clr_adv_set", header: "gap.h".} +## * +## @brief LE Remove Advertising Set command +## +## @param adv_handle handle of advertising set to be removed +## +## @return 0: message sent to controller +## + proc gap_rmv_adv_set*(adv_handle: uint8): uint8 {.importc: "gap_rmv_adv_set", header: "gap.h".} +## * +## @brief enum of periodical advertising filter policy +## + type periodic_adv_filter_policy_t* {.size: sizeof(cint).} = enum PERIODIC_ADVERTISER_FROM_PARAM = 0, PERIODIC_ADVERTISER_FROM_LIST = 1 +## * +## @brief LE Periodic Advertising Create Sync command +## +## @param filter_policy see structure periodic_adv_filter_policy_t +## +## @param adv_sid 0x00-0x0f: Advertising SID subfield in the ADI field used to identify the Periodic +## Advertising +## @param addr_type see structure @link #bd_addr_type_t @endlink +## +## @param addr pointer to address +## +## @param skip 0x0000-0x01f3: The number of periodic advertising packets that can be skipped after a +## successful receive +## @param sync_timeout Synchronization timeout for the periodic advertising +## Range: 0x000A to 0x4000 +## Time = N*10 ms +## Time Range: 100 ms to 163.84 s +## +## @return 0: message sent to controller +## + proc gap_periodic_adv_create_sync*(filter_policy: periodic_adv_filter_policy_t; adv_sid: uint8; addr_type: bd_addr_type_t; `addr`: ptr uint8; skip: uint16; sync_timeout: uint16; sync_cte_type: uint8): uint8 {. importc: "gap_periodic_adv_create_sync", header: "gap.h".} +## * +## @brief LE Periodic Advertising Create Sync Cancel command +## +## @return 0: message sent to controller +## + proc gap_periodic_adv_create_sync_cancel*(): uint8 {. importc: "gap_periodic_adv_create_sync_cancel", header: "gap.h".} +## * +## @brief LE Periodic Advertising Terminate Sync command +## +## @param sync_handle Sync_Handle identifying the periodic advertising train +## +## @return 0: message sent to controller +## + proc gap_periodic_adv_term_sync*(sync_handle: uint16): uint8 {. importc: "gap_periodic_adv_term_sync", header: "gap.h".} +## * +## @brief LE Add Device To Periodic Advertiser List command +## +## @param addr_type device address type +## +## @param addr pointer to device address +## +## @param sid 0x00-0x0F: Advertising SID subfield in the ADI field used to identify the Periodic Advertising +## +## @return 0: message sent to controller +## + proc gap_add_dev_to_periodic_list*(addr_type: uint8; `addr`: ptr uint8; sid: uint8): uint8 {. importc: "gap_add_dev_to_periodic_list", header: "gap.h".} +## * +## @brief LE Remove Device From Periodic Advertiser List command +## +## @param addr_type device address type +## +## @param addr pointer to device address +## +## @param sid 0x00-0x0F: Advertising SID subfield in the ADI field used to identify the Periodic Advertising +## +## @return 0: message sent to controller +## + proc gap_rmv_dev_from_periodic_list*(addr_type: uint8; `addr`: ptr uint8; sid: uint8): uint8 {. importc: "gap_rmv_dev_from_periodic_list", header: "gap.h".} +## * +## @brief LE Clear Periodic Advertiser List command +## +## @return 0: message sent to controller +## + proc gap_clr_periodic_adv_list*(): uint8 {.importc: "gap_clr_periodic_adv_list", header: "gap.h".} +## * +## @brief LE Read Periodic Advertiser List Size command +## +## @return 0: message sent to controller +## + proc gap_read_periodic_adv_list_size*(): uint8 {. importc: "gap_read_periodic_adv_list_size", header: "gap.h".} +## * +## @brief structure initiating_filter_policy_t +## +## + type initiating_filter_policy_t* {.size: sizeof(cint).} = enum INITIATING_ADVERTISER_FROM_PARAM = 0, INITIATING_ADVERTISER_FROM_LIST = 1 + + +## * +## @brief structure connection parameters +## +## + +type conn_para_t* {.importc: "conn_para_t", header: "gap.h", bycopy.} = object scan_int* {.importc: "scan_int".}: uint16 ## Scan interval, units is 625us ## Scan window size, units is 625us @@ -223,12 +662,36 @@ type min_ce_len* {.importc: "min_ce_len".}: uint16 max_ce_len* {.importc: "max_ce_len".}: uint16 + +## * +## @brief structure initiating PHY configuration +## +## + +type initiating_phy_config_t* {.importc: "initiating_phy_config_t", header: "gap.h", bycopy.} = object phy* {.importc: "phy".}: phy_type_t conn_param* {.importc: "conn_param".}: conn_para_t +## * +## @brief LE Extended Create Connection command +## +## @param filter_policy see structure @link #initiating_filter_policy_t @endlink +## +## @param own_addr_type own device address type +## +## @param peer_addr_type peer device address type +## +## @param peer_addr pointer to peer device address +## +## @param initiating_phy_num PHY numbers configured for initiating process +## +## @param phy_configs see structure @link #initiating_phy_config_t @endlink. phy_configs type array according to initiating_phy_num. +## +## @return 0: message sent to controller +## proc gap_ext_create_connection*(filter_policy: initiating_filter_policy_t; own_addr_type: bd_addr_type_t; @@ -239,9 +702,15 @@ proc gap_ext_create_connection*(filter_policy: initiating_filter_policy_t; ## * ## @brief Cancel connection process initiated by gap_ext_create_connection ## +## proc gap_create_connection_cancel*(): uint8 {. importc: "gap_create_connection_cancel", header: "gap.h".} +## * +## @brief structure:cte_type_t +## +## + type cte_type_t* {.size: sizeof(cint).} = enum CTE_AOA, CTE_AOD_1US, CTE_AOD_2US @@ -253,7 +722,7 @@ type ## identified by the Advertising_Handle parameter. ## ## @param adv_handle Used to identify an advertising set. Range: 0x00 to 0xEF -## @param cte_len Constant Tone Extension length in 8 ¦Ìs units. Range: 0x02 to 0x14 +## @param cte_len Constant Tone Extension length in 8 us units. Range: 0x02 to 0x14 ## @param cte_type CTE Type ## @param cte_count The number of Constant Tone Extensions to transmit in each periodic ## advertising interval. @@ -262,13 +731,11 @@ type ## @param antenna_ids List of Antenna IDs in the pattern ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_set_connectionless_cte_tx_param(const uint8_t adv_handle, -## const uint8_t cte_len, -## const cte_type_t cte_type, -## const uint8_t cte_count, -## const uint8_t switching_pattern_len, -## const uint8_t *antenna_ids); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connectionless_cte_tx_param*(adv_handle: uint8; cte_len: uint8; + cte_type: cte_type_t; cte_count: uint8; switching_pattern_len: uint8; + antenna_ids: ptr uint8): uint8 {.importc: "gap_set_connectionless_cte_tx_param", + header: "gap.h".} ## * ## @brief Request that the Controller enables or disables the use of Constant Tone ## Extensions in any periodic advertising on the advertising set identified by @@ -279,9 +746,13 @@ type ## @param cte_enable Disable (0x00), Enable (0x01) ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_set_connectionless_cte_tx_enable(const uint8_t adv_handle, -## const uint8_t cte_enable); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connectionless_cte_tx_enable*(adv_handle: uint8; cte_enable: uint8): uint8 {. + importc: "gap_set_connectionless_cte_tx_enable", header: "gap.h".} +## * +## @brief structure:cte_slot_duration_type_t +## +## type cte_slot_duration_type_t* {.size: sizeof(cint).} = enum @@ -304,13 +775,11 @@ type ## ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_set_connectionless_iq_sampling_enable(const uint16_t sync_handle, -## const uint8_t sampling_enable, -## const uint8_t slot_durations, -## const uint8_t max_sampled_ctes, -## const uint8_t switching_pattern_len, -## const uint8_t *antenna_ids); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connectionless_iq_sampling_enable*(sync_handle: uint16; + sampling_enable: uint8; slot_durations: uint8; max_sampled_ctes: uint8; + switching_pattern_len: uint8; antenna_ids: ptr uint8): uint8 {. + importc: "gap_set_connectionless_iq_sampling_enable", header: "gap.h".} ## * ## @brief Enable or disable sampling received Constant Tone Extension fields on the ## connection identified by the Connection_Handle parameter and to set the @@ -325,12 +794,13 @@ type ## @return 0: Message is sent out; Other: Message is not sent out ## ## -## uint8_t gap_set_connection_cte_rx_param(const hci_con_handle_t conn_handle, -## const uint8_t sampling_enable, -## const uint8_t slot_durations, -## const uint8_t switching_pattern_len, -## const uint8_t *antenna_ids); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connection_cte_rx_param*(conn_handle: hci_con_handle_t; + sampling_enable: uint8; + slot_durations: uint8; + switching_pattern_len: uint8; + antenna_ids: ptr uint8): uint8 {. + importc: "gap_set_connection_cte_rx_param", header: "gap.h".} ## * ## @brief Set the antenna switching pattern and permitted Constant Tone Extension ## types used for transmitting Constant Tone Extensions requested by the peer @@ -343,11 +813,12 @@ type ## @return 0: Message is sent out; Other: Message is not sent out ## ## -## uint8_t gap_set_connection_cte_tx_param(const hci_con_handle_t conn_handle, -## const uint8_t cte_types, -## const uint8_t switching_pattern_len, -## const uint8_t *antenna_ids); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connection_cte_tx_param*(conn_handle: hci_con_handle_t; + cte_types: uint8; + switching_pattern_len: uint8; + antenna_ids: ptr uint8): uint8 {. + importc: "gap_set_connection_cte_tx_param", header: "gap.h".} ## * ## @brief Set the antenna switching pattern and permitted Constant Tone Extension ## types used for transmitting Constant Tone Extensions requested by the peer @@ -361,17 +832,16 @@ type ## Requested interval for initiating the Constant Tone Extension Request ## procedure in number of connection events. ## @param requested_cte_length Minimum length of the Constant Tone Extension being requested in 8 -## ¦Ìs units. Range: 0x02 to 0x14. +## us units. Range: 0x02 to 0x14. ## @param requested_cte_type Requested CTE type ## @return 0: Message is sent out; Other: Message is not sent out ## ## -## uint8_t gap_set_connection_cte_request_enable(const hci_con_handle_t conn_handle, -## const uint8_t enable, -## const uint16_t requested_cte_interval, -## const uint8_t requested_cte_length, -## const cte_type_t requested_cte_type); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connection_cte_request_enable*(conn_handle: hci_con_handle_t; + enable: uint8; requested_cte_interval: uint16; requested_cte_length: uint8; + requested_cte_type: cte_type_t): uint8 {. + importc: "gap_set_connection_cte_request_enable", header: "gap.h".} ## * ## @brief Request the Controller to respond to LL_CTE_REQ PDUs with LL_CTE_RSP ## PDUs on the specified connection. @@ -380,17 +850,19 @@ type ## @param enable Disable (0x00), Enable (0x01) ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_set_connection_cte_response_enable(const hci_con_handle_t conn_handle, -## const uint8_t enable); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_connection_cte_response_enable*(conn_handle: hci_con_handle_t; + enable: uint8): uint8 {.importc: "gap_set_connection_cte_response_enable", + header: "gap.h".} ## * ## @brief Read the switching rates, the sampling rates, the number of antennae, and the ## maximum length of a transmitted Constant Tone Extension supported by the ## Controller. ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_read_antenna_info(void); -## WARNING: ^^^ this API is not available in this release + +proc gap_read_antenna_info*(): uint8 {.importc: "gap_read_antenna_info", + header: "gap.h".} ## * ## @brief Enable or disable reports for the periodic advertising train identified by the ## Sync_Handle parameter. @@ -400,9 +872,9 @@ type ## ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_set_periodic_adv_rx_enable(const uint16_t sync_handle, -## const uint8_t enable); -## WARNING: ^^^ this API is not available in this release + +proc gap_set_periodic_adv_rx_enable*(sync_handle: uint16; enable: uint8): uint8 {. + importc: "gap_set_periodic_adv_rx_enable", header: "gap.h".} ## * ## @brief Instruct the Controller to send synchronization information about the periodic ## advertising train identified by the Sync_Handle parameter to a connected @@ -415,10 +887,10 @@ type ## ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_periodic_adv_sync_transfer(const hci_con_handle_t conn_handle, -## const uint16_t service_data, -## const uint16_t sync_handle); -## WARNING: ^^^ this API is not available in this release + +proc gap_periodic_adv_sync_transfer*(conn_handle: hci_con_handle_t; + service_data: uint16; sync_handle: uint16): uint8 {. + importc: "gap_periodic_adv_sync_transfer", header: "gap.h".} ## * ## @brief Instruct the Controller to send synchronization information about the periodic ## advertising in an advertising set to a connected device. @@ -430,11 +902,10 @@ type ## ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_periodic_adv_set_info_transfer(const hci_con_handle_t conn_handle, -## const uint16_t service_data, -## const uint8_t adv_handle); -## WARNING: ^^^ this API is not available in this release +proc gap_periodic_adv_set_info_transfer*(conn_handle: hci_con_handle_t; + service_data: uint16; adv_handle: uint8): uint8 {. + importc: "gap_periodic_adv_set_info_transfer", header: "gap.h".} type periodic_adv_sync_transfer_mode_t* {.size: sizeof(cint).} = enum PERIODIC_TRANS_MODE_NULL, PERIODIC_TRANS_MODE_SEND_EVT_DISABLE_REPORT, @@ -467,12 +938,11 @@ const ## Combination of SYNC_EXCL_XXX ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_periodic_adv_sync_transfer_param(const hci_con_handle_t conn_handle, -## const periodic_adv_sync_transfer_mode_t mode, -## const uint16_t skip, -## const uint16_t sync_timeout, -## const uint8_t cte_excl_types); -## WARNING: ^^^ this API is not available in this release + +proc gap_periodic_adv_sync_transfer_param*(conn_handle: hci_con_handle_t; + mode: periodic_adv_sync_transfer_mode_t; skip: uint16; sync_timeout: uint16; + cte_excl_types: uint8): uint8 {.importc: "gap_periodic_adv_sync_transfer_param", + header: "gap.h".} ## * ## @brief Specify the initial value for the mode, skip, timeout, and ## Constant Tone Extension type (set by the @@ -492,13 +962,11 @@ const ## Combination of SYNC_EXCL_XXX ## @return 0: Message is sent out; Other: Message is not sent out ## -## uint8_t gap_default_periodic_adv_sync_transfer_param( -## const periodic_adv_sync_transfer_mode_t mode, -## const uint16_t skip, -## const uint16_t sync_timeout, -## const uint8_t cte_excl_types); -## WARNING: ^^^ this API is not available in this release +proc gap_default_periodic_adv_sync_transfer_param*( + mode: periodic_adv_sync_transfer_mode_t; skip: uint16; sync_timeout: uint16; + cte_excl_types: uint8): uint8 {.importc: "gap_default_periodic_adv_sync_transfer_param", + header: "gap.h".} proc gap_set_host_channel_classification*(channel_low: uint32; channel_high: uint8): uint8 {. importc: "gap_set_host_channel_classification", header: "gap.h".} ## * @@ -526,14 +994,14 @@ proc gap_update_connection_parameters*(con_handle: hci_con_handle_t; importc: "gap_update_connection_parameters", header: "gap.h".} ## * ## @brief Set accepted connection parameter range -## @param range +## @param range see structure @link #le_connection_parameter_range_t @endlink ## proc gap_get_connection_parameter_range*(range: ptr le_connection_parameter_range_t) {. importc: "gap_get_connection_parameter_range", header: "gap.h".} ## * ## @brief Get accepted connection parameter range -## @param range +## @param range see structure @link #le_connection_parameter_range_t @endlink ## proc gap_set_connection_parameter_range*(range: ptr le_connection_parameter_range_t) {. @@ -554,6 +1022,33 @@ proc gap_aes_encrypt*(key: ptr uint8; plaintext: ptr uint8): uint8 {. const HCI_VENDOR_CCM* = 0x0000FC01 +## * +## @brief host require controller to do AES-CCM functionality, and CCM referece to +## the document rfc3610:Counter with CBC-MAC (CCM) +## +## @param type 0: encrypt 1:decrypt +## +## @param mic_size 8: mic size in 8 bytes 4: mic size in 4 bytes +## +## @param msg_len messge length to be encrypt or decrypt +## +## @param aad_len Additional authenticated data length +## +## @param tag a value to identify a AES-CCM request. +## +## @param key 128 bits long key as required by AES-CCM +## +## @param nonce random value of each AES-CCM require 13 bytes long +## +## @param msg pointer to the message input +## +## @param aad Additional authenticated data +## +## @param out_msg the output buffer to store the result of the AES-CCM ,calculated by controller. +## +## @return 0: success others: failed +## + proc gap_start_ccm*(`type`: uint8; mic_size: uint8; msg_len: uint16; aad_len: uint16; tag: uint32; key: ptr uint8; nonce: ptr uint8; msg: ptr uint8; aad: ptr uint8; out_msg: ptr uint8): uint8 {. @@ -562,7 +1057,9 @@ proc gap_start_ccm*(`type`: uint8; mic_size: uint8; msg_len: uint16; aad_len: ui ## same value will be reported in event ## HCI func interface ## * -## @brief Add event packet handler. +## @brief Add event packet handler into HCI callback queue +## +## @param callback_handler see structure @link #btstack_packet_callback_registration_t @endlink ## proc hci_add_event_handler*(callback_handler: ptr btstack_packet_callback_registration_t) {. @@ -570,12 +1067,18 @@ proc hci_add_event_handler*(callback_handler: ptr btstack_packet_callback_regist ## * ## @brief Registers a packet handler for ACL data. Used by L2CAP ## +## @param handler see function type @link btstack_packet_handler_t() @endlink +## proc hci_register_acl_packet_handler*(handler: btstack_packet_handler_t) {. importc: "hci_register_acl_packet_handler", header: "gap.h".} ## * ## @brief Requests the change of BTstack power mode. ## +## @param mode 0:HCI_POWER_OFF ,1:HCI_POWER_ON , 2:HCI_POWER_SLEEP +## +## @return 0: succss +## proc hci_power_control*(mode: HCI_POWER_MODE): cint {.importc: "hci_power_control", header: "gap.h".} @@ -590,3 +1093,7 @@ type ## No security LEVEL_3, ## Authenticated LE Secure Connections pairing with encryption LEVEL_4 + +## * +## @} +## diff --git a/bundles/typical/inc/gatt_client.h b/bundles/typical/inc/gatt_client.h index 36336a7e6..5723f5d79 100644 --- a/bundles/typical/inc/gatt_client.h +++ b/bundles/typical/inc/gatt_client.h @@ -1,14 +1,15 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// +/** @file + * @brief generic access profile + * Copyright Message + * + * INGCHIPS confidential and proprietary. + * COPYRIGHT (c) 2018 by INGCHIPS + * + * All rights are reserved. Reproduction in whole or in part is + * prohibited without the written consent of the copyright owner. + * + * +*/ // ---------------------------------------------------------------------------- #ifndef _GATT_CLIENT_H @@ -25,28 +26,88 @@ extern "C" { #endif -typedef struct { +/** + * @brief Bluetooth + * @defgroup Bluetooth_gatt_client + * @ingroup bluetooth_stack + * @{ + */ + +#define UUID128_LEN (16) + +#pragma pack(push, 1) + +typedef struct +{ + uint16_t handle; + uint8_t value[0]; // length is given in `value_size` +} gatt_event_value_packet_t; + +typedef struct +{ + uint16_t handle; + uint16_t offset; + uint8_t value[0]; // length is given in `value_size` +} gatt_event_long_value_packet_t; + +typedef struct +{ + hci_con_handle_t handle; + uint8_t status; +} gatt_event_query_complete_t; + +typedef struct +{ uint16_t start_group_handle; uint16_t end_group_handle; - uint16_t uuid16; - uint8_t uuid128[16]; + uint8_t uuid128[UUID128_LEN]; } gatt_client_service_t; +typedef struct +{ + hci_con_handle_t handle; + gatt_client_service_t service; +} gatt_event_service_query_result_t; + typedef struct { uint16_t start_handle; uint16_t value_handle; uint16_t end_handle; uint16_t properties; - uint16_t uuid16; - uint8_t uuid128[16]; + uint8_t uuid128[UUID128_LEN]; } gatt_client_characteristic_t; +typedef struct +{ + hci_con_handle_t handle; + gatt_client_characteristic_t characteristic; +} gatt_event_characteristic_query_result_t; + typedef struct { uint16_t handle; - uint16_t uuid16; - uint8_t uuid128[16]; + uint8_t uuid128[UUID128_LEN]; } gatt_client_characteristic_descriptor_t; +typedef struct +{ + hci_con_handle_t handle; + gatt_client_characteristic_descriptor_t descriptor; +} gatt_event_characteristic_descriptor_query_result_t; + +typedef struct +{ + hci_con_handle_t handle; + uint16_t include_handle; + gatt_client_service_t service; +} gatt_event_included_service_query_result_t; + +typedef struct { + hci_con_handle_t handle; + gatt_client_characteristic_descriptor_t descriptor; +} gatt_event_all_characteristic_descriptors_query_result_t; + +#pragma pack(pop) + /** * @brief Discovers all primary services. For each found service, an le_service_event_t with type set to GATT_EVENT_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t, with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. */ @@ -57,27 +118,29 @@ uint8_t gatt_client_discover_primary_services(user_packet_handler_t callback, hc */ uint8_t gatt_client_discover_primary_services_by_uuid16(user_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t uuid16); uint8_t gatt_client_discover_primary_services_by_uuid128(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint8_t * uuid128); -uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); + /** * @brief Finds included services within the specified service. For each found included service, an le_service_event_t with type set to GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. Information about included service type (primary/secondary) can be retrieved either by sending an ATT find information request for the returned start group handle (returning the handle and the UUID for primary or secondary service) or by comparing the service to the list of all primary services. */ -uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_service_t *service); +uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, + const uint16_t start_group_handle, const uint16_t end_group_handle); /** - * @brief The following four functions are used to discover all characteristics within the specified service or handle range, and return those that match the given UUID. For each found characteristic, an le_characteristic_event_t with type set to GATT_EVENT_CHARACTERISTIC_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. + * @brief The following function are used to discover all characteristics within the specified service or handle range + */ +uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, + const uint16_t start_group_handle, const uint16_t end_group_handle); + +/** + * @brief The following two functions are used to discover all characteristics within the specified service or handle range, and return those that match the given UUID. For each found characteristic, an le_characteristic_event_t with type set to GATT_EVENT_CHARACTERISTIC_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. */ uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid16(btstack_packet_handler_t callback, const hci_con_handle_t con_handle, const uint16_t start_handle, const uint16_t end_handle, const uint16_t uuid16); uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid128(btstack_packet_handler_t callback, const hci_con_handle_t con_handle, const uint16_t start_handle, const uint16_t end_handle, const uint8_t * uuid128); -uint8_t gatt_client_discover_characteristics_for_service_by_uuid16 (btstack_packet_handler_t callback, - const hci_con_handle_t con_handle, gatt_client_service_t *service, - const uint16_t uuid16); -uint8_t gatt_client_discover_characteristics_for_service_by_uuid128(btstack_packet_handler_t callback, - const hci_con_handle_t con_handle, gatt_client_service_t *service, const uint8_t * uuid128); /** * @brief Discovers attribute handle and UUID of a characteristic descriptor within the specified characteristic. For each found descriptor, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. @@ -87,7 +150,6 @@ uint8_t gatt_client_discover_characteristic_descriptors(btstack_packet_handler_t /** * @brief Reads the characteristic value using the characteristic's value handle. If the characteristic value is found, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. */ -uint8_t gatt_client_read_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); /** @@ -99,7 +161,6 @@ uint8_t gatt_client_read_value_of_characteristics_by_uuid128(btstack_packet_hand /** * @brief Reads the long characteristic value using the characteristic's value handle. The value will be returned in several blobs. For each blob, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT and updated value offset will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, mark the end of read. */ -uint8_t gatt_client_read_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t *characteristic); uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle); uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset); @@ -135,22 +196,18 @@ uint8_t gatt_client_reliable_write_long_value_of_characteristic(btstack_packet_h /** * @brief Reads the characteristic descriptor using its handle. If the characteristic descriptor is found, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. */ -uint8_t gatt_client_read_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); uint8_t gatt_client_read_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); /** * @brief Reads the long characteristic descriptor using its handle. It will be returned in several blobs. For each blob, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. */ -uint8_t gatt_client_read_long_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor); uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle); uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset); /** * @brief Writes the characteristic descriptor using its handle. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of write. The write is successfully performed, if the event's status field is set to 0. */ -uint8_t gatt_client_write_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); uint8_t gatt_client_write_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); -uint8_t gatt_client_write_long_characteristic_descriptor(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_descriptor_t * descriptor, uint16_t length, uint8_t * data); uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t length, uint8_t * data); uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, uint16_t offset, uint16_t length, uint8_t * data); @@ -174,12 +231,6 @@ uint8_t gatt_client_execute_write(btstack_packet_handler_t callback, hci_con_han * @brief -> gatt complete event */ uint8_t gatt_client_cancel_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle); -void gatt_client_deserialize_service(const uint8_t *packet, int offset, gatt_client_service_t *service); -void gatt_client_deserialize_characteristic(const uint8_t * packet, int offset, gatt_client_characteristic_t * characteristic); -void gatt_client_deserialize_characteristic_descriptor(const uint8_t * packet, int offset, gatt_client_characteristic_descriptor_t * descriptor); - -int ble_gatts_find_svc(const ble_uuid_t *uuid, uint16_t *out_handle); -int ble_gatts_find_chr(uint16_t srv_handle, const ble_uuid_t *uuid,uint16_t *out_att_chr); typedef struct gatt_client_notification { btstack_linked_item_t item; @@ -204,7 +255,7 @@ int gatt_client_is_ready(hci_con_handle_t con_handle); * @param con_handle * @param characteristic */ -void gatt_client_listen_for_characteristic_value_updates(gatt_client_notification_t * notification, btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic); +void gatt_client_listen_for_characteristic_value_updates(gatt_client_notification_t * notification, btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, uint16_t value_handle); /** * @brief Register for general events @@ -215,125 +266,52 @@ void gatt_client_register_handler(btstack_packet_handler_t handler); // only used for testing void gatt_client_pts_suppress_mtu_exchange(void); -#pragma pack(push, 1) - -typedef struct -{ - uint16_t handle; - uint8_t value[0]; // length is given in `value_size` -} gatt_event_value_packet_t; - -typedef struct -{ - uint16_t handle; - uint16_t offset; - uint8_t value[0]; // length is given in `value_size` -} gatt_event_long_value_packet_t; - -#pragma pack(pop) - /** - * @brief Get field handle from event GATT_EVENT_QUERY_COMPLETE + * @brief Parse event GATT_EVENT_QUERY_COMPLETE * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_query_complete_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field status from event GATT_EVENT_QUERY_COMPLETE - * @param event packet - * @return status - * @note: btstack_type 1 + * @return parsed result */ -static __INLINE uint8_t gatt_event_query_complete_get_status(const uint8_t * event){ - return *decode_event_offset(event, uint8_t, 4); +static __INLINE const gatt_event_query_complete_t * gatt_event_query_complete_parse(const uint8_t * event){ + return decode_event_offset(event, gatt_event_query_complete_t, 2); } /** - * @brief Get field handle from event GATT_EVENT_SERVICE_QUERY_RESULT - * @param event packet - * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_service_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field service from event GATT_EVENT_SERVICE_QUERY_RESULT + * @brief Parse event GATT_EVENT_SERVICE_QUERY_RESULT * @param event packet - * @param Pointer to storage for service - * @note: btstack_type X + * @return parsed result */ -static __INLINE void gatt_event_service_query_result_get_service(const uint8_t * event, gatt_client_service_t * service){ - gatt_client_deserialize_service(event, 4, service); +static __INLINE const gatt_event_service_query_result_t * gatt_event_service_query_result_parse(const uint8_t * event){ + return decode_event_offset(event, gatt_event_service_query_result_t, 2); } /** - * @brief Get field handle from event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT + * @brief Parse event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT * @param event packet * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_characteristic_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field characteristic from event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT - * @param event packet - * @param Pointer to storage for characteristic - * @note: btstack_type Y + * @note: parsed result */ -static __INLINE void gatt_event_characteristic_query_result_get_characteristic(const uint8_t * event, gatt_client_characteristic_t * characteristic){ - gatt_client_deserialize_characteristic(event, 4, characteristic); +static __INLINE const gatt_event_characteristic_query_result_t * gatt_event_characteristic_query_result_parse(const uint8_t * event){ + return decode_event_offset(event, gatt_event_characteristic_query_result_t, 2); } /** - * @brief Get field handle from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT + * @brief Parse event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT * @param event packet * @return handle - * @note: btstack_type H - */ -static __INLINE hci_con_handle_t gatt_event_included_service_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field include_handle from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT - * @param event packet - * @return include_handle - * @note: btstack_type 2 + * @note: parsed result */ -static __INLINE uint16_t gatt_event_included_service_query_result_get_include_handle(const uint8_t * event){ - return little_endian_read_16(event, 4); -} -/** - * @brief Get field service from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT - * @param event packet - * @param Pointer to storage for service - * @note: btstack_type X - */ -static __INLINE void gatt_event_included_service_query_result_get_service(const uint8_t * event, gatt_client_service_t * service){ - gatt_client_deserialize_service(event, 6, service); +static __INLINE const gatt_event_included_service_query_result_t * gatt_event_included_service_query_result_parse(const uint8_t * event){ + return decode_event_offset(event, gatt_event_included_service_query_result_t, 2); } /** - * @brief Get field handle from event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT + * @brief Parse event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT * @param event packet * @return handle - * @note: btstack_type H + * @note: parsed result */ -static __INLINE hci_con_handle_t gatt_event_all_characteristic_descriptors_query_result_get_handle(const uint8_t * event){ - return little_endian_read_16(event, 2); -} -/** - * @brief Get field characteristic_descriptor from event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT - * @param event packet - * @param Pointer to storage for characteristic_descriptor - * @note: btstack_type Z - */ -static __INLINE void gatt_event_all_characteristic_descriptors_query_result_get_characteristic_descriptor(const uint8_t * event, gatt_client_characteristic_descriptor_t * characteristic_descriptor){ - gatt_client_deserialize_characteristic_descriptor(event, 4, characteristic_descriptor); +static __INLINE const gatt_event_all_characteristic_descriptors_query_result_t * gatt_event_all_characteristic_descriptors_query_result_parse(const uint8_t * event){ + return decode_event_offset(event, gatt_event_all_characteristic_descriptors_query_result_t, 2); } /** @@ -433,6 +411,9 @@ static __INLINE uint16_t gatt_event_mtu_get_mtu(const uint8_t * event){ return little_endian_read_16(event, 4); } +/** + * @} +*/ #ifdef __cplusplus } #endif diff --git a/bundles/typical/inc/gatt_client.nim b/bundles/typical/inc/gatt_client.nim index c3a48476e..693441b15 100644 --- a/bundles/typical/inc/gatt_client.nim +++ b/bundles/typical/inc/gatt_client.nim @@ -1,12 +1,13 @@ -## ---------------------------------------------------------------------------- +## * @file +## @brief generic access profile ## Copyright Message -## ---------------------------------------------------------------------------- ## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018 by INGCHIPS +## INGCHIPS confidential and proprietary. +## COPYRIGHT (c) 2018 by INGCHIPS +## +## All rights are reserved. Reproduction in whole or in part is +## prohibited without the written consent of the copyright owner. ## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. ## ## ## ---------------------------------------------------------------------------- @@ -14,13 +15,43 @@ import bluetooth, bt_types, btstack_util, btstack_event, btstack_linked_list +## * +## @brief Bluetooth +## @defgroup Bluetooth_gatt_client +## @ingroup bluetooth_stack +## @{ +## + +const + UUID128_LEN* = (16) + type + gatt_event_value_packet_t* {.importc: "gatt_event_value_packet_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: uint16 + value* {.importc: "value".}: UncheckedArray[uint8] ## length is given in `value_size` + + gatt_event_long_value_packet_t* {.importc: "gatt_event_long_value_packet_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: uint16 + offset* {.importc: "offset".}: uint16 + value* {.importc: "value".}: UncheckedArray[uint8] ## length is given in `value_size` + + gatt_event_query_complete_t* {.importc: "gatt_event_query_complete_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: hci_con_handle_t + status* {.importc: "status".}: uint8 + gatt_client_service_t* {.importc: "gatt_client_service_t", header: "gatt_client.h", bycopy.} = object start_group_handle* {.importc: "start_group_handle".}: uint16 end_group_handle* {.importc: "end_group_handle".}: uint16 - uuid16* {.importc: "uuid16".}: uint16 - uuid128* {.importc: "uuid128".}: array[16, uint8] + uuid128* {.importc: "uuid128".}: array[UUID128_LEN, uint8] + + gatt_event_service_query_result_t* {.importc: "gatt_event_service_query_result_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: hci_con_handle_t + service* {.importc: "service".}: gatt_client_service_t gatt_client_characteristic_t* {.importc: "gatt_client_characteristic_t", header: "gatt_client.h", bycopy.} = object @@ -28,15 +59,38 @@ type value_handle* {.importc: "value_handle".}: uint16 end_handle* {.importc: "end_handle".}: uint16 properties* {.importc: "properties".}: uint16 - uuid16* {.importc: "uuid16".}: uint16 - uuid128* {.importc: "uuid128".}: array[16, uint8] + uuid128* {.importc: "uuid128".}: array[UUID128_LEN, uint8] + + gatt_event_characteristic_query_result_t* {. + importc: "gatt_event_characteristic_query_result_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: hci_con_handle_t + characteristic* {.importc: "characteristic".}: gatt_client_characteristic_t gatt_client_characteristic_descriptor_t* {. importc: "gatt_client_characteristic_descriptor_t", header: "gatt_client.h", bycopy.} = object handle* {.importc: "handle".}: uint16 - uuid16* {.importc: "uuid16".}: uint16 - uuid128* {.importc: "uuid128".}: array[16, uint8] + uuid128* {.importc: "uuid128".}: array[UUID128_LEN, uint8] + + gatt_event_characteristic_descriptor_query_result_t* {. + importc: "gatt_event_characteristic_descriptor_query_result_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: hci_con_handle_t + descriptor* {.importc: "descriptor".}: gatt_client_characteristic_descriptor_t + + gatt_event_included_service_query_result_t* {. + importc: "gatt_event_included_service_query_result_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: hci_con_handle_t + include_handle* {.importc: "include_handle".}: uint16 + service* {.importc: "service".}: gatt_client_service_t + + gatt_event_all_characteristic_descriptors_query_result_t* {. + importc: "gatt_event_all_characteristic_descriptors_query_result_t", + header: "gatt_client.h", bycopy.} = object + handle* {.importc: "handle".}: hci_con_handle_t + descriptor* {.importc: "descriptor".}: gatt_client_characteristic_descriptor_t ## * @@ -58,22 +112,26 @@ proc gatt_client_discover_primary_services_by_uuid128*( callback: user_packet_handler_t; con_handle: hci_con_handle_t; uuid128: ptr uint8): uint8 {.importc: "gatt_client_discover_primary_services_by_uuid128", header: "gatt_client.h".} -proc gatt_client_discover_characteristics_for_service*( - callback: user_packet_handler_t; con_handle: hci_con_handle_t; - service: ptr gatt_client_service_t): uint8 {. - importc: "gatt_client_discover_characteristics_for_service", - header: "gatt_client.h".} ## * ## @brief Finds included services within the specified service. For each found included service, an le_service_event_t with type set to GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. Information about included service type (primary/secondary) can be retrieved either by sending an ATT find information request for the returned start group handle (returning the handle and the UUID for primary or secondary service) or by comparing the service to the list of all primary services. ## proc gatt_client_find_included_services_for_service*( callback: user_packet_handler_t; con_handle: hci_con_handle_t; - service: ptr gatt_client_service_t): uint8 {. + start_group_handle: uint16; end_group_handle: uint16): uint8 {. importc: "gatt_client_find_included_services_for_service", header: "gatt_client.h".} ## * -## @brief The following four functions are used to discover all characteristics within the specified service or handle range, and return those that match the given UUID. For each found characteristic, an le_characteristic_event_t with type set to GATT_EVENT_CHARACTERISTIC_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. +## @brief The following function are used to discover all characteristics within the specified service or handle range +## + +proc gatt_client_discover_characteristics_for_service*( + callback: user_packet_handler_t; con_handle: hci_con_handle_t; + start_group_handle: uint16; end_group_handle: uint16): uint8 {. + importc: "gatt_client_discover_characteristics_for_service", + header: "gatt_client.h".} +## * +## @brief The following two functions are used to discover all characteristics within the specified service or handle range, and return those that match the given UUID. For each found characteristic, an le_characteristic_event_t with type set to GATT_EVENT_CHARACTERISTIC_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. ## proc gatt_client_discover_characteristics_for_handle_range_by_uuid16*( @@ -85,16 +143,6 @@ proc gatt_client_discover_characteristics_for_handle_range_by_uuid128*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; start_handle: uint16; end_handle: uint16; uuid128: ptr uint8): uint8 {.importc: "gatt_client_discover_characteristics_for_handle_range_by_uuid128", header: "gatt_client.h".} -proc gatt_client_discover_characteristics_for_service_by_uuid16*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - service: ptr gatt_client_service_t; uuid16: uint16): uint8 {. - importc: "gatt_client_discover_characteristics_for_service_by_uuid16", - header: "gatt_client.h".} -proc gatt_client_discover_characteristics_for_service_by_uuid128*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - service: ptr gatt_client_service_t; uuid128: ptr uint8): uint8 {. - importc: "gatt_client_discover_characteristics_for_service_by_uuid128", - header: "gatt_client.h".} ## * ## @brief Discovers attribute handle and UUID of a characteristic descriptor within the specified characteristic. For each found descriptor, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of discovery. ## @@ -108,10 +156,6 @@ proc gatt_client_discover_characteristic_descriptors*( ## @brief Reads the characteristic value using the characteristic's value handle. If the characteristic value is found, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. ## -proc gatt_client_read_value_of_characteristic*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - characteristic: ptr gatt_client_characteristic_t): uint8 {. - importc: "gatt_client_read_value_of_characteristic", header: "gatt_client.h".} proc gatt_client_read_value_of_characteristic_using_value_handle*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; characteristic_value_handle: uint16): uint8 {. @@ -135,11 +179,6 @@ proc gatt_client_read_value_of_characteristics_by_uuid128*( ## @brief Reads the long characteristic value using the characteristic's value handle. The value will be returned in several blobs. For each blob, an le_characteristic_value_event_t with type set to GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT and updated value offset will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, mark the end of read. ## -proc gatt_client_read_long_value_of_characteristic*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - characteristic: ptr gatt_client_characteristic_t): uint8 {. - importc: "gatt_client_read_long_value_of_characteristic", - header: "gatt_client.h".} proc gatt_client_read_long_value_of_characteristic_using_value_handle*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; characteristic_value_handle: uint16): uint8 {.importc: "gatt_client_read_long_value_of_characteristic_using_value_handle", @@ -206,10 +245,6 @@ proc gatt_client_reliable_write_long_value_of_characteristic*( ## @brief Reads the characteristic descriptor using its handle. If the characteristic descriptor is found, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. ## -proc gatt_client_read_characteristic_descriptor*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - descriptor: ptr gatt_client_characteristic_descriptor_t): uint8 {. - importc: "gatt_client_read_characteristic_descriptor", header: "gatt_client.h".} proc gatt_client_read_characteristic_descriptor_using_descriptor_handle*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; descriptor_handle: uint16): uint8 {.importc: "gatt_client_read_characteristic_descriptor_using_descriptor_handle", @@ -218,11 +253,6 @@ proc gatt_client_read_characteristic_descriptor_using_descriptor_handle*( ## @brief Reads the long characteristic descriptor using its handle. It will be returned in several blobs. For each blob, an le_characteristic_descriptor_event_t with type set to GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT will be generated and passed to the registered callback. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of read. ## -proc gatt_client_read_long_characteristic_descriptor*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - descriptor: ptr gatt_client_characteristic_descriptor_t): uint8 {. - importc: "gatt_client_read_long_characteristic_descriptor", - header: "gatt_client.h".} proc gatt_client_read_long_characteristic_descriptor_using_descriptor_handle*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; descriptor_handle: uint16): uint8 {.importc: "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle", @@ -235,20 +265,10 @@ proc gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_wit ## @brief Writes the characteristic descriptor using its handle. The gatt_complete_event_t with type set to GATT_EVENT_QUERY_COMPLETE, marks the end of write. The write is successfully performed, if the event's status field is set to 0. ## -proc gatt_client_write_characteristic_descriptor*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - descriptor: ptr gatt_client_characteristic_descriptor_t; length: uint16; - data: ptr uint8): uint8 {.importc: "gatt_client_write_characteristic_descriptor", - header: "gatt_client.h".} proc gatt_client_write_characteristic_descriptor_using_descriptor_handle*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; descriptor_handle: uint16; length: uint16; data: ptr uint8): uint8 {.importc: "gatt_client_write_characteristic_descriptor_using_descriptor_handle", header: "gatt_client.h".} -proc gatt_client_write_long_characteristic_descriptor*( - callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; - descriptor: ptr gatt_client_characteristic_descriptor_t; length: uint16; - data: ptr uint8): uint8 {.importc: "gatt_client_write_long_characteristic_descriptor", - header: "gatt_client.h".} proc gatt_client_write_long_characteristic_descriptor_using_descriptor_handle*( callback: btstack_packet_handler_t; con_handle: hci_con_handle_t; descriptor_handle: uint16; length: uint16; data: ptr uint8): uint8 {.importc: "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle", @@ -289,21 +309,6 @@ proc gatt_client_execute_write*(callback: btstack_packet_handler_t; proc gatt_client_cancel_write*(callback: btstack_packet_handler_t; con_handle: hci_con_handle_t): uint8 {. importc: "gatt_client_cancel_write", header: "gatt_client.h".} -proc gatt_client_deserialize_service*(packet: ptr uint8; offset: cint; - service: ptr gatt_client_service_t) {. - importc: "gatt_client_deserialize_service", header: "gatt_client.h".} -proc gatt_client_deserialize_characteristic*(packet: ptr uint8; offset: cint; - characteristic: ptr gatt_client_characteristic_t) {. - importc: "gatt_client_deserialize_characteristic", header: "gatt_client.h".} -proc gatt_client_deserialize_characteristic_descriptor*(packet: ptr uint8; - offset: cint; descriptor: ptr gatt_client_characteristic_descriptor_t) {. - importc: "gatt_client_deserialize_characteristic_descriptor", - header: "gatt_client.h".} -proc ble_gatts_find_svc*(uuid: ptr ble_uuid_t; out_handle: ptr uint16): cint {. - importc: "ble_gatts_find_svc", header: "gatt_client.h".} -proc ble_gatts_find_chr*(srv_handle: uint16; uuid: ptr ble_uuid_t; - out_att_chr: ptr uint16): cint {. - importc: "ble_gatts_find_chr", header: "gatt_client.h".} type gatt_client_notification_t* {.importc: "gatt_client_notification_t", header: "gatt_client.h", bycopy.} = object @@ -335,9 +340,8 @@ proc gatt_client_is_ready*(con_handle: hci_con_handle_t): cint {. proc gatt_client_listen_for_characteristic_value_updates*( notification: ptr gatt_client_notification_t; packet_handler: btstack_packet_handler_t; con_handle: hci_con_handle_t; - characteristic: ptr gatt_client_characteristic_t) {. - importc: "gatt_client_listen_for_characteristic_value_updates", - header: "gatt_client.h".} + value_handle: uint16) {.importc: "gatt_client_listen_for_characteristic_value_updates", + header: "gatt_client.h".} ## * ## @brief Register for general events ## @param handler @@ -349,136 +353,55 @@ proc gatt_client_register_handler*(handler: btstack_packet_handler_t) {. proc gatt_client_pts_suppress_mtu_exchange*() {. importc: "gatt_client_pts_suppress_mtu_exchange", header: "gatt_client.h".} -type - gatt_event_value_packet_t* {.importc: "gatt_event_value_packet_t", - header: "gatt_client.h", bycopy.} = object - handle* {.importc: "handle".}: uint16 - value* {.importc: "value".}: UncheckedArray[uint8] ## length is given in `value_size` - - gatt_event_long_value_packet_t* {.importc: "gatt_event_long_value_packet_t", - header: "gatt_client.h", bycopy.} = object - handle* {.importc: "handle".}: uint16 - offset* {.importc: "offset".}: uint16 - value* {.importc: "value".}: UncheckedArray[uint8] ## length is given in `value_size` - - ## * -## @brief Get field handle from event GATT_EVENT_QUERY_COMPLETE +## @brief Parse event GATT_EVENT_QUERY_COMPLETE ## @param event packet -## @return handle -## @note: btstack_type H +## @return parsed result ## -proc gatt_event_query_complete_get_handle*(event: ptr uint8): hci_con_handle_t = - return little_endian_read_16(event, 2) +proc gatt_event_query_complete_parse*(event: ptr uint8): ptr gatt_event_query_complete_t = + return decode_event_offset(event, gatt_event_query_complete_t, 2) ## * -## @brief Get field status from event GATT_EVENT_QUERY_COMPLETE +## @brief Parse event GATT_EVENT_SERVICE_QUERY_RESULT ## @param event packet -## @return status -## @note: btstack_type 1 +## @return parsed result ## -proc gatt_event_query_complete_get_status*(event: ptr uint8): uint8 = - return decode_event_offset(event, uint8, 4)[] +proc gatt_event_service_query_result_parse*(event: ptr uint8): ptr gatt_event_service_query_result_t = + return decode_event_offset(event, gatt_event_service_query_result_t, 2) ## * -## @brief Get field handle from event GATT_EVENT_SERVICE_QUERY_RESULT +## @brief Parse event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT ## @param event packet ## @return handle -## @note: btstack_type H +## @note: parsed result ## -proc gatt_event_service_query_result_get_handle*(event: ptr uint8): hci_con_handle_t = - return little_endian_read_16(event, 2) +proc gatt_event_characteristic_query_result_parse*(event: ptr uint8): ptr gatt_event_characteristic_query_result_t = + return decode_event_offset(event, gatt_event_characteristic_query_result_t, 2) ## * -## @brief Get field service from event GATT_EVENT_SERVICE_QUERY_RESULT -## @param event packet -## @param Pointer to storage for service -## @note: btstack_type X -## - -proc gatt_event_service_query_result_get_service*(event: ptr uint8; - service: ptr gatt_client_service_t) = - gatt_client_deserialize_service(event, 4, service) - -## * -## @brief Get field handle from event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT +## @brief Parse event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT ## @param event packet ## @return handle -## @note: btstack_type H -## - -proc gatt_event_characteristic_query_result_get_handle*(event: ptr uint8): hci_con_handle_t = - return little_endian_read_16(event, 2) - -## * -## @brief Get field characteristic from event GATT_EVENT_CHARACTERISTIC_QUERY_RESULT -## @param event packet -## @param Pointer to storage for characteristic -## @note: btstack_type Y +## @note: parsed result ## -proc gatt_event_characteristic_query_result_get_characteristic*(event: ptr uint8; - characteristic: ptr gatt_client_characteristic_t) = - gatt_client_deserialize_characteristic(event, 4, characteristic) +proc gatt_event_included_service_query_result_parse*(event: ptr uint8): ptr gatt_event_included_service_query_result_t = + return decode_event_offset(event, gatt_event_included_service_query_result_t, 2) ## * -## @brief Get field handle from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT +## @brief Parse event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT ## @param event packet ## @return handle -## @note: btstack_type H +## @note: parsed result ## -proc gatt_event_included_service_query_result_get_handle*(event: ptr uint8): hci_con_handle_t = - return little_endian_read_16(event, 2) - -## * -## @brief Get field include_handle from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT -## @param event packet -## @return include_handle -## @note: btstack_type 2 -## - -proc gatt_event_included_service_query_result_get_include_handle*( - event: ptr uint8): uint16 = - return little_endian_read_16(event, 4) - -## * -## @brief Get field service from event GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT -## @param event packet -## @param Pointer to storage for service -## @note: btstack_type X -## - -proc gatt_event_included_service_query_result_get_service*(event: ptr uint8; - service: ptr gatt_client_service_t) = - gatt_client_deserialize_service(event, 6, service) - -## * -## @brief Get field handle from event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT -## @param event packet -## @return handle -## @note: btstack_type H -## - -proc gatt_event_all_characteristic_descriptors_query_result_get_handle*( - event: ptr uint8): hci_con_handle_t = - return little_endian_read_16(event, 2) - -## * -## @brief Get field characteristic_descriptor from event GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT -## @param event packet -## @param Pointer to storage for characteristic_descriptor -## @note: btstack_type Z -## - -proc gatt_event_all_characteristic_descriptors_query_result_get_characteristic_descriptor*( - event: ptr uint8; - characteristic_descriptor: ptr gatt_client_characteristic_descriptor_t) = - gatt_client_deserialize_characteristic_descriptor(event, 4, - characteristic_descriptor) +proc gatt_event_all_characteristic_descriptors_query_result_parse*( + event: ptr uint8): ptr gatt_event_all_characteristic_descriptors_query_result_t = + return decode_event_offset(event, gatt_event_all_characteristic_descriptors_query_result_t, + 2) ## * ## @brief Get value from event GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT @@ -579,3 +502,7 @@ proc gatt_event_mtu_get_handle*(event: ptr uint8): hci_con_handle_t = proc gatt_event_mtu_get_mtu*(event: ptr uint8): uint16 = return little_endian_read_16(event, 4) + +## * +## @} +## diff --git a/bundles/typical/inc/kv_storage.h b/bundles/typical/inc/kv_storage.h index f4f076060..4eb849740 100644 --- a/bundles/typical/inc/kv_storage.h +++ b/bundles/typical/inc/kv_storage.h @@ -1,21 +1,24 @@ -// ---------------------------------------------------------------------------- -// Copyright Message -// ---------------------------------------------------------------------------- -// -// INGCHIPS confidential and proprietary. -// COPYRIGHT (c) 2018-2019 by INGCHIPS -// -// All rights are reserved. Reproduction in whole or in part is -// prohibited without the written consent of the copyright owner. -// -// -// ---------------------------------------------------------------------------- +/** @file * +* @brief helper function to cache data into flash * +* @version 1.0.0. * +* @date 2019/10/10 * +* * +* Copyright (c) 2019 IngChips corp. * +* * +* * + *************************************************************************************************************/ #ifndef _KV_STORAGE_H #define _KV_STORAGE_H #include +/** + * @brief Bluetooth + * @defgroup Bluetooth_NVM + * @ingroup bluetooth_stack + * @{ + */ /** * @brief A simple key-value storage * @@ -94,9 +97,7 @@ void kv_init(f_kv_write_to_nvm f_write, /** * @brief remove all k-v parirs */ -// void kv_remove_all(void); -// WARNING: ^^^ this API is not available in this release - +void kv_remove_all(void); /** * @brief remove a k-v pair @@ -132,10 +133,10 @@ void kv_value_modified(void); /** * @brief commited whole db to nvm immediately + * @param[in] flag_always if signaled, always write to nvm no matter if modified or not. + * Otherwise, do not write to nvm if not modified. */ -// void kv_commit(void); -// WARNING: ^^^ this API is not available in this release - +void kv_commit(int flag_always_write); /** * @brief traverse each k-v pair @@ -167,4 +168,8 @@ void kv_visit(f_kv_visitor visitor, void *user_data); // WARNING: ^^^ this API is not available in this release +/* +* @} +*/ + #endif diff --git a/bundles/typical/inc/kv_storage.nim b/bundles/typical/inc/kv_storage.nim index 8da2fde55..9bb3d48f0 100644 --- a/bundles/typical/inc/kv_storage.nim +++ b/bundles/typical/inc/kv_storage.nim @@ -1,16 +1,20 @@ -## ---------------------------------------------------------------------------- -## Copyright Message -## ---------------------------------------------------------------------------- +## * @file * +## @brief helper function to cache data into flash * +## @version 1.0.0. * +## @date 2019/10/10 * +## * +## Copyright (c) 2019 IngChips corp. * +## * +## * ## -## INGCHIPS confidential and proprietary. -## COPYRIGHT (c) 2018-2019 by INGCHIPS -## -## All rights are reserved. Reproduction in whole or in part is -## prohibited without the written consent of the copyright owner. -## -## -## ---------------------------------------------------------------------------- +## *********************************************************************************************************** +## * +## @brief Bluetooth +## @defgroup Bluetooth_NVM +## @ingroup bluetooth_stack +## @{ +## ## * ## @brief A simple key-value storage ## @@ -168,3 +172,6 @@ proc kv_visit*(visitor: f_kv_visitor; user_data: pointer) {.importc: "kv_visit", ## ## int kv_value_trunc(const kvkey_t key, const int16_t new_len); ## WARNING: ^^^ this API is not available in this release +## +## @} +## diff --git a/bundles/typical/inc/os/FreeRTOS.nim b/bundles/typical/inc/os/FreeRTOS.nim index 1743fdcc8..5e9f5c4bf 100644 --- a/bundles/typical/inc/os/FreeRTOS.nim +++ b/bundles/typical/inc/os/FreeRTOS.nim @@ -22,8 +22,8 @@ const const - pdFALSE* = (cast[UBaseType_t](0)) - pdTRUE* = (cast[UBaseType_t](1)) + pdFALSE* = (cast[BaseType_t](0)) + pdTRUE* = (cast[BaseType_t](1)) pdPASS* = (pdTRUE) pdFAIL* = (pdFALSE) errQUEUE_EMPTY* = (cast[BaseType_t](0)) @@ -32,7 +32,7 @@ const portMAX_DELAY* = 0xffffffffu32 template pdMS_TO_TICKS*(xTimeInMs: int32): TickType_t = - cast[TickType_t]((cast[uint32](xTimeInMs) * cast[uint32](configTICK_RATE_HZ)) div 1000) + cast[TickType_t]((xTimeInMs* cast[int32](configTICK_RATE_HZ)) div 1000) type List_t* {.importc: "List_t", header: "FreeRTOSNim.h", bycopy.} = object @@ -90,13 +90,14 @@ type ## type - QueueDefinition* {.importc: "QueueDefinition", header: "FreeRTOSNim.h", bycopy.} = object + QueueDefinition* {.importc: "struct QueueDefinition", header: "FreeRTOSNim.h", bycopy.} = object ## Using old naming convention so as not to break kernel aware debuggers. type QueueHandle_t* = ptr QueueDefinition + SemaphoreHandle_t* = QueueHandle_t ## * ## Type by which queue sets are referenced. For example, a call to @@ -165,9 +166,19 @@ type proc xQueueGenericSend*(xQueue: QueueHandle_t; pvItemToQueue: pointer; xTicksToWait: TickType_t; xCopyPosition: BaseType_t): BaseType_t {. importc: "xQueueGenericSend", header: "FreeRTOSNim.h".} +proc xQueuePeek*(xQueue: QueueHandle_t; pvBuffer: pointer; xTicksToWait: TickType_t): BaseType_t {. + importc: "xQueuePeek", header: "FreeRTOSNim.h".} +proc xQueuePeekFromISR*(xQueue: QueueHandle_t; pvBuffer: pointer): BaseType_t {. + importc: "xQueuePeekFromISR", header: "FreeRTOSNim.h".} proc xQueueReceive*(xQueue: QueueHandle_t; pvBuffer: pointer; xTicksToWait: TickType_t): BaseType_t {. importc: "xQueueReceive", header: "FreeRTOSNim.h".} +proc uxQueueMessagesWaiting*(xQueue: QueueHandle_t): UBaseType_t {. + importc: "uxQueueMessagesWaiting", header: "FreeRTOSNim.h".} +proc uxQueueSpacesAvailable*(xQueue: QueueHandle_t): UBaseType_t {. + importc: "uxQueueSpacesAvailable", header: "FreeRTOSNim.h".} +proc vQueueDelete*(xQueue: QueueHandle_t) {.importc: "vQueueDelete", + header: "FreeRTOSNim.h".} proc xQueueGenericSendFromISR*(xQueue: QueueHandle_t; pvItemToQueue: pointer; pxHigherPriorityTaskWoken: ptr BaseType_t; xCopyPosition: BaseType_t): BaseType_t {. @@ -175,8 +186,31 @@ proc xQueueGenericSendFromISR*(xQueue: QueueHandle_t; pvItemToQueue: pointer; proc xQueueGiveFromISR*(xQueue: QueueHandle_t; pxHigherPriorityTaskWoken: ptr BaseType_t): BaseType_t {. importc: "xQueueGiveFromISR", header: "FreeRTOSNim.h".} +proc xQueueReceiveFromISR*(xQueue: QueueHandle_t; pvBuffer: pointer; + pxHigherPriorityTaskWoken: ptr BaseType_t): BaseType_t {. + importc: "xQueueReceiveFromISR", header: "FreeRTOSNim.h".} +proc xQueueIsQueueEmptyFromISR*(xQueue: QueueHandle_t): BaseType_t {. + importc: "xQueueIsQueueEmptyFromISR", header: "FreeRTOSNim.h".} +proc xQueueIsQueueFullFromISR*(xQueue: QueueHandle_t): BaseType_t {. + importc: "xQueueIsQueueFullFromISR", header: "FreeRTOSNim.h".} +proc uxQueueMessagesWaitingFromISR*(xQueue: QueueHandle_t): UBaseType_t {. + importc: "uxQueueMessagesWaitingFromISR", header: "FreeRTOSNim.h".} +proc xQueueCreateMutex*(ucQueueType: uint8): QueueHandle_t {. + importc: "xQueueCreateMutex", header: "FreeRTOSNim.h".} +proc xQueueCreateMutexStatic*(ucQueueType: uint8; pxStaticQueue: ptr StaticQueue_t): QueueHandle_t {. + importc: "xQueueCreateMutexStatic", header: "FreeRTOSNim.h".} +proc xQueueCreateCountingSemaphore*(uxMaxCount: UBaseType_t; + uxInitialCount: UBaseType_t): QueueHandle_t {. + importc: "xQueueCreateCountingSemaphore", header: "FreeRTOSNim.h".} +proc xQueueCreateCountingSemaphoreStatic*(uxMaxCount: UBaseType_t; + uxInitialCount: UBaseType_t; pxStaticQueue: ptr StaticQueue_t): QueueHandle_t {. + importc: "xQueueCreateCountingSemaphoreStatic", header: "FreeRTOSNim.h".} proc xQueueSemaphoreTake*(xQueue: QueueHandle_t; xTicksToWait: TickType_t): BaseType_t {. importc: "xQueueSemaphoreTake", header: "FreeRTOSNim.h".} +proc xQueueTakeMutexRecursive*(xMutex: QueueHandle_t; xTicksToWait: TickType_t): BaseType_t {. + importc: "xQueueTakeMutexRecursive", header: "FreeRTOSNim.h".} +proc xQueueGiveMutexRecursive*(xMutex: QueueHandle_t): BaseType_t {. + importc: "xQueueGiveMutexRecursive", header: "FreeRTOSNim.h".} proc xQueueGenericCreate*(uxQueueLength: UBaseType_t; uxItemSize: UBaseType_t; ucQueueType: uint8): QueueHandle_t {. importc: "xQueueGenericCreate", header: "FreeRTOSNim.h".} @@ -185,6 +219,18 @@ proc xQueueGenericCreateStatic*(uxQueueLength: UBaseType_t; pucQueueStorage: ptr uint8; pxStaticQueue: ptr StaticQueue_t; ucQueueType: uint8): QueueHandle_t {. importc: "xQueueGenericCreateStatic", header: "FreeRTOSNim.h".} +proc xQueueCreateSet*(uxEventQueueLength: UBaseType_t): QueueSetHandle_t {. + importc: "xQueueCreateSet", header: "FreeRTOSNim.h".} +proc xQueueAddToSet*(xQueueOrSemaphore: QueueSetMemberHandle_t; + xQueueSet: QueueSetHandle_t): BaseType_t {. + importc: "xQueueAddToSet", header: "FreeRTOSNim.h".} +proc xQueueRemoveFromSet*(xQueueOrSemaphore: QueueSetMemberHandle_t; + xQueueSet: QueueSetHandle_t): BaseType_t {. + importc: "xQueueRemoveFromSet", header: "FreeRTOSNim.h".} +proc xQueueSelectFromSet*(xQueueSet: QueueSetHandle_t; xTicksToWait: TickType_t): QueueSetMemberHandle_t {. + importc: "xQueueSelectFromSet", header: "FreeRTOSNim.h".} +proc xQueueSelectFromSetFromISR*(xQueueSet: QueueSetHandle_t): QueueSetMemberHandle_t {. + importc: "xQueueSelectFromSetFromISR", header: "FreeRTOSNim.h".} proc vQueueWaitForMessageRestricted*(xQueue: QueueHandle_t; xTicksToWait: TickType_t; xWaitIndefinitely: BaseType_t) {. @@ -222,6 +268,8 @@ proc vTaskPlaceOnEventListRestricted*(pxEventList: ptr List_t; proc xTaskRemoveFromEventList*(pxEventList: ptr List_t): BaseType_t {. importc: "xTaskRemoveFromEventList", header: "FreeRTOSNim.h".} proc vTaskSwitchContext*() {.importc: "vTaskSwitchContext", header: "FreeRTOSNim.h".} +proc xTaskGetCurrentTaskHandle*(): TaskHandle_t {. + importc: "xTaskGetCurrentTaskHandle", header: "FreeRTOSNim.h".} proc xTaskCheckForTimeOut*(pxTimeOut: ptr TimeOut_t; pxTicksToWait: ptr TickType_t): BaseType_t {. importc: "xTaskCheckForTimeOut", header: "FreeRTOSNim.h".} proc vTaskMissedYield*() {.importc: "vTaskMissedYield", header: "FreeRTOSNim.h".} @@ -234,10 +282,6 @@ proc xTaskPriorityDisinherit*(pxMutexHolder: TaskHandle_t): BaseType_t {. proc vTaskPriorityDisinheritAfterTimeout*(pxMutexHolder: TaskHandle_t; uxHighestPriorityWaitingTask: UBaseType_t) {. importc: "vTaskPriorityDisinheritAfterTimeout", header: "FreeRTOSNim.h".} -proc vTaskStepTick*(xTicksToJump: TickType_t) {.importc: "vTaskStepTick", - header: "FreeRTOSNim.h".} -proc eTaskConfirmSleepModeStatus*(): eSleepModeStatus {. - importc: "eTaskConfirmSleepModeStatus", header: "FreeRTOSNim.h".} proc pvTaskIncrementMutexHeldCount*(): TaskHandle_t {. importc: "pvTaskIncrementMutexHeldCount", header: "FreeRTOSNim.h".} proc vTaskInternalSetTimeOutState*(pxTimeOut: ptr TimeOut_t) {. @@ -265,18 +309,59 @@ proc xTimerGenericCommand*(xTimer: TimerHandle_t; xCommandID: BaseType_t; proc pxPortInitialiseStack*(pxTopOfStack: ptr StackType_t; pxCode: TaskFunction_t; pvParameters: pointer): ptr StackType_t {. importc: "pxPortInitialiseStack", header: "FreeRTOSNim.h".} +const + tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR* = ((BaseType_t) -2) + tmrCOMMAND_EXECUTE_CALLBACK* = ((BaseType_t) -1) + tmrCOMMAND_START_DONT_TRACE* = (cast[BaseType_t](0)) + tmrCOMMAND_START* = (cast[BaseType_t](1)) + tmrCOMMAND_RESET* = (cast[BaseType_t](2)) + tmrCOMMAND_STOP* = (cast[BaseType_t](3)) + tmrCOMMAND_CHANGE_PERIOD* = (cast[BaseType_t](4)) + tmrCOMMAND_DELETE* = (cast[BaseType_t](5)) + tmrFIRST_FROM_ISR_COMMAND* = (cast[BaseType_t](6)) + tmrCOMMAND_START_FROM_ISR* = (cast[BaseType_t](6)) + tmrCOMMAND_RESET_FROM_ISR* = (cast[BaseType_t](7)) + tmrCOMMAND_STOP_FROM_ISR* = (cast[BaseType_t](8)) + tmrCOMMAND_CHANGE_PERIOD_FROM_ISR* = (cast[BaseType_t](9)) + +template xTimerStart*(xTimer, xTicksToWait: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_START, (xTaskGetTickCount()), nil, + (xTicksToWait)) + +template xTimerStop*(xTimer, xTicksToWait: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_STOP, 0, nil, (xTicksToWait)) + +template xTimerChangePeriod*(xTimer, xNewPeriod, xTicksToWait: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_CHANGE_PERIOD, (xNewPeriod), nil, + (xTicksToWait)) + +template xTimerDelete*(xTimer, xTicksToWait: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_DELETE, 0, nil, (xTicksToWait)) + +template xTimerReset*(xTimer, xTicksToWait: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_RESET, (xTaskGetTickCount()), nil, + (xTicksToWait)) + +template xTimerStartFromISR*(xTimer, pxHigherPriorityTaskWoken: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_START_FROM_ISR, + (xTaskGetTickCountFromISR()), (pxHigherPriorityTaskWoken), + 0) + +template xTimerStopFromISR*(xTimer, pxHigherPriorityTaskWoken: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_STOP_FROM_ISR, 0, + (pxHigherPriorityTaskWoken), 0) + +template xTimerChangePeriodFromISR*(xTimer, xNewPeriod, pxHigherPriorityTaskWoken: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, (xNewPeriod), + (pxHigherPriorityTaskWoken), 0) + +template xTimerResetFromISR*(xTimer, pxHigherPriorityTaskWoken: untyped): untyped = + xTimerGenericCommand((xTimer), tmrCOMMAND_RESET_FROM_ISR, + (xTaskGetTickCountFromISR()), (pxHigherPriorityTaskWoken), + 0) + proc pvPortMalloc*(xSize: csize): pointer {.importc: "pvPortMalloc", header: "FreeRTOSNim.h".} proc vPortFree*(pv: pointer) {.importc: "vPortFree", header: "FreeRTOSNim.h".} proc xPortStartScheduler*(): BaseType_t {.importc: "xPortStartScheduler", - header: "FreeRTOSNim.h".} - -const tmrCOMMAND_START = cast[BaseType_t](1) -const tmrCOMMAND_RESET = cast[BaseType_t](2) -const tmrCOMMAND_STOP = cast[BaseType_t](3) - -template xTimerReset*(xTimer: TimerHandle_t, xTicksToWait: uint32): BaseType_t = - xTimerGenericCommand(xTimer, tmrCOMMAND_RESET, xTaskGetTickCount(), nil, xTicksToWait) - -template xTimerStop*(xTimer: TimerHandle_t, xTicksToWait: uint32): BaseType_t = - xTimerGenericCommand(xTimer, tmrCOMMAND_STOP, 0, nil, xTicksToWait) \ No newline at end of file + header: "FreeRTOSNim.h".} \ No newline at end of file diff --git a/bundles/typical/inc/os/portable/GCC/ARM_CM3/port.c b/bundles/typical/inc/os/portable/GCC/ARM_CM3/port.c deleted file mode 100644 index 3c0c8e063..000000000 --- a/bundles/typical/inc/os/portable/GCC/ARM_CM3/port.c +++ /dev/null @@ -1,717 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value should also ensure backward compatibility. -FreeRTOS.org versions prior to V4.4.0 did not include this definition. */ -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000UL ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* Let the user override the pre-loading of the initial LR with the address of -prvTaskExitError() in case it messes up unwinding of the stack in the -debugger. */ -#ifdef configTASK_RETURN_ADDRESS - #define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS -#else - #define portTASK_RETURN_ADDRESS prvTaskExitError -#endif - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortPendSVHandler( void ) __attribute__ (( naked )); -void xPortSysTickHandler( void ); -void vPortSVCHandler( void ) __attribute__ (( naked )); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -static void prvPortStartFirstTask( void ) __attribute__ (( naked )); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * The number of SysTick increments that make up one tick period. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ -volatile uint32_t ulDummy = 0UL; - - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - while( ulDummy == 0 ) - { - /* This file calls prvTaskExitError() after the scheduler has been - started to remove a compiler warning about the function being defined - but never called. ulDummy is used purely to quieten other warnings - about code appearing after this function is called - making ulDummy - volatile makes the compiler think the function could return and - therefore not output an 'unreachable code' warning for code that appears - after it. */ - } -} -/*-----------------------------------------------------------*/ - -void vPortSVCHandler( void ) -{ - __asm volatile ( - " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " isb \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " orr r14, #0xd \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n" - ); -} -/*-----------------------------------------------------------*/ - -static void prvPortStartFirstTask( void ) -{ - __asm volatile( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc 0 \n" /* System call to start first task. */ - " nop \n" - ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. - See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - #ifdef __NVIC_PRIO_BITS - { - /* Check the CMSIS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == __NVIC_PRIO_BITS ); - } - #endif - - #ifdef configPRIO_BITS - { - /* Check the FreeRTOS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); - } - #endif - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - prvPortStartFirstTask(); - - /* Should never get here as the tasks will now be executing! Call the task - exit error function to prevent compiler warnings about a static function - not being called in the case that the application writer overrides this - functionality by defining configTASK_RETURN_ADDRESS. Call - vTaskSwitchContext() so link time optimisation does not remove the - symbol. */ - vTaskSwitchContext(); - prvTaskExitError(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void xPortPendSVHandler( void ) -{ - /* This is a naked function. */ - - __asm volatile - ( - " mrs r0, psp \n" - " isb \n" - " \n" - " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */ - " ldr r2, [r3] \n" - " \n" - " stmdb r0!, {r4-r11} \n" /* Save the remaining registers. */ - " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */ - " \n" - " stmdb sp!, {r3, r14} \n" - " mov r0, %0 \n" - " msr basepri, r0 \n" - " bl vTaskSwitchContext \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldmia sp!, {r3, r14} \n" - " \n" /* Restore the context, including the critical nesting count. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers. */ - " msr psp, r0 \n" - " isb \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst: .word pxCurrentTCB \n" - ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) - ); -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known. */ - portDISABLE_INTERRUPTS(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portENABLE_INTERRUPTS(); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE == 1 ) - - __attribute__((weak)) void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __asm volatile( "cpsid i" ::: "memory" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above the cpsid instruction() - above. */ - __asm volatile( "cpsie i" ::: "memory" ); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __asm volatile( "dsb" ::: "memory" ); - __asm volatile( "wfi" ); - __asm volatile( "isb" ); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Re-enable interrupts to allow the interrupt that brought the MCU - out of sleep mode to execute immediately. see comments above - __disable_interrupt() call above. */ - __asm volatile( "cpsie i" ::: "memory" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* Disable interrupts again because the clock is about to be stopped - and interrupts that execute while the clock is stopped will increase - any slippage between the time maintained by the RTOS and calendar - time. */ - __asm volatile( "cpsid i" ::: "memory" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* Disable the SysTick clock without reading the - portNVIC_SYSTICK_CTRL_REG register to ensure the - portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set. Again, - the time the SysTick is stopped for is accounted for as best it can - be, but using the tickless mode will inevitably result in some tiny - drift of the time maintained by the kernel with respect to calendar - time*/ - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT ); - - /* Determine if the SysTick clock has already counted to zero and - been set back to the current reload value (the reload back being - correct for the entire expected idle time) or if the SysTick is yet - to count to zero (in which case an interrupt other than the SysTick - must have brought the system out of sleep mode). */ - if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt is already pending, and the SysTick count - reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* As the pending tick will be processed as soon as this - function exits, the tick value maintained by the tick is stepped - forward by one less than the time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Exit with interrpts enabled. */ - __asm volatile( "cpsie i" ::: "memory" ); - } - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -__attribute__(( weak )) void vPortSetupTimerInterrupt( void ) -{ - /* Calculate the constants required to configure the tick interrupt. */ - #if( configUSE_TICKLESS_IDLE == 1 ) - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Stop and clear the SysTick. */ - portNVIC_SYSTICK_CTRL_REG = 0UL; - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredictable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/typical/inc/os/portable/IAR/ARM_CM3/port.c b/bundles/typical/inc/os/portable/IAR/ARM_CM3/port.c deleted file mode 100644 index bdbfdb7cc..000000000 --- a/bundles/typical/inc/os/portable/IAR/ARM_CM3/port.c +++ /dev/null @@ -1,619 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* IAR includes. */ -#include - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -#if( configMAX_SYSCALL_INTERRUPT_PRIORITY == 0 ) - #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000 ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value 255 should also ensure backward compatibility. -FreeRTOS.org versions prior to V4.3.0 did not include this definition. */ -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortSysTickHandler( void ); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -extern void vPortStartFirstTask( void ); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * The number of SysTick increments that make up one tick period. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - for( ;; ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. - See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - #ifdef __NVIC_PRIO_BITS - { - /* Check the CMSIS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == __NVIC_PRIO_BITS ); - } - #endif - - #ifdef configPRIO_BITS - { - /* Check the FreeRTOS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); - } - #endif - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - vPortStartFirstTask(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known. */ - portDISABLE_INTERRUPTS(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portENABLE_INTERRUPTS(); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE == 1 ) - - __weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __disable_interrupt(); - __DSB(); - __ISB(); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above __disable_interrupt() - call above. */ - __enable_interrupt(); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __DSB(); - __WFI(); - __ISB(); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Re-enable interrupts to allow the interrupt that brought the MCU - out of sleep mode to execute immediately. see comments above - __disable_interrupt() call above. */ - __enable_interrupt(); - __DSB(); - __ISB(); - - /* Disable interrupts again because the clock is about to be stopped - and interrupts that execute while the clock is stopped will increase - any slippage between the time maintained by the RTOS and calendar - time. */ - __disable_interrupt(); - __DSB(); - __ISB(); - - /* Disable the SysTick clock without reading the - portNVIC_SYSTICK_CTRL_REG register to ensure the - portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set. Again, - the time the SysTick is stopped for is accounted for as best it can - be, but using the tickless mode will inevitably result in some tiny - drift of the time maintained by the kernel with respect to calendar - time*/ - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT ); - - /* Determine if the SysTick clock has already counted to zero and - been set back to the current reload value (the reload back being - correct for the entire expected idle time) or if the SysTick is yet - to count to zero (in which case an interrupt other than the SysTick - must have brought the system out of sleep mode). */ - if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt is already pending, and the SysTick count - reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* As the pending tick will be processed as soon as this - function exits, the tick value maintained by the tick is stepped - forward by one less than the time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Exit with interrpts enabled. */ - __enable_interrupt(); - } - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -__weak void vPortSetupTimerInterrupt( void ) -{ - /* Calculate the constants required to configure the tick interrupt. */ - #if( configUSE_TICKLESS_IDLE == 1 ) - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Stop and clear the SysTick. */ - portNVIC_SYSTICK_CTRL_REG = 0UL; - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredictable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/typical/inc/os/portable/IAR/ARM_CM3/portasm.s b/bundles/typical/inc/os/portable/IAR/ARM_CM3/portasm.s deleted file mode 100644 index fbc278a65..000000000 --- a/bundles/typical/inc/os/portable/IAR/ARM_CM3/portasm.s +++ /dev/null @@ -1,103 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#include - - RSEG CODE:CODE(2) - thumb - - EXTERN pxCurrentTCB - EXTERN vTaskSwitchContext - - PUBLIC xPortPendSVHandler - PUBLIC vPortSVCHandler - PUBLIC vPortStartFirstTask - - - -/*-----------------------------------------------------------*/ - -xPortPendSVHandler: - mrs r0, psp - isb - ldr r3, =pxCurrentTCB /* Get the location of the current TCB. */ - ldr r2, [r3] - - stmdb r0!, {r4-r11} /* Save the remaining registers. */ - str r0, [r2] /* Save the new top of stack into the first member of the TCB. */ - - stmdb sp!, {r3, r14} - mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY - msr basepri, r0 - dsb - isb - bl vTaskSwitchContext - mov r0, #0 - msr basepri, r0 - ldmia sp!, {r3, r14} - - ldr r1, [r3] - ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ - ldmia r0!, {r4-r11} /* Pop the registers. */ - msr psp, r0 - isb - bx r14 - - -/*-----------------------------------------------------------*/ - -vPortSVCHandler: - /* Get the location of the current TCB. */ - ldr r3, =pxCurrentTCB - ldr r1, [r3] - ldr r0, [r1] - /* Pop the core registers. */ - ldmia r0!, {r4-r11} - msr psp, r0 - isb - mov r0, #0 - msr basepri, r0 - orr r14, r14, #13 - bx r14 - -/*-----------------------------------------------------------*/ - -vPortStartFirstTask - /* Use the NVIC offset register to locate the stack. */ - ldr r0, =0xE000ED08 - ldr r0, [r0] - ldr r0, [r0] - /* Set the msp back to the start of the stack. */ - msr msp, r0 - /* Call SVC to start the first task, ensuring interrupts are enabled. */ - cpsie i - cpsie f - dsb - isb - svc 0 - - END diff --git a/bundles/typical/inc/os/portable/RVDS/ARM_CM3/port.c b/bundles/typical/inc/os/portable/RVDS/ARM_CM3/port.c deleted file mode 100644 index bb7f9cc4d..000000000 --- a/bundles/typical/inc/os/portable/RVDS/ARM_CM3/port.c +++ /dev/null @@ -1,698 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.1 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -#if configMAX_SYSCALL_INTERRUPT_PRIORITY == 0 - #error configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* The __weak attribute does not work as you might expect with the Keil tools -so the configOVERRIDE_DEFAULT_TICK_CONFIGURATION constant must be set to 1 if -the application writer wants to provide their own implementation of -vPortSetupTimerInterrupt(). Ensure configOVERRIDE_DEFAULT_TICK_CONFIGURATION -is defined. */ -#ifndef configOVERRIDE_DEFAULT_TICK_CONFIGURATION - #define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 0 -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000 ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortPendSVHandler( void ); -void xPortSysTickHandler( void ); -void vPortSVCHandler( void ); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -static void prvStartFirstTask( void ); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * The number of SysTick increments that make up one tick period. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if( configUSE_TICKLESS_IDLE == 1 ) - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if ( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( uint8_t * ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */ - - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - for( ;; ); -} -/*-----------------------------------------------------------*/ - -__asm void vPortSVCHandler( void ) -{ - PRESERVE8 - - ldr r3, =pxCurrentTCB /* Restore the context. */ - ldr r1, [r3] /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ - ldmia r0!, {r4-r11} /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - msr psp, r0 /* Restore the task stack pointer. */ - isb - mov r0, #0 - msr basepri, r0 - orr r14, #0xd - bx r14 -} -/*-----------------------------------------------------------*/ - -__asm void prvStartFirstTask( void ) -{ - PRESERVE8 - - /* Use the NVIC offset register to locate the stack. */ - ldr r0, =0xE000ED08 - ldr r0, [r0] - ldr r0, [r0] - - /* Set the msp back to the start of the stack. */ - msr msp, r0 - /* Globally enable interrupts. */ - cpsie i - cpsie f - dsb - isb - /* Call SVC to start the first task. */ - svc 0 - nop - nop -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( uint8_t * ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* The kernel interrupt priority should be set to the lowest - priority. */ - configASSERT( ucMaxPriorityValue == ( configKERNEL_INTERRUPT_PRIORITY & ucMaxPriorityValue ) ); - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - #ifdef __NVIC_PRIO_BITS - { - /* Check the CMSIS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == __NVIC_PRIO_BITS ); - } - #endif - - #ifdef configPRIO_BITS - { - /* Check the FreeRTOS configuration that defines the number of - priority bits matches the number of priority bits actually queried - from the hardware. */ - configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); - } - #endif - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - prvStartFirstTask(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -__asm void xPortPendSVHandler( void ) -{ - extern uxCriticalNesting; - extern pxCurrentTCB; - extern vTaskSwitchContext; - - PRESERVE8 - - mrs r0, psp - isb - - ldr r3, =pxCurrentTCB /* Get the location of the current TCB. */ - ldr r2, [r3] - - stmdb r0!, {r4-r11} /* Save the remaining registers. */ - str r0, [r2] /* Save the new top of stack into the first member of the TCB. */ - - stmdb sp!, {r3, r14} - mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY - msr basepri, r0 - dsb - isb - bl vTaskSwitchContext - mov r0, #0 - msr basepri, r0 - ldmia sp!, {r3, r14} - - ldr r1, [r3] - ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ - ldmia r0!, {r4-r11} /* Pop the registers and the critical nesting count. */ - msr psp, r0 - isb - bx r14 - nop -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known - therefore the slightly faster vPortRaiseBASEPRI() function is used - in place of portSET_INTERRUPT_MASK_FROM_ISR(). */ - vPortRaiseBASEPRI(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - vPortClearBASEPRIFromISR(); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE == 1 ) - - __weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __disable_irq(); - __dsb( portSY_FULL_READ_WRITE ); - __isb( portSY_FULL_READ_WRITE ); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above __disable_irq() call - above. */ - __enable_irq(); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __dsb( portSY_FULL_READ_WRITE ); - __wfi(); - __isb( portSY_FULL_READ_WRITE ); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Re-enable interrupts to allow the interrupt that brought the MCU - out of sleep mode to execute immediately. see comments above - __disable_interrupt() call above. */ - __enable_irq(); - __dsb( portSY_FULL_READ_WRITE ); - __isb( portSY_FULL_READ_WRITE ); - - /* Disable interrupts again because the clock is about to be stopped - and interrupts that execute while the clock is stopped will increase - any slippage between the time maintained by the RTOS and calendar - time. */ - __disable_irq(); - __dsb( portSY_FULL_READ_WRITE ); - __isb( portSY_FULL_READ_WRITE ); - - /* Disable the SysTick clock without reading the - portNVIC_SYSTICK_CTRL_REG register to ensure the - portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set. Again, - the time the SysTick is stopped for is accounted for as best it can - be, but using the tickless mode will inevitably result in some tiny - drift of the time maintained by the kernel with respect to calendar - time*/ - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT ); - - /* Determine if the SysTick clock has already counted to zero and - been set back to the current reload value (the reload back being - correct for the entire expected idle time) or if the SysTick is yet - to count to zero (in which case an interrupt other than the SysTick - must have brought the system out of sleep mode). */ - if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt is already pending, and the SysTick count - reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* As the pending tick will be processed as soon as this - function exits, the tick value maintained by the tick is stepped - forward by one less than the time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Exit with interrpts enabled. */ - __enable_irq(); - } - } - -#endif /* #if configUSE_TICKLESS_IDLE */ - -/*-----------------------------------------------------------*/ - -/* - * Setup the SysTick timer to generate the tick interrupts at the required - * frequency. - */ -#if( configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0 ) - - void vPortSetupTimerInterrupt( void ) - { - /* Calculate the constants required to configure the tick interrupt. */ - #if( configUSE_TICKLESS_IDLE == 1 ) - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Stop and clear the SysTick. */ - portNVIC_SYSTICK_CTRL_REG = 0UL; - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); - } - -#endif /* configOVERRIDE_DEFAULT_TICK_CONFIGURATION */ -/*-----------------------------------------------------------*/ - -__asm uint32_t vPortGetIPSR( void ) -{ - PRESERVE8 - - mrs r0, ipsr - bx r14 -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - ulCurrentInterrupt = vPortGetIPSR(); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredictable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - diff --git a/bundles/typical/inc/os/queue.h b/bundles/typical/inc/os/queue.h index 0f76cc970..c58401171 100644 --- a/bundles/typical/inc/os/queue.h +++ b/bundles/typical/inc/os/queue.h @@ -741,9 +741,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ * \defgroup xQueuePeek xQueuePeek * \ingroup QueueManagement */ -// BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /** * queue. h @@ -776,9 +774,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ * \defgroup xQueuePeekFromISR xQueuePeekFromISR * \ingroup QueueManagement */ -// BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; /** * queue. h @@ -884,9 +880,7 @@ BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_ * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting * \ingroup QueueManagement */ -// UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /** * queue. h @@ -903,9 +897,7 @@ BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_ * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting * \ingroup QueueManagement */ -// UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /** * queue. h @@ -919,9 +911,7 @@ BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_ * \defgroup vQueueDelete vQueueDelete * \ingroup QueueManagement */ -// void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /** * queue. h @@ -1392,23 +1382,15 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherP * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR * \ingroup QueueManagement */ -// BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; /* * Utilities to query queues that are safe to use from an ISR. These utilities * should be used only from witin an ISR, or within a critical section. */ -// BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /* * The functions defined above are for passing data to and from tasks. The @@ -1437,18 +1419,10 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherP * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling * these functions directly. */ -// QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; +QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; +QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; +QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; // TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; // WARNING: ^^^ this API is not available in this release @@ -1461,12 +1435,8 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) * For internal use only. Use xSemaphoreTakeMutexRecursive() or * xSemaphoreGiveMutexRecursive() instead of calling these functions directly. */ -// BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - -// BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION; /* * Reset a queue back to its original empty state. The return value is now @@ -1595,9 +1565,7 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) * @return If the queue set is created successfully then a handle to the created * queue set is returned. Otherwise NULL is returned. */ -// QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; /* * Adds a queue or semaphore to a queue set that was previously created by a @@ -1621,9 +1589,7 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) * queue set because it is already a member of a different queue set then pdFAIL * is returned. */ -// BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; /* * Removes a queue or semaphore from a queue set. A queue or semaphore can only @@ -1642,9 +1608,7 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) * then pdPASS is returned. If the queue was not in the queue set, or the * queue (or semaphore) was not empty, then pdFAIL is returned. */ -// BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; /* * xQueueSelectFromSet() selects from the members of a queue set a queue or @@ -1680,16 +1644,12 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) * in the queue set that is available, or NULL if no such queue or semaphore * exists before before the specified block time expires. */ -// QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /* * A version of xQueueSelectFromSet() that can be used from an ISR. */ -// QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; /* Not public API functions. */ void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; diff --git a/bundles/typical/inc/os/task.h b/bundles/typical/inc/os/task.h index 2885f5665..08b49b360 100644 --- a/bundles/typical/inc/os/task.h +++ b/bundles/typical/inc/os/task.h @@ -1390,9 +1390,7 @@ TickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION; * \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR * \ingroup TaskUtils */ -// TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; /** * task. h @@ -2383,9 +2381,7 @@ portDONT_DISCARD void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION; /* * Return the handle of the calling task. */ -// TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; /* * Capture the current time status for future reference. diff --git a/bundles/typical/inc/os/timers.h b/bundles/typical/inc/os/timers.h index 746ed29b2..4c30b9615 100644 --- a/bundles/typical/inc/os/timers.h +++ b/bundles/typical/inc/os/timers.h @@ -1288,9 +1288,7 @@ void *pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; * will next expire is returned. If the timer is not running then the return * value is undefined. */ -// TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; -// WARNING: ^^^ this API is not available in this release - +TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /* * Functions beyond this part are not part of the public API and are intended diff --git a/bundles/typical/inc/platform_api.h b/bundles/typical/inc/platform_api.h index ee3f514ee..489b60b14 100644 --- a/bundles/typical/inc/platform_api.h +++ b/bundles/typical/inc/platform_api.h @@ -74,11 +74,15 @@ typedef enum PLATFORM_CB_EVT_ASSERTION, // when LLE is initializing - PLATFORM_CB_LLE_INIT, + PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) // if this callback is not defined, CPU enters a dead loop - PLATFORM_CB_HEAP_OOM, + PLATFORM_CB_EVT_HEAP_OOM, + + // platform callback for output or save a trace item + // NOTE: param (void *data) is casted from platform_trace_evt_t * + PLATFORM_CB_EVT_TRACE, PLATFORM_CB_EVT_MAX } platform_evt_callback_type_t; @@ -103,6 +107,40 @@ typedef enum typedef uint32_t (*f_platform_evt_cb)(void *data, void *user_data); typedef uint32_t (*f_platform_irq_cb)(void *user_data); +// A trace item is a combination of data1 and data2. Note: +// 1. len1 or len2 might be 0, but not both +// 2. if callback function finds that it can't output data of size len1 + len2, then, both data1 +// & data2 should be discarded to avoid trace item corruption. +typedef struct +{ + const void *data1; + const void *data2; + uint16_t len1; + uint16_t len2; +} platform_evt_trace_t; + +// A trace item is has an ID +typedef enum +{ + PLATFORM_TRACE_ID_EVENT = 0, + PLATFORM_TRACE_ID_HCI_CMD = 1, + PLATFORM_TRACE_ID_HCI_EVENT = 2, + PLATFORM_TRACE_ID_HCI_ACL = 3, + PLATFORM_TRACE_ID_LLCP = 4, + PLATFORM_TRACE_ID_RAW = 5, + PLATFORM_TRACE_ID_EVENT_ERROR = 6, +} platform_trace_item_t; + +/** + **************************************************************************************** + * @brief Output a block of raw data to TRACE. ID is PLATFORM_TRACE_ID_RAW + * + * @param[in] buffer data buffer + * @param[in] byte_len length of data buffer in bytes + **************************************************************************************** + */ +void platform_trace_raw(const void *buffer, const int byte_len); + /** **************************************************************************************** * @brief register callback function for platform events @@ -176,12 +214,65 @@ void platform_reset(void); */ void platform_switch_app(const uint32_t app_addr); +/** + **************************************************************************************** + * @brief Write value to the persistent register, of which the value is kept even + * in power saving mode. + * + * @param[in] value a FOUR bit value + **************************************************************************************** + */ +void platform_write_persistent_reg(const uint8_t value); + +/** + **************************************************************************************** + * @brief Read value from the persistent register, of which the value is kept even + * in power saving mode. + * + * @return value that has been written. (Initial value: 0) + **************************************************************************************** + */ +uint8_t platform_read_persistent_reg(void); + +/** + **************************************************************************************** + * @brief Shutdown the whole system, and power on again after a duration + * specified by duration_cycles. + * Optionally, a portion of SYS memory can be retentioned during shutdown. + * + * @param[in] duration_cycles Duration before power on again (measured in cycles of 32k clock) + * Mininum value: 825 cycles (about 25.18ms) + * @param[in] p_retention_data Pointer to the start of data to be retentioned + * @param[in] data_size Size of the data to be retentioned + **************************************************************************************** + */ +void platform_shutdown(const uint32_t duration_cycles, const void *p_retention_data, const uint32_t data_size); + typedef enum { - PLATFORM_CFG_LOG_HCI, // default: disabled - PLATFORM_CFG_POWER_SAVING // default: disabled + PLATFORM_CFG_LOG_HCI, // flag is ENABLE or DISABLE. default: DISABLE + PLATFORM_CFG_POWER_SAVING, // flag is ENABLE or DISABLE. default: DISABLE + PLATFORM_CFG_TRACE_MASK, // flag is bitmap of platform_trace_item_t. default: 0 + PLATFORM_CFG_RC32K_EN, // Enable/Disable RC 32k clock. Default: Enable + PLATFORM_CFG_OSC32K_EN, // Enable/Disable 32k crystal oscillator. Default: Enable + PLATFORM_CFG_32K_CLK, // 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC + // Note: When modifying this configuration, both RC32K and OSC32K should be ENABLED and *run*. + // For OSC32K, wait until status of OSC32K is OK; + // For RC32K, wait 100us after enabled. + // Note: Wait another 100us before disabling the unused clock. + PLATFORM_CFG_32K_CLK_ACC, // Configure 32k clock accurary in ppm. + PLATFORM_CFG_32K_CALI_PERIOD, // 32K clock auto-calibartion period in seconds. Default: 3600 * 2 + PLATFORM_CFG_PS_DBG_0, // debugging parameter + PLATFORM_CFG_PS_DBG_1, // debugging parameter + PLATFORM_CFG_CTE_IQ_DBG, // debugging parameter } platform_cfg_item_t; +typedef enum +{ + PLATFORM_32K_OSC, // external 32k crystal oscillator + PLATFORM_32K_RC // internal RC 32k clock +} platform_32k_clk_src_t; + #define PLATFORM_CFG_ENABLE 1 #define PLATFORM_CFG_DISABLE 0 @@ -190,25 +281,35 @@ typedef enum * @brief platform configurations. * * @param[in] item Configuration item - * @param[in] flag PLATFORM_CFG_ENABLE for enable, PLATFORM_CFG_DISABLE for disable + * @param[in] flag see platform_cfg_item_t. + **************************************************************************************** + */ +void platform_config(const platform_cfg_item_t item, const uint32_t flag); + +typedef enum +{ + PLATFORM_INFO_OSC32K_STATUS, // Read status of 32k crystal oscillator. (0: not OK; Non-0: OK) + PLATFORM_INFO_32K_CALI_VALUE, // Read current 32k clock calibaration result. +} platform_info_item_t; + +/** + **************************************************************************************** + * @brief read platform information. + * + * @param[in] item Information item + * @return Information. **************************************************************************************** */ -void platform_config(const platform_cfg_item_t item, const uint8_t flag); +uint32_t platform_read_info(const platform_info_item_t item); /** **************************************************************************************** - * @brief Shutdown the whole system, and power on again after a duration - * specified by duration_ms. - * Optionally, a portion of SYS memory can be retentioned during shutdown. - * Note that: this function will NOT return except that shutdown procedure fails - * to initiate. + * @brief Do 32k clock calibration and get the calibration valie. * - * @param[in] duration_ms Duration before power on again (in ms) - * @param[in] p_retention_data Pointer to the start of data to be retentioned - * @param[in] data_size Size of the data to be retentioned + * @return Calibration value. **************************************************************************************** */ -void platform_shutdown(const uint32_t duration_ms, const void *p_retention_data, const uint32_t data_size); +uint32_t platform_calibrate_32k(void); /** **************************************************************************************** @@ -218,9 +319,27 @@ void platform_shutdown(const uint32_t duration_ms, const void *p_retention_data, * @param[in] len byte number of random data **************************************************************************************** */ -// void platform_hrng(uint8_t *bytes, const uint32_t len); -// WARNING: ^^^ this API is not available in this release +void platform_hrng(uint8_t *bytes, const uint32_t len); +/** + **************************************************************************************** + * @brief generate a pseudo random integer by internal PRNG whose seed initialized by HRNG + * at startup. + * + * @return a pseudo random integer in range of 0 to RAND_MAX + **************************************************************************************** + */ +int platform_rand(void); + +/** + **************************************************************************************** + * @brief Read the internal timer counting from initialization. + * Note: This timer restarts after shutdown, while RTC timer does not. + * + * @return internal timer counting at 1us. + **************************************************************************************** + */ +int64_t platform_get_us_time(void); /** **************************************************************************************** @@ -235,7 +354,6 @@ void platform_printf(const char *format, ...); // NOTE: for debug only void sysSetPublicDeviceAddr(const unsigned char *addr); -#ifdef OPTIONAL_RF_CLK // set rf source // 0: use external crystal // 1: use internal clock loopback @@ -244,7 +362,15 @@ void platform_set_rf_clk_source(const uint8_t source); void platform_set_rf_init_data(const uint32_t *rf_init_data); void platform_set_rf_power_mapping(const int16_t *rf_power_mapping); -#endif + +/** + **************************************************************************************** + * @brief Patch RF initialization data + * + * @param[in] data patch data + **************************************************************************************** + */ +void platform_patch_rf_init_data(const void *data); typedef enum coded_scheme_e { @@ -289,6 +415,18 @@ void ll_set_initiating_coded_scheme(const coded_scheme_t scheme); */ void ll_hint_on_ce_len(const uint16_t conn_handle, const uint16_t min_ce_len, const uint16_t max_ce_len); +/** + **************************************************************************************** + * @brief Set default antenna ID + * + * Note: This ID restored to default value (i.e. 0) when LLE is resetted. + * + * @param[in] ant_id ID of default antenna (default: 0) + * + **************************************************************************************** + */ +void ll_set_def_antenna(uint8_t ant_id); + #ifdef __cplusplus } #endif diff --git a/bundles/typical/inc/platform_api.nim b/bundles/typical/inc/platform_api.nim index ba6b0fe0d..eb17ecb56 100644 --- a/bundles/typical/inc/platform_api.nim +++ b/bundles/typical/inc/platform_api.nim @@ -46,9 +46,11 @@ type ## platform callback for putc (for logging) ## NOTE: param (void *data) is casted from assertion_info_t * ## if this callback is not defined, CPU enters a dead loop PLATFORM_CB_EVT_ASSERTION, ## when LLE is initializing - PLATFORM_CB_LLE_INIT, ## when allocation on heap fails (heap out of memory) - ## if this callback is not defined, CPU enters a dead loop - PLATFORM_CB_HEAP_OOM, PLATFORM_CB_EVT_MAX + PLATFORM_CB_EVT_LLE_INIT, ## when allocation on heap fails (heap out of memory) + ## if this callback is not defined, CPU enters a dead loop + PLATFORM_CB_EVT_HEAP_OOM, ## platform callback for output or save a trace item + ## NOTE: param (void *data) is casted from platform_trace_evt_t * + PLATFORM_CB_EVT_TRACE, PLATFORM_CB_EVT_MAX platform_irq_callback_type_t* {.size: sizeof(cint).} = enum PLATFORM_CB_IRQ_RTC, PLATFORM_CB_IRQ_TIMER0, PLATFORM_CB_IRQ_TIMER1, PLATFORM_CB_IRQ_TIMER2, PLATFORM_CB_IRQ_GPIO, PLATFORM_CB_IRQ_SPI0, @@ -59,6 +61,29 @@ type ## platform callback for putc (for logging) +## A trace item is a combination of data1 and data2. Note: +## 1. len1 or len2 might be 0, but not both +## 2. if callback function finds that it can't output data of size len1 + len2, then, both data1 +## & data2 should be discarded to avoid trace item corruption. + +type + platform_evt_trace_t* {.importc: "platform_evt_trace_t", + header: "platform_api.h", bycopy.} = object + data1* {.importc: "data1".}: pointer + data2* {.importc: "data2".}: pointer + len1* {.importc: "len1".}: uint16 + len2* {.importc: "len2".}: uint16 + + +## A trace item is has an ID + +type + platform_trace_item_t* {.size: sizeof(cint).} = enum + PLATFORM_TRACE_ID_EVENT = 0, PLATFORM_TRACE_ID_HCI_CMD = 1, + PLATFORM_TRACE_ID_HCI_EVENT = 2, PLATFORM_TRACE_ID_HCI_ACL = 3, + PLATFORM_TRACE_ID_LLCP = 4 + + ## * ## *************************************************************************************** ## @brief register callback function for platform events @@ -141,10 +166,38 @@ proc platform_reset*() {.importc: "platform_reset", header: "platform_api.h".} proc platform_switch_app*(app_addr: uint32) {.importc: "platform_switch_app", header: "platform_api.h".} +## * +## *************************************************************************************** +## @brief Write value to the persistent register, of which the value is kept even +## in power saving mode. +## +## @param[in] value a FOUR bit value +## *************************************************************************************** +## + +proc platform_write_persistent_reg*(value: uint8) {. + importc: "platform_write_persistent_reg", header: "platform_api.h".} +## * +## *************************************************************************************** +## @brief Read value from the persistent register, of which the value is kept even +## in power saving mode. +## +## @return value that has been written. (Initial value: 0) +## *************************************************************************************** +## + +proc platform_read_persistent_reg*(): uint8 {. + importc: "platform_read_persistent_reg", header: "platform_api.h".} type platform_cfg_item_t* {.size: sizeof(cint).} = enum - PLATFORM_CFG_LOG_HCI, ## default: disabled - PLATFORM_CFG_POWER_SAVING ## default: disabled + PLATFORM_CFG_LOG_HCI, ## flag is ENABLE or DISABLE. default: DISABLE + PLATFORM_CFG_POWER_SAVING, ## flag is ENABLE or DISABLE. default: DISABLE + PLATFORM_CFG_TRACE_MASK, ## flag is bitmap of platform_trace_item_t. default: 0 + PLATFORM_CFG_32K_CLK ## 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC + platform_32k_clk_src_t* {.size: sizeof(cint).} = enum + PLATFORM_32K_OSC, ## external 32k crystal oscillator + PLATFORM_32K_RC ## internal RC 32k clock + const @@ -156,29 +209,26 @@ const ## @brief platform configurations. ## ## @param[in] item Configuration item -## @param[in] flag PLATFORM_CFG_ENABLE for enable, PLATFORM_CFG_DISABLE for disable +## @param[in] flag see platform_cfg_item_t. ## *************************************************************************************** ## -proc platform_config*(item: platform_cfg_item_t; flag: uint8) {. +proc platform_config*(item: platform_cfg_item_t; flag: uint32) {. importc: "platform_config", header: "platform_api.h".} ## * ## *************************************************************************************** ## @brief Shutdown the whole system, and power on again after a duration -## specified by duration_ms. +## specified by duration_cycles. ## Optionally, a portion of SYS memory can be retentioned during shutdown. -## Note that: this function will NOT return except that shutdown procedure fails -## to initiate. ## -## @param[in] duration_ms Duration before power on again (in ms) +## @param[in] duration_cycles Duration before power on again (measured in cycles of 32k clock) +## Mininum value: 825 cycles (about 25.18ms) ## @param[in] p_retention_data Pointer to the start of data to be retentioned ## @param[in] data_size Size of the data to be retentioned ## *************************************************************************************** ## - -proc platform_shutdown*(duration_ms: uint32; p_retention_data: pointer; - data_size: uint32) {.importc: "platform_shutdown", - header: "platform_api.h".} +## void platform_shutdown(const uint32_t duration_cycles, const void *p_retention_data, const uint32_t data_size); +## WARNING: ^^^ this API is not available in this release ## * ## *************************************************************************************** ## @brief generate random bytes by using true hardware random-number generator @@ -187,8 +237,9 @@ proc platform_shutdown*(duration_ms: uint32; p_retention_data: pointer; ## @param[in] len byte number of random data ## *************************************************************************************** ## -## void platform_hrng(uint8_t *bytes, const uint32_t len); -## WARNING: ^^^ this API is not available in this release + +proc platform_hrng*(bytes: ptr uint8; len: uint32) {.importc: "platform_hrng", + header: "platform_api.h".} ## * ## *************************************************************************************** ## @brief the printf function @@ -204,16 +255,26 @@ proc platform_printf*(format: cstring) {.varargs, importc: "platform_printf", proc sysSetPublicDeviceAddr*(`addr`: ptr cuchar) {. importc: "sysSetPublicDeviceAddr", header: "platform_api.h".} -when defined(OPTIONAL_RF_CLK): - ## set rf source - ## 0: use external crystal - ## 1: use internal clock loopback - proc platform_set_rf_clk_source*(source: uint8) {. - importc: "platform_set_rf_clk_source", header: "platform_api.h".} - proc platform_set_rf_init_data*(rf_init_data: ptr uint32) {. - importc: "platform_set_rf_init_data", header: "platform_api.h".} - proc platform_set_rf_power_mapping*(rf_power_mapping: ptr int16) {. - importc: "platform_set_rf_power_mapping", header: "platform_api.h".} +## set rf source +## 0: use external crystal +## 1: use internal clock loopback + +proc platform_set_rf_clk_source*(source: uint8) {. + importc: "platform_set_rf_clk_source", header: "platform_api.h".} +proc platform_set_rf_init_data*(rf_init_data: ptr uint32) {. + importc: "platform_set_rf_init_data", header: "platform_api.h".} +proc platform_set_rf_power_mapping*(rf_power_mapping: ptr int16) {. + importc: "platform_set_rf_power_mapping", header: "platform_api.h".} +## * +## *************************************************************************************** +## @brief Patch RF initialization data +## +## @param[in] data patch data +## *************************************************************************************** +## + +proc platform_patch_rf_init_data*(data: pointer) {. + importc: "platform_patch_rf_init_data", header: "platform_api.h".} type coded_scheme_t* {.size: sizeof(cint).} = enum BLE_CODED_S8, BLE_CODED_S2 @@ -258,4 +319,17 @@ proc ll_set_initiating_coded_scheme*(scheme: coded_scheme_t) {. ## proc ll_hint_on_ce_len*(conn_handle: uint16; min_ce_len: uint16; max_ce_len: uint16) {. - importc: "ll_hint_on_ce_len", header: "platform_api.h".} \ No newline at end of file + importc: "ll_hint_on_ce_len", header: "platform_api.h".} +## * +## *************************************************************************************** +## @brief Set default antenna ID +## +## Note: This ID restored to default value (i.e. 0) when LLE is resetted. +## +## @param[in] ant_id ID of default antenna (default: 0) +## +## *************************************************************************************** +## + +proc ll_set_def_antenna*(ant_id: uint8) {.importc: "ll_set_def_antenna", + header: "platform_api.h".} \ No newline at end of file diff --git a/bundles/typical/platform.bin b/bundles/typical/platform.bin deleted file mode 100644 index e7b97ed10..000000000 Binary files a/bundles/typical/platform.bin and /dev/null differ diff --git a/bundles/typical/symdefs.g b/bundles/typical/symdefs.g deleted file mode 100644 index debd43e72..000000000 --- a/bundles/typical/symdefs.g +++ /dev/null @@ -1,233 +0,0 @@ -att_dispatch_client_can_send_now = 0x00005925; -att_dispatch_client_request_can_send_now_event = 0x0000592d; -att_dispatch_register_client = 0x00005945; -att_dispatch_register_server = 0x00005959; -att_dispatch_server_can_send_now = 0x0000596d; -att_dispatch_server_request_can_send_now_event = 0x00005975; -att_emit_general_event = 0x00005a45; -att_server_can_send_packet_now = 0x0000621d; -att_server_get_mtu = 0x00006221; -att_server_indicate = 0x00006295; -att_server_init = 0x00006319; -att_server_notify = 0x00006355; -att_server_register_packet_handler = 0x0000643d; -att_server_request_can_send_now_event = 0x00006449; -att_set_db = 0x00006465; -att_set_read_callback = 0x00006479; -att_set_write_callback = 0x00006485; -bd_addr_cmp = 0x000065c9; -bd_addr_copy = 0x000065cf; -bd_addr_to_str = 0x000065d9; -big_endian_read_16 = 0x00006611; -big_endian_read_32 = 0x00006619; -big_endian_store_16 = 0x0000662d; -big_endian_store_32 = 0x00006639; -ble_gatts_find_chr = 0x00006765; -ble_gatts_find_svc = 0x000067fd; -btstack_push_user_msg = 0x00006b0d; -char_for_nibble = 0x00006d75; -eTaskConfirmSleepModeStatus = 0x00006ffd; -gap_add_dev_to_periodic_list = 0x00007929; -gap_add_whitelist = 0x00007941; -gap_aes_encrypt = 0x00007955; -gap_clr_adv_set = 0x0000797d; -gap_clr_periodic_adv_list = 0x0000798d; -gap_create_connection_cancel = 0x000079e9; -gap_disconnect = 0x000079f9; -gap_ext_create_connection = 0x00007a8d; -gap_get_connection_parameter_range = 0x00007b51; -gap_periodic_adv_create_sync = 0x00007c8d; -gap_periodic_adv_create_sync_cancel = 0x00007cb1; -gap_periodic_adv_term_sync = 0x00007cc1; -gap_read_periodic_adv_list_size = 0x00007d45; -gap_read_phy = 0x00007d55; -gap_remove_whitelist = 0x00007d69; -gap_rmv_adv_set = 0x00007df5; -gap_rmv_dev_from_periodic_list = 0x00007e09; -gap_set_adv_set_random_addr = 0x00007e49; -gap_set_connection_parameter_range = 0x00007e95; -gap_set_def_phy = 0x00007ead; -gap_set_ext_adv_data = 0x00007ec5; -gap_set_ext_adv_enable = 0x00007edd; -gap_set_ext_adv_para = 0x00007f59; -gap_set_ext_scan_enable = 0x00008039; -gap_set_ext_scan_para = 0x00008051; -gap_set_ext_scan_response_data = 0x000080f9; -gap_set_host_channel_classification = 0x00008111; -gap_set_periodic_adv_data = 0x00008125; -gap_set_periodic_adv_enable = 0x00008199; -gap_set_periodic_adv_para = 0x000081ad; -gap_set_phy = 0x000081c5; -gap_set_random_device_address = 0x000081e1; -gap_start_ccm = 0x00008245; -gap_update_connection_parameters = 0x0000828d; -gatt_client_cancel_write = 0x00008745; -gatt_client_deserialize_characteristic = 0x0000876b; -gatt_client_deserialize_characteristic_descriptor = 0x000087a3; -gatt_client_deserialize_service = 0x000087b1; -gatt_client_discover_characteristic_descriptors = 0x000087dd; -gatt_client_discover_characteristics_for_handle_range_by_uuid128 = 0x0000881f; -gatt_client_discover_characteristics_for_handle_range_by_uuid16 = 0x0000886f; -gatt_client_discover_characteristics_for_service = 0x000088bf; -gatt_client_discover_characteristics_for_service_by_uuid128 = 0x000088f7; -gatt_client_discover_characteristics_for_service_by_uuid16 = 0x00008905; -gatt_client_discover_primary_services = 0x00008913; -gatt_client_discover_primary_services_by_uuid128 = 0x00008945; -gatt_client_discover_primary_services_by_uuid16 = 0x00008989; -gatt_client_execute_write = 0x000089c5; -gatt_client_find_included_services_for_service = 0x000089eb; -gatt_client_get_mtu = 0x00008a1b; -gatt_client_is_ready = 0x00008ac5; -gatt_client_listen_for_characteristic_value_updates = 0x00008adb; -gatt_client_prepare_write = 0x00008b01; -gatt_client_pts_suppress_mtu_exchange = 0x00008b3d; -gatt_client_read_characteristic_descriptor = 0x00008b49; -gatt_client_read_characteristic_descriptor_using_descriptor_handle = 0x00008b4f; -gatt_client_read_long_characteristic_descriptor = 0x00008b79; -gatt_client_read_long_characteristic_descriptor_using_descriptor_handle = 0x00008b81; -gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset = 0x00008b87; -gatt_client_read_long_value_of_characteristic = 0x00008bb5; -gatt_client_read_long_value_of_characteristic_using_value_handle = 0x00008bbd; -gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset = 0x00008bc3; -gatt_client_read_multiple_characteristic_values = 0x00008bf1; -gatt_client_read_value_of_characteristic = 0x00008c21; -gatt_client_read_value_of_characteristic_using_value_handle = 0x00008c27; -gatt_client_read_value_of_characteristics_by_uuid128 = 0x00008c55; -gatt_client_read_value_of_characteristics_by_uuid16 = 0x00008ca1; -gatt_client_register_handler = 0x00008ced; -gatt_client_reliable_write_long_value_of_characteristic = 0x00008cf9; -gatt_client_signed_write_without_response = 0x00009125; -gatt_client_write_characteristic_descriptor = 0x000091e9; -gatt_client_write_characteristic_descriptor_using_descriptor_handle = 0x000091f7; -gatt_client_write_client_characteristic_configuration = 0x00009231; -gatt_client_write_long_characteristic_descriptor = 0x00009283; -gatt_client_write_long_characteristic_descriptor_using_descriptor_handle = 0x00009295; -gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset = 0x000092a5; -gatt_client_write_long_value_of_characteristic = 0x000092e1; -gatt_client_write_long_value_of_characteristic_with_offset = 0x000092f1; -gatt_client_write_value_of_characteristic = 0x0000932d; -gatt_client_write_value_of_characteristic_without_response = 0x00009363; -hci_add_event_handler = 0x0000b61d; -hci_power_control = 0x0000bdf5; -hci_register_acl_packet_handler = 0x0000bff5; -kv_get = 0x0000c679; -kv_init = 0x0000c691; -kv_put = 0x0000c6e1; -kv_remove = 0x0000c759; -kv_value_modified = 0x0000c7c9; -kv_visit = 0x0000c7cd; -l2cap_can_send_fixed_channel_packet_now = 0x0000c88d; -l2cap_can_send_packet_now = 0x0000c891; -l2cap_create_channel = 0x0000ca41; -l2cap_disconnect = 0x0000cb79; -l2cap_get_remote_mtu_for_local_cid = 0x0000ce1d; -l2cap_init = 0x0000d28d; -l2cap_le_send_flow_control_credit = 0x0000d2d5; -l2cap_max_le_mtu = 0x0000d535; -l2cap_max_mtu = 0x0000d539; -l2cap_next_local_cid = 0x0000d53d; -l2cap_next_sig_id = 0x0000d54d; -l2cap_register_fixed_channel = 0x0000d5e5; -l2cap_register_packet_handler = 0x0000d601; -l2cap_register_service = 0x0000d60d; -l2cap_request_can_send_fix_channel_now_event = 0x0000d6f5; -l2cap_request_can_send_now_event = 0x0000d719; -l2cap_request_connection_parameter_update = 0x0000d733; -l2cap_require_security_level_2_for_outgoing_sdp = 0x0000d765; -l2cap_send = 0x0000db29; -l2cap_send_connectionless = 0x0000dba1; -l2cap_send_connectionless3 = 0x0000dc31; -l2cap_send_echo_request = 0x0000dcc9; -l2cap_send_signaling_le = 0x0000dd2d; -l2cap_unregister_service = 0x0000dd85; -ll_hint_on_ce_len = 0x0000df69; -ll_set_adv_coded_scheme = 0x0000e231; -ll_set_initiating_coded_scheme = 0x0000e255; -nibble_for_char = 0x0001c9e5; -platform_config = 0x0001ca89; -platform_get_heap_status = 0x0001cab1; -platform_get_version = 0x0001cac9; -platform_printf = 0x0001cad1; -platform_raise_assertion = 0x0001cae5; -platform_reset = 0x0001caf9; -platform_set_evt_callback = 0x0001cb2d; -platform_set_irq_callback = 0x0001cb41; -platform_set_rf_clk_source = 0x0001cb79; -platform_set_rf_init_data = 0x0001cb85; -platform_set_rf_power_mapping = 0x0001cb91; -platform_shutdown = 0x0001cb9d; -platform_switch_app = 0x0001cba1; -printf_hexdump = 0x0001d881; -pvPortMalloc = 0x0001e369; -pvTaskIncrementMutexHeldCount = 0x0001e451; -pvTimerGetTimerID = 0x0001e469; -pxPortInitialiseStack = 0x0001e495; -reverse_128 = 0x0001e63d; -reverse_24 = 0x0001e643; -reverse_48 = 0x0001e649; -reverse_56 = 0x0001e64f; -reverse_64 = 0x0001e655; -reverse_bd_addr = 0x0001e65b; -reverse_bytes = 0x0001e661; -sm_add_event_handler = 0x0001e7c1; -sm_address_resolution_lookup = 0x0001e8f5; -sm_authenticated = 0x0001e9cf; -sm_authorization_decline = 0x0001e9e5; -sm_authorization_grant = 0x0001ea05; -sm_authorization_state = 0x0001ea25; -sm_bonding_decline = 0x0001ea41; -sm_config = 0x0001ee19; -sm_encryption_key_size = 0x0001ef25; -sm_just_works_confirm = 0x0001f6a1; -sm_le_device_key = 0x0001f8f1; -sm_passkey_input = 0x0001f989; -sm_private_random_address_generation_get = 0x0001fd15; -sm_private_random_address_generation_get_mode = 0x0001fd1d; -sm_private_random_address_generation_set_mode = 0x0001fd29; -sm_private_random_address_generation_set_update_period = 0x0001fd51; -sm_register_oob_data_callback = 0x0001fd89; -sm_request_pairing = 0x0001fd95; -sm_send_security_request = 0x000207c7; -sm_set_accepted_stk_generation_methods = 0x000207ed; -sm_set_authentication_requirements = 0x000207f9; -sm_set_encryption_key_size_range = 0x00020805; -sscanf_bd_addr = 0x00020af9; -sysSetPublicDeviceAddr = 0x00020e49; -uuid128_to_str = 0x000211fd; -uuid_add_bluetooth_prefix = 0x00021255; -uuid_has_bluetooth_prefix = 0x00021275; -vPortFree = 0x000213bd; -vQueueWaitForMessageRestricted = 0x0002158d; -vTaskDelay = 0x000215d5; -vTaskInternalSetTimeOutState = 0x00021621; -vTaskMissedYield = 0x00021631; -vTaskPlaceOnEventList = 0x0002163d; -vTaskPlaceOnEventListRestricted = 0x00021675; -vTaskPriorityDisinheritAfterTimeout = 0x000216b5; -vTaskStartScheduler = 0x00021761; -vTaskStepTick = 0x000217f1; -vTaskSuspendAll = 0x00021821; -vTaskSwitchContext = 0x00021831; -xPortStartScheduler = 0x000218c9; -xQueueGenericCreate = 0x00021985; -xQueueGenericCreateStatic = 0x000219d1; -xQueueGenericReset = 0x00021a39; -xQueueGenericSend = 0x00021ac5; -xQueueGenericSendFromISR = 0x00021c31; -xQueueGiveFromISR = 0x00021cf1; -xQueueReceive = 0x00021d95; -xQueueSemaphoreTake = 0x00021ec1; -xTaskCheckForTimeOut = 0x0002202d; -xTaskCreate = 0x0002209d; -xTaskCreateStatic = 0x000220f9; -xTaskGetSchedulerState = 0x00022169; -xTaskGetTickCount = 0x00022185; -xTaskIncrementTick = 0x00022191; -xTaskPriorityDisinherit = 0x0002225d; -xTaskPriorityInherit = 0x000222f1; -xTaskRemoveFromEventList = 0x00022385; -xTaskResumeAll = 0x00022405; -xTimerCreate = 0x000224cd; -xTimerCreateStatic = 0x00022501; -xTimerCreateTimerTask = 0x00022539; -xTimerGenericCommand = 0x000225a5; diff --git a/bundles/typical/symdefs.i b/bundles/typical/symdefs.i deleted file mode 100644 index 6d4e18ea9..000000000 --- a/bundles/typical/symdefs.i +++ /dev/null @@ -1,233 +0,0 @@ ---define_symbol att_dispatch_client_can_send_now=0x00005925 ---define_symbol att_dispatch_client_request_can_send_now_event=0x0000592d ---define_symbol att_dispatch_register_client=0x00005945 ---define_symbol att_dispatch_register_server=0x00005959 ---define_symbol att_dispatch_server_can_send_now=0x0000596d ---define_symbol att_dispatch_server_request_can_send_now_event=0x00005975 ---define_symbol att_emit_general_event=0x00005a45 ---define_symbol att_server_can_send_packet_now=0x0000621d ---define_symbol att_server_get_mtu=0x00006221 ---define_symbol att_server_indicate=0x00006295 ---define_symbol att_server_init=0x00006319 ---define_symbol att_server_notify=0x00006355 ---define_symbol att_server_register_packet_handler=0x0000643d ---define_symbol att_server_request_can_send_now_event=0x00006449 ---define_symbol att_set_db=0x00006465 ---define_symbol att_set_read_callback=0x00006479 ---define_symbol att_set_write_callback=0x00006485 ---define_symbol bd_addr_cmp=0x000065c9 ---define_symbol bd_addr_copy=0x000065cf ---define_symbol bd_addr_to_str=0x000065d9 ---define_symbol big_endian_read_16=0x00006611 ---define_symbol big_endian_read_32=0x00006619 ---define_symbol big_endian_store_16=0x0000662d ---define_symbol big_endian_store_32=0x00006639 ---define_symbol ble_gatts_find_chr=0x00006765 ---define_symbol ble_gatts_find_svc=0x000067fd ---define_symbol btstack_push_user_msg=0x00006b0d ---define_symbol char_for_nibble=0x00006d75 ---define_symbol eTaskConfirmSleepModeStatus=0x00006ffd ---define_symbol gap_add_dev_to_periodic_list=0x00007929 ---define_symbol gap_add_whitelist=0x00007941 ---define_symbol gap_aes_encrypt=0x00007955 ---define_symbol gap_clr_adv_set=0x0000797d ---define_symbol gap_clr_periodic_adv_list=0x0000798d ---define_symbol gap_create_connection_cancel=0x000079e9 ---define_symbol gap_disconnect=0x000079f9 ---define_symbol gap_ext_create_connection=0x00007a8d ---define_symbol gap_get_connection_parameter_range=0x00007b51 ---define_symbol gap_periodic_adv_create_sync=0x00007c8d ---define_symbol gap_periodic_adv_create_sync_cancel=0x00007cb1 ---define_symbol gap_periodic_adv_term_sync=0x00007cc1 ---define_symbol gap_read_periodic_adv_list_size=0x00007d45 ---define_symbol gap_read_phy=0x00007d55 ---define_symbol gap_remove_whitelist=0x00007d69 ---define_symbol gap_rmv_adv_set=0x00007df5 ---define_symbol gap_rmv_dev_from_periodic_list=0x00007e09 ---define_symbol gap_set_adv_set_random_addr=0x00007e49 ---define_symbol gap_set_connection_parameter_range=0x00007e95 ---define_symbol gap_set_def_phy=0x00007ead ---define_symbol gap_set_ext_adv_data=0x00007ec5 ---define_symbol gap_set_ext_adv_enable=0x00007edd ---define_symbol gap_set_ext_adv_para=0x00007f59 ---define_symbol gap_set_ext_scan_enable=0x00008039 ---define_symbol gap_set_ext_scan_para=0x00008051 ---define_symbol gap_set_ext_scan_response_data=0x000080f9 ---define_symbol gap_set_host_channel_classification=0x00008111 ---define_symbol gap_set_periodic_adv_data=0x00008125 ---define_symbol gap_set_periodic_adv_enable=0x00008199 ---define_symbol gap_set_periodic_adv_para=0x000081ad ---define_symbol gap_set_phy=0x000081c5 ---define_symbol gap_set_random_device_address=0x000081e1 ---define_symbol gap_start_ccm=0x00008245 ---define_symbol gap_update_connection_parameters=0x0000828d ---define_symbol gatt_client_cancel_write=0x00008745 ---define_symbol gatt_client_deserialize_characteristic=0x0000876b ---define_symbol gatt_client_deserialize_characteristic_descriptor=0x000087a3 ---define_symbol gatt_client_deserialize_service=0x000087b1 ---define_symbol gatt_client_discover_characteristic_descriptors=0x000087dd ---define_symbol gatt_client_discover_characteristics_for_handle_range_by_uuid128=0x0000881f ---define_symbol gatt_client_discover_characteristics_for_handle_range_by_uuid16=0x0000886f ---define_symbol gatt_client_discover_characteristics_for_service=0x000088bf ---define_symbol gatt_client_discover_characteristics_for_service_by_uuid128=0x000088f7 ---define_symbol gatt_client_discover_characteristics_for_service_by_uuid16=0x00008905 ---define_symbol gatt_client_discover_primary_services=0x00008913 ---define_symbol gatt_client_discover_primary_services_by_uuid128=0x00008945 ---define_symbol gatt_client_discover_primary_services_by_uuid16=0x00008989 ---define_symbol gatt_client_execute_write=0x000089c5 ---define_symbol gatt_client_find_included_services_for_service=0x000089eb ---define_symbol gatt_client_get_mtu=0x00008a1b ---define_symbol gatt_client_is_ready=0x00008ac5 ---define_symbol gatt_client_listen_for_characteristic_value_updates=0x00008adb ---define_symbol gatt_client_prepare_write=0x00008b01 ---define_symbol gatt_client_pts_suppress_mtu_exchange=0x00008b3d ---define_symbol gatt_client_read_characteristic_descriptor=0x00008b49 ---define_symbol gatt_client_read_characteristic_descriptor_using_descriptor_handle=0x00008b4f ---define_symbol gatt_client_read_long_characteristic_descriptor=0x00008b79 ---define_symbol gatt_client_read_long_characteristic_descriptor_using_descriptor_handle=0x00008b81 ---define_symbol gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x00008b87 ---define_symbol gatt_client_read_long_value_of_characteristic=0x00008bb5 ---define_symbol gatt_client_read_long_value_of_characteristic_using_value_handle=0x00008bbd ---define_symbol gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset=0x00008bc3 ---define_symbol gatt_client_read_multiple_characteristic_values=0x00008bf1 ---define_symbol gatt_client_read_value_of_characteristic=0x00008c21 ---define_symbol gatt_client_read_value_of_characteristic_using_value_handle=0x00008c27 ---define_symbol gatt_client_read_value_of_characteristics_by_uuid128=0x00008c55 ---define_symbol gatt_client_read_value_of_characteristics_by_uuid16=0x00008ca1 ---define_symbol gatt_client_register_handler=0x00008ced ---define_symbol gatt_client_reliable_write_long_value_of_characteristic=0x00008cf9 ---define_symbol gatt_client_signed_write_without_response=0x00009125 ---define_symbol gatt_client_write_characteristic_descriptor=0x000091e9 ---define_symbol gatt_client_write_characteristic_descriptor_using_descriptor_handle=0x000091f7 ---define_symbol gatt_client_write_client_characteristic_configuration=0x00009231 ---define_symbol gatt_client_write_long_characteristic_descriptor=0x00009283 ---define_symbol gatt_client_write_long_characteristic_descriptor_using_descriptor_handle=0x00009295 ---define_symbol gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x000092a5 ---define_symbol gatt_client_write_long_value_of_characteristic=0x000092e1 ---define_symbol gatt_client_write_long_value_of_characteristic_with_offset=0x000092f1 ---define_symbol gatt_client_write_value_of_characteristic=0x0000932d ---define_symbol gatt_client_write_value_of_characteristic_without_response=0x00009363 ---define_symbol hci_add_event_handler=0x0000b61d ---define_symbol hci_power_control=0x0000bdf5 ---define_symbol hci_register_acl_packet_handler=0x0000bff5 ---define_symbol kv_get=0x0000c679 ---define_symbol kv_init=0x0000c691 ---define_symbol kv_put=0x0000c6e1 ---define_symbol kv_remove=0x0000c759 ---define_symbol kv_value_modified=0x0000c7c9 ---define_symbol kv_visit=0x0000c7cd ---define_symbol l2cap_can_send_fixed_channel_packet_now=0x0000c88d ---define_symbol l2cap_can_send_packet_now=0x0000c891 ---define_symbol l2cap_create_channel=0x0000ca41 ---define_symbol l2cap_disconnect=0x0000cb79 ---define_symbol l2cap_get_remote_mtu_for_local_cid=0x0000ce1d ---define_symbol l2cap_init=0x0000d28d ---define_symbol l2cap_le_send_flow_control_credit=0x0000d2d5 ---define_symbol l2cap_max_le_mtu=0x0000d535 ---define_symbol l2cap_max_mtu=0x0000d539 ---define_symbol l2cap_next_local_cid=0x0000d53d ---define_symbol l2cap_next_sig_id=0x0000d54d ---define_symbol l2cap_register_fixed_channel=0x0000d5e5 ---define_symbol l2cap_register_packet_handler=0x0000d601 ---define_symbol l2cap_register_service=0x0000d60d ---define_symbol l2cap_request_can_send_fix_channel_now_event=0x0000d6f5 ---define_symbol l2cap_request_can_send_now_event=0x0000d719 ---define_symbol l2cap_request_connection_parameter_update=0x0000d733 ---define_symbol l2cap_require_security_level_2_for_outgoing_sdp=0x0000d765 ---define_symbol l2cap_send=0x0000db29 ---define_symbol l2cap_send_connectionless=0x0000dba1 ---define_symbol l2cap_send_connectionless3=0x0000dc31 ---define_symbol l2cap_send_echo_request=0x0000dcc9 ---define_symbol l2cap_send_signaling_le=0x0000dd2d ---define_symbol l2cap_unregister_service=0x0000dd85 ---define_symbol ll_hint_on_ce_len=0x0000df69 ---define_symbol ll_set_adv_coded_scheme=0x0000e231 ---define_symbol ll_set_initiating_coded_scheme=0x0000e255 ---define_symbol nibble_for_char=0x0001c9e5 ---define_symbol platform_config=0x0001ca89 ---define_symbol platform_get_heap_status=0x0001cab1 ---define_symbol platform_get_version=0x0001cac9 ---define_symbol platform_printf=0x0001cad1 ---define_symbol platform_raise_assertion=0x0001cae5 ---define_symbol platform_reset=0x0001caf9 ---define_symbol platform_set_evt_callback=0x0001cb2d ---define_symbol platform_set_irq_callback=0x0001cb41 ---define_symbol platform_set_rf_clk_source=0x0001cb79 ---define_symbol platform_set_rf_init_data=0x0001cb85 ---define_symbol platform_set_rf_power_mapping=0x0001cb91 ---define_symbol platform_shutdown=0x0001cb9d ---define_symbol platform_switch_app=0x0001cba1 ---define_symbol printf_hexdump=0x0001d881 ---define_symbol pvPortMalloc=0x0001e369 ---define_symbol pvTaskIncrementMutexHeldCount=0x0001e451 ---define_symbol pvTimerGetTimerID=0x0001e469 ---define_symbol pxPortInitialiseStack=0x0001e495 ---define_symbol reverse_128=0x0001e63d ---define_symbol reverse_24=0x0001e643 ---define_symbol reverse_48=0x0001e649 ---define_symbol reverse_56=0x0001e64f ---define_symbol reverse_64=0x0001e655 ---define_symbol reverse_bd_addr=0x0001e65b ---define_symbol reverse_bytes=0x0001e661 ---define_symbol sm_add_event_handler=0x0001e7c1 ---define_symbol sm_address_resolution_lookup=0x0001e8f5 ---define_symbol sm_authenticated=0x0001e9cf ---define_symbol sm_authorization_decline=0x0001e9e5 ---define_symbol sm_authorization_grant=0x0001ea05 ---define_symbol sm_authorization_state=0x0001ea25 ---define_symbol sm_bonding_decline=0x0001ea41 ---define_symbol sm_config=0x0001ee19 ---define_symbol sm_encryption_key_size=0x0001ef25 ---define_symbol sm_just_works_confirm=0x0001f6a1 ---define_symbol sm_le_device_key=0x0001f8f1 ---define_symbol sm_passkey_input=0x0001f989 ---define_symbol sm_private_random_address_generation_get=0x0001fd15 ---define_symbol sm_private_random_address_generation_get_mode=0x0001fd1d ---define_symbol sm_private_random_address_generation_set_mode=0x0001fd29 ---define_symbol sm_private_random_address_generation_set_update_period=0x0001fd51 ---define_symbol sm_register_oob_data_callback=0x0001fd89 ---define_symbol sm_request_pairing=0x0001fd95 ---define_symbol sm_send_security_request=0x000207c7 ---define_symbol sm_set_accepted_stk_generation_methods=0x000207ed ---define_symbol sm_set_authentication_requirements=0x000207f9 ---define_symbol sm_set_encryption_key_size_range=0x00020805 ---define_symbol sscanf_bd_addr=0x00020af9 ---define_symbol sysSetPublicDeviceAddr=0x00020e49 ---define_symbol uuid128_to_str=0x000211fd ---define_symbol uuid_add_bluetooth_prefix=0x00021255 ---define_symbol uuid_has_bluetooth_prefix=0x00021275 ---define_symbol vPortFree=0x000213bd ---define_symbol vQueueWaitForMessageRestricted=0x0002158d ---define_symbol vTaskDelay=0x000215d5 ---define_symbol vTaskInternalSetTimeOutState=0x00021621 ---define_symbol vTaskMissedYield=0x00021631 ---define_symbol vTaskPlaceOnEventList=0x0002163d ---define_symbol vTaskPlaceOnEventListRestricted=0x00021675 ---define_symbol vTaskPriorityDisinheritAfterTimeout=0x000216b5 ---define_symbol vTaskStartScheduler=0x00021761 ---define_symbol vTaskStepTick=0x000217f1 ---define_symbol vTaskSuspendAll=0x00021821 ---define_symbol vTaskSwitchContext=0x00021831 ---define_symbol xPortStartScheduler=0x000218c9 ---define_symbol xQueueGenericCreate=0x00021985 ---define_symbol xQueueGenericCreateStatic=0x000219d1 ---define_symbol xQueueGenericReset=0x00021a39 ---define_symbol xQueueGenericSend=0x00021ac5 ---define_symbol xQueueGenericSendFromISR=0x00021c31 ---define_symbol xQueueGiveFromISR=0x00021cf1 ---define_symbol xQueueReceive=0x00021d95 ---define_symbol xQueueSemaphoreTake=0x00021ec1 ---define_symbol xTaskCheckForTimeOut=0x0002202d ---define_symbol xTaskCreate=0x0002209d ---define_symbol xTaskCreateStatic=0x000220f9 ---define_symbol xTaskGetSchedulerState=0x00022169 ---define_symbol xTaskGetTickCount=0x00022185 ---define_symbol xTaskIncrementTick=0x00022191 ---define_symbol xTaskPriorityDisinherit=0x0002225d ---define_symbol xTaskPriorityInherit=0x000222f1 ---define_symbol xTaskRemoveFromEventList=0x00022385 ---define_symbol xTaskResumeAll=0x00022405 ---define_symbol xTimerCreate=0x000224cd ---define_symbol xTimerCreateStatic=0x00022501 ---define_symbol xTimerCreateTimerTask=0x00022539 ---define_symbol xTimerGenericCommand=0x000225a5 diff --git a/bundles/typical/symdefs.m b/bundles/typical/symdefs.m deleted file mode 100644 index 19143ad42..000000000 --- a/bundles/typical/symdefs.m +++ /dev/null @@ -1,234 +0,0 @@ -## ARM Linker, 5.03 [Build 76]: Last Updated: Thu Oct 17 00:00:00 2019 -0x00005925 T att_dispatch_client_can_send_now -0x0000592d T att_dispatch_client_request_can_send_now_event -0x00005945 T att_dispatch_register_client -0x00005959 T att_dispatch_register_server -0x0000596d T att_dispatch_server_can_send_now -0x00005975 T att_dispatch_server_request_can_send_now_event -0x00005a45 T att_emit_general_event -0x0000621d T att_server_can_send_packet_now -0x00006221 T att_server_get_mtu -0x00006295 T att_server_indicate -0x00006319 T att_server_init -0x00006355 T att_server_notify -0x0000643d T att_server_register_packet_handler -0x00006449 T att_server_request_can_send_now_event -0x00006465 T att_set_db -0x00006479 T att_set_read_callback -0x00006485 T att_set_write_callback -0x000065c9 T bd_addr_cmp -0x000065cf T bd_addr_copy -0x000065d9 T bd_addr_to_str -0x00006611 T big_endian_read_16 -0x00006619 T big_endian_read_32 -0x0000662d T big_endian_store_16 -0x00006639 T big_endian_store_32 -0x00006765 T ble_gatts_find_chr -0x000067fd T ble_gatts_find_svc -0x00006b0d T btstack_push_user_msg -0x00006d75 T char_for_nibble -0x00006ffd T eTaskConfirmSleepModeStatus -0x00007929 T gap_add_dev_to_periodic_list -0x00007941 T gap_add_whitelist -0x00007955 T gap_aes_encrypt -0x0000797d T gap_clr_adv_set -0x0000798d T gap_clr_periodic_adv_list -0x000079e9 T gap_create_connection_cancel -0x000079f9 T gap_disconnect -0x00007a8d T gap_ext_create_connection -0x00007b51 T gap_get_connection_parameter_range -0x00007c8d T gap_periodic_adv_create_sync -0x00007cb1 T gap_periodic_adv_create_sync_cancel -0x00007cc1 T gap_periodic_adv_term_sync -0x00007d45 T gap_read_periodic_adv_list_size -0x00007d55 T gap_read_phy -0x00007d69 T gap_remove_whitelist -0x00007df5 T gap_rmv_adv_set -0x00007e09 T gap_rmv_dev_from_periodic_list -0x00007e49 T gap_set_adv_set_random_addr -0x00007e95 T gap_set_connection_parameter_range -0x00007ead T gap_set_def_phy -0x00007ec5 T gap_set_ext_adv_data -0x00007edd T gap_set_ext_adv_enable -0x00007f59 T gap_set_ext_adv_para -0x00008039 T gap_set_ext_scan_enable -0x00008051 T gap_set_ext_scan_para -0x000080f9 T gap_set_ext_scan_response_data -0x00008111 T gap_set_host_channel_classification -0x00008125 T gap_set_periodic_adv_data -0x00008199 T gap_set_periodic_adv_enable -0x000081ad T gap_set_periodic_adv_para -0x000081c5 T gap_set_phy -0x000081e1 T gap_set_random_device_address -0x00008245 T gap_start_ccm -0x0000828d T gap_update_connection_parameters -0x00008745 T gatt_client_cancel_write -0x0000876b T gatt_client_deserialize_characteristic -0x000087a3 T gatt_client_deserialize_characteristic_descriptor -0x000087b1 T gatt_client_deserialize_service -0x000087dd T gatt_client_discover_characteristic_descriptors -0x0000881f T gatt_client_discover_characteristics_for_handle_range_by_uuid128 -0x0000886f T gatt_client_discover_characteristics_for_handle_range_by_uuid16 -0x000088bf T gatt_client_discover_characteristics_for_service -0x000088f7 T gatt_client_discover_characteristics_for_service_by_uuid128 -0x00008905 T gatt_client_discover_characteristics_for_service_by_uuid16 -0x00008913 T gatt_client_discover_primary_services -0x00008945 T gatt_client_discover_primary_services_by_uuid128 -0x00008989 T gatt_client_discover_primary_services_by_uuid16 -0x000089c5 T gatt_client_execute_write -0x000089eb T gatt_client_find_included_services_for_service -0x00008a1b T gatt_client_get_mtu -0x00008ac5 T gatt_client_is_ready -0x00008adb T gatt_client_listen_for_characteristic_value_updates -0x00008b01 T gatt_client_prepare_write -0x00008b3d T gatt_client_pts_suppress_mtu_exchange -0x00008b49 T gatt_client_read_characteristic_descriptor -0x00008b4f T gatt_client_read_characteristic_descriptor_using_descriptor_handle -0x00008b79 T gatt_client_read_long_characteristic_descriptor -0x00008b81 T gatt_client_read_long_characteristic_descriptor_using_descriptor_handle -0x00008b87 T gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset -0x00008bb5 T gatt_client_read_long_value_of_characteristic -0x00008bbd T gatt_client_read_long_value_of_characteristic_using_value_handle -0x00008bc3 T gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset -0x00008bf1 T gatt_client_read_multiple_characteristic_values -0x00008c21 T gatt_client_read_value_of_characteristic -0x00008c27 T gatt_client_read_value_of_characteristic_using_value_handle -0x00008c55 T gatt_client_read_value_of_characteristics_by_uuid128 -0x00008ca1 T gatt_client_read_value_of_characteristics_by_uuid16 -0x00008ced T gatt_client_register_handler -0x00008cf9 T gatt_client_reliable_write_long_value_of_characteristic -0x00009125 T gatt_client_signed_write_without_response -0x000091e9 T gatt_client_write_characteristic_descriptor -0x000091f7 T gatt_client_write_characteristic_descriptor_using_descriptor_handle -0x00009231 T gatt_client_write_client_characteristic_configuration -0x00009283 T gatt_client_write_long_characteristic_descriptor -0x00009295 T gatt_client_write_long_characteristic_descriptor_using_descriptor_handle -0x000092a5 T gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset -0x000092e1 T gatt_client_write_long_value_of_characteristic -0x000092f1 T gatt_client_write_long_value_of_characteristic_with_offset -0x0000932d T gatt_client_write_value_of_characteristic -0x00009363 T gatt_client_write_value_of_characteristic_without_response -0x0000b61d T hci_add_event_handler -0x0000bdf5 T hci_power_control -0x0000bff5 T hci_register_acl_packet_handler -0x0000c679 T kv_get -0x0000c691 T kv_init -0x0000c6e1 T kv_put -0x0000c759 T kv_remove -0x0000c7c9 T kv_value_modified -0x0000c7cd T kv_visit -0x0000c88d T l2cap_can_send_fixed_channel_packet_now -0x0000c891 T l2cap_can_send_packet_now -0x0000ca41 T l2cap_create_channel -0x0000cb79 T l2cap_disconnect -0x0000ce1d T l2cap_get_remote_mtu_for_local_cid -0x0000d28d T l2cap_init -0x0000d2d5 T l2cap_le_send_flow_control_credit -0x0000d535 T l2cap_max_le_mtu -0x0000d539 T l2cap_max_mtu -0x0000d53d T l2cap_next_local_cid -0x0000d54d T l2cap_next_sig_id -0x0000d5e5 T l2cap_register_fixed_channel -0x0000d601 T l2cap_register_packet_handler -0x0000d60d T l2cap_register_service -0x0000d6f5 T l2cap_request_can_send_fix_channel_now_event -0x0000d719 T l2cap_request_can_send_now_event -0x0000d733 T l2cap_request_connection_parameter_update -0x0000d765 T l2cap_require_security_level_2_for_outgoing_sdp -0x0000db29 T l2cap_send -0x0000dba1 T l2cap_send_connectionless -0x0000dc31 T l2cap_send_connectionless3 -0x0000dcc9 T l2cap_send_echo_request -0x0000dd2d T l2cap_send_signaling_le -0x0000dd85 T l2cap_unregister_service -0x0000df69 T ll_hint_on_ce_len -0x0000e231 T ll_set_adv_coded_scheme -0x0000e255 T ll_set_initiating_coded_scheme -0x0001c9e5 T nibble_for_char -0x0001ca89 T platform_config -0x0001cab1 T platform_get_heap_status -0x0001cac9 T platform_get_version -0x0001cad1 T platform_printf -0x0001cae5 T platform_raise_assertion -0x0001caf9 T platform_reset -0x0001cb2d T platform_set_evt_callback -0x0001cb41 T platform_set_irq_callback -0x0001cb79 T platform_set_rf_clk_source -0x0001cb85 T platform_set_rf_init_data -0x0001cb91 T platform_set_rf_power_mapping -0x0001cb9d T platform_shutdown -0x0001cba1 T platform_switch_app -0x0001d881 T printf_hexdump -0x0001e369 T pvPortMalloc -0x0001e451 T pvTaskIncrementMutexHeldCount -0x0001e469 T pvTimerGetTimerID -0x0001e495 T pxPortInitialiseStack -0x0001e63d T reverse_128 -0x0001e643 T reverse_24 -0x0001e649 T reverse_48 -0x0001e64f T reverse_56 -0x0001e655 T reverse_64 -0x0001e65b T reverse_bd_addr -0x0001e661 T reverse_bytes -0x0001e7c1 T sm_add_event_handler -0x0001e8f5 T sm_address_resolution_lookup -0x0001e9cf T sm_authenticated -0x0001e9e5 T sm_authorization_decline -0x0001ea05 T sm_authorization_grant -0x0001ea25 T sm_authorization_state -0x0001ea41 T sm_bonding_decline -0x0001ee19 T sm_config -0x0001ef25 T sm_encryption_key_size -0x0001f6a1 T sm_just_works_confirm -0x0001f8f1 T sm_le_device_key -0x0001f989 T sm_passkey_input -0x0001fd15 T sm_private_random_address_generation_get -0x0001fd1d T sm_private_random_address_generation_get_mode -0x0001fd29 T sm_private_random_address_generation_set_mode -0x0001fd51 T sm_private_random_address_generation_set_update_period -0x0001fd89 T sm_register_oob_data_callback -0x0001fd95 T sm_request_pairing -0x000207c7 T sm_send_security_request -0x000207ed T sm_set_accepted_stk_generation_methods -0x000207f9 T sm_set_authentication_requirements -0x00020805 T sm_set_encryption_key_size_range -0x00020af9 T sscanf_bd_addr -0x00020e49 T sysSetPublicDeviceAddr -0x000211fd T uuid128_to_str -0x00021255 T uuid_add_bluetooth_prefix -0x00021275 T uuid_has_bluetooth_prefix -0x000213bd T vPortFree -0x0002158d T vQueueWaitForMessageRestricted -0x000215d5 T vTaskDelay -0x00021621 T vTaskInternalSetTimeOutState -0x00021631 T vTaskMissedYield -0x0002163d T vTaskPlaceOnEventList -0x00021675 T vTaskPlaceOnEventListRestricted -0x000216b5 T vTaskPriorityDisinheritAfterTimeout -0x00021761 T vTaskStartScheduler -0x000217f1 T vTaskStepTick -0x00021821 T vTaskSuspendAll -0x00021831 T vTaskSwitchContext -0x000218c9 T xPortStartScheduler -0x00021985 T xQueueGenericCreate -0x000219d1 T xQueueGenericCreateStatic -0x00021a39 T xQueueGenericReset -0x00021ac5 T xQueueGenericSend -0x00021c31 T xQueueGenericSendFromISR -0x00021cf1 T xQueueGiveFromISR -0x00021d95 T xQueueReceive -0x00021ec1 T xQueueSemaphoreTake -0x0002202d T xTaskCheckForTimeOut -0x0002209d T xTaskCreate -0x000220f9 T xTaskCreateStatic -0x00022169 T xTaskGetSchedulerState -0x00022185 T xTaskGetTickCount -0x00022191 T xTaskIncrementTick -0x0002225d T xTaskPriorityDisinherit -0x000222f1 T xTaskPriorityInherit -0x00022385 T xTaskRemoveFromEventList -0x00022405 T xTaskResumeAll -0x000224cd T xTimerCreate -0x00022501 T xTimerCreateStatic -0x00022539 T xTimerCreateTimerTask -0x000225a5 T xTimerGenericCommand diff --git a/bundles/typical/symdefs.s b/bundles/typical/symdefs.s deleted file mode 100644 index b5fe77f5a..000000000 --- a/bundles/typical/symdefs.s +++ /dev/null @@ -1,233 +0,0 @@ ---defsym:att_dispatch_client_can_send_now=0x00005925 ---defsym:att_dispatch_client_request_can_send_now_event=0x0000592d ---defsym:att_dispatch_register_client=0x00005945 ---defsym:att_dispatch_register_server=0x00005959 ---defsym:att_dispatch_server_can_send_now=0x0000596d ---defsym:att_dispatch_server_request_can_send_now_event=0x00005975 ---defsym:att_emit_general_event=0x00005a45 ---defsym:att_server_can_send_packet_now=0x0000621d ---defsym:att_server_get_mtu=0x00006221 ---defsym:att_server_indicate=0x00006295 ---defsym:att_server_init=0x00006319 ---defsym:att_server_notify=0x00006355 ---defsym:att_server_register_packet_handler=0x0000643d ---defsym:att_server_request_can_send_now_event=0x00006449 ---defsym:att_set_db=0x00006465 ---defsym:att_set_read_callback=0x00006479 ---defsym:att_set_write_callback=0x00006485 ---defsym:bd_addr_cmp=0x000065c9 ---defsym:bd_addr_copy=0x000065cf ---defsym:bd_addr_to_str=0x000065d9 ---defsym:big_endian_read_16=0x00006611 ---defsym:big_endian_read_32=0x00006619 ---defsym:big_endian_store_16=0x0000662d ---defsym:big_endian_store_32=0x00006639 ---defsym:ble_gatts_find_chr=0x00006765 ---defsym:ble_gatts_find_svc=0x000067fd ---defsym:btstack_push_user_msg=0x00006b0d ---defsym:char_for_nibble=0x00006d75 ---defsym:eTaskConfirmSleepModeStatus=0x00006ffd ---defsym:gap_add_dev_to_periodic_list=0x00007929 ---defsym:gap_add_whitelist=0x00007941 ---defsym:gap_aes_encrypt=0x00007955 ---defsym:gap_clr_adv_set=0x0000797d ---defsym:gap_clr_periodic_adv_list=0x0000798d ---defsym:gap_create_connection_cancel=0x000079e9 ---defsym:gap_disconnect=0x000079f9 ---defsym:gap_ext_create_connection=0x00007a8d ---defsym:gap_get_connection_parameter_range=0x00007b51 ---defsym:gap_periodic_adv_create_sync=0x00007c8d ---defsym:gap_periodic_adv_create_sync_cancel=0x00007cb1 ---defsym:gap_periodic_adv_term_sync=0x00007cc1 ---defsym:gap_read_periodic_adv_list_size=0x00007d45 ---defsym:gap_read_phy=0x00007d55 ---defsym:gap_remove_whitelist=0x00007d69 ---defsym:gap_rmv_adv_set=0x00007df5 ---defsym:gap_rmv_dev_from_periodic_list=0x00007e09 ---defsym:gap_set_adv_set_random_addr=0x00007e49 ---defsym:gap_set_connection_parameter_range=0x00007e95 ---defsym:gap_set_def_phy=0x00007ead ---defsym:gap_set_ext_adv_data=0x00007ec5 ---defsym:gap_set_ext_adv_enable=0x00007edd ---defsym:gap_set_ext_adv_para=0x00007f59 ---defsym:gap_set_ext_scan_enable=0x00008039 ---defsym:gap_set_ext_scan_para=0x00008051 ---defsym:gap_set_ext_scan_response_data=0x000080f9 ---defsym:gap_set_host_channel_classification=0x00008111 ---defsym:gap_set_periodic_adv_data=0x00008125 ---defsym:gap_set_periodic_adv_enable=0x00008199 ---defsym:gap_set_periodic_adv_para=0x000081ad ---defsym:gap_set_phy=0x000081c5 ---defsym:gap_set_random_device_address=0x000081e1 ---defsym:gap_start_ccm=0x00008245 ---defsym:gap_update_connection_parameters=0x0000828d ---defsym:gatt_client_cancel_write=0x00008745 ---defsym:gatt_client_deserialize_characteristic=0x0000876b ---defsym:gatt_client_deserialize_characteristic_descriptor=0x000087a3 ---defsym:gatt_client_deserialize_service=0x000087b1 ---defsym:gatt_client_discover_characteristic_descriptors=0x000087dd ---defsym:gatt_client_discover_characteristics_for_handle_range_by_uuid128=0x0000881f ---defsym:gatt_client_discover_characteristics_for_handle_range_by_uuid16=0x0000886f ---defsym:gatt_client_discover_characteristics_for_service=0x000088bf ---defsym:gatt_client_discover_characteristics_for_service_by_uuid128=0x000088f7 ---defsym:gatt_client_discover_characteristics_for_service_by_uuid16=0x00008905 ---defsym:gatt_client_discover_primary_services=0x00008913 ---defsym:gatt_client_discover_primary_services_by_uuid128=0x00008945 ---defsym:gatt_client_discover_primary_services_by_uuid16=0x00008989 ---defsym:gatt_client_execute_write=0x000089c5 ---defsym:gatt_client_find_included_services_for_service=0x000089eb ---defsym:gatt_client_get_mtu=0x00008a1b ---defsym:gatt_client_is_ready=0x00008ac5 ---defsym:gatt_client_listen_for_characteristic_value_updates=0x00008adb ---defsym:gatt_client_prepare_write=0x00008b01 ---defsym:gatt_client_pts_suppress_mtu_exchange=0x00008b3d ---defsym:gatt_client_read_characteristic_descriptor=0x00008b49 ---defsym:gatt_client_read_characteristic_descriptor_using_descriptor_handle=0x00008b4f ---defsym:gatt_client_read_long_characteristic_descriptor=0x00008b79 ---defsym:gatt_client_read_long_characteristic_descriptor_using_descriptor_handle=0x00008b81 ---defsym:gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x00008b87 ---defsym:gatt_client_read_long_value_of_characteristic=0x00008bb5 ---defsym:gatt_client_read_long_value_of_characteristic_using_value_handle=0x00008bbd ---defsym:gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset=0x00008bc3 ---defsym:gatt_client_read_multiple_characteristic_values=0x00008bf1 ---defsym:gatt_client_read_value_of_characteristic=0x00008c21 ---defsym:gatt_client_read_value_of_characteristic_using_value_handle=0x00008c27 ---defsym:gatt_client_read_value_of_characteristics_by_uuid128=0x00008c55 ---defsym:gatt_client_read_value_of_characteristics_by_uuid16=0x00008ca1 ---defsym:gatt_client_register_handler=0x00008ced ---defsym:gatt_client_reliable_write_long_value_of_characteristic=0x00008cf9 ---defsym:gatt_client_signed_write_without_response=0x00009125 ---defsym:gatt_client_write_characteristic_descriptor=0x000091e9 ---defsym:gatt_client_write_characteristic_descriptor_using_descriptor_handle=0x000091f7 ---defsym:gatt_client_write_client_characteristic_configuration=0x00009231 ---defsym:gatt_client_write_long_characteristic_descriptor=0x00009283 ---defsym:gatt_client_write_long_characteristic_descriptor_using_descriptor_handle=0x00009295 ---defsym:gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset=0x000092a5 ---defsym:gatt_client_write_long_value_of_characteristic=0x000092e1 ---defsym:gatt_client_write_long_value_of_characteristic_with_offset=0x000092f1 ---defsym:gatt_client_write_value_of_characteristic=0x0000932d ---defsym:gatt_client_write_value_of_characteristic_without_response=0x00009363 ---defsym:hci_add_event_handler=0x0000b61d ---defsym:hci_power_control=0x0000bdf5 ---defsym:hci_register_acl_packet_handler=0x0000bff5 ---defsym:kv_get=0x0000c679 ---defsym:kv_init=0x0000c691 ---defsym:kv_put=0x0000c6e1 ---defsym:kv_remove=0x0000c759 ---defsym:kv_value_modified=0x0000c7c9 ---defsym:kv_visit=0x0000c7cd ---defsym:l2cap_can_send_fixed_channel_packet_now=0x0000c88d ---defsym:l2cap_can_send_packet_now=0x0000c891 ---defsym:l2cap_create_channel=0x0000ca41 ---defsym:l2cap_disconnect=0x0000cb79 ---defsym:l2cap_get_remote_mtu_for_local_cid=0x0000ce1d ---defsym:l2cap_init=0x0000d28d ---defsym:l2cap_le_send_flow_control_credit=0x0000d2d5 ---defsym:l2cap_max_le_mtu=0x0000d535 ---defsym:l2cap_max_mtu=0x0000d539 ---defsym:l2cap_next_local_cid=0x0000d53d ---defsym:l2cap_next_sig_id=0x0000d54d ---defsym:l2cap_register_fixed_channel=0x0000d5e5 ---defsym:l2cap_register_packet_handler=0x0000d601 ---defsym:l2cap_register_service=0x0000d60d ---defsym:l2cap_request_can_send_fix_channel_now_event=0x0000d6f5 ---defsym:l2cap_request_can_send_now_event=0x0000d719 ---defsym:l2cap_request_connection_parameter_update=0x0000d733 ---defsym:l2cap_require_security_level_2_for_outgoing_sdp=0x0000d765 ---defsym:l2cap_send=0x0000db29 ---defsym:l2cap_send_connectionless=0x0000dba1 ---defsym:l2cap_send_connectionless3=0x0000dc31 ---defsym:l2cap_send_echo_request=0x0000dcc9 ---defsym:l2cap_send_signaling_le=0x0000dd2d ---defsym:l2cap_unregister_service=0x0000dd85 ---defsym:ll_hint_on_ce_len=0x0000df69 ---defsym:ll_set_adv_coded_scheme=0x0000e231 ---defsym:ll_set_initiating_coded_scheme=0x0000e255 ---defsym:nibble_for_char=0x0001c9e5 ---defsym:platform_config=0x0001ca89 ---defsym:platform_get_heap_status=0x0001cab1 ---defsym:platform_get_version=0x0001cac9 ---defsym:platform_printf=0x0001cad1 ---defsym:platform_raise_assertion=0x0001cae5 ---defsym:platform_reset=0x0001caf9 ---defsym:platform_set_evt_callback=0x0001cb2d ---defsym:platform_set_irq_callback=0x0001cb41 ---defsym:platform_set_rf_clk_source=0x0001cb79 ---defsym:platform_set_rf_init_data=0x0001cb85 ---defsym:platform_set_rf_power_mapping=0x0001cb91 ---defsym:platform_shutdown=0x0001cb9d ---defsym:platform_switch_app=0x0001cba1 ---defsym:printf_hexdump=0x0001d881 ---defsym:pvPortMalloc=0x0001e369 ---defsym:pvTaskIncrementMutexHeldCount=0x0001e451 ---defsym:pvTimerGetTimerID=0x0001e469 ---defsym:pxPortInitialiseStack=0x0001e495 ---defsym:reverse_128=0x0001e63d ---defsym:reverse_24=0x0001e643 ---defsym:reverse_48=0x0001e649 ---defsym:reverse_56=0x0001e64f ---defsym:reverse_64=0x0001e655 ---defsym:reverse_bd_addr=0x0001e65b ---defsym:reverse_bytes=0x0001e661 ---defsym:sm_add_event_handler=0x0001e7c1 ---defsym:sm_address_resolution_lookup=0x0001e8f5 ---defsym:sm_authenticated=0x0001e9cf ---defsym:sm_authorization_decline=0x0001e9e5 ---defsym:sm_authorization_grant=0x0001ea05 ---defsym:sm_authorization_state=0x0001ea25 ---defsym:sm_bonding_decline=0x0001ea41 ---defsym:sm_config=0x0001ee19 ---defsym:sm_encryption_key_size=0x0001ef25 ---defsym:sm_just_works_confirm=0x0001f6a1 ---defsym:sm_le_device_key=0x0001f8f1 ---defsym:sm_passkey_input=0x0001f989 ---defsym:sm_private_random_address_generation_get=0x0001fd15 ---defsym:sm_private_random_address_generation_get_mode=0x0001fd1d ---defsym:sm_private_random_address_generation_set_mode=0x0001fd29 ---defsym:sm_private_random_address_generation_set_update_period=0x0001fd51 ---defsym:sm_register_oob_data_callback=0x0001fd89 ---defsym:sm_request_pairing=0x0001fd95 ---defsym:sm_send_security_request=0x000207c7 ---defsym:sm_set_accepted_stk_generation_methods=0x000207ed ---defsym:sm_set_authentication_requirements=0x000207f9 ---defsym:sm_set_encryption_key_size_range=0x00020805 ---defsym:sscanf_bd_addr=0x00020af9 ---defsym:sysSetPublicDeviceAddr=0x00020e49 ---defsym:uuid128_to_str=0x000211fd ---defsym:uuid_add_bluetooth_prefix=0x00021255 ---defsym:uuid_has_bluetooth_prefix=0x00021275 ---defsym:vPortFree=0x000213bd ---defsym:vQueueWaitForMessageRestricted=0x0002158d ---defsym:vTaskDelay=0x000215d5 ---defsym:vTaskInternalSetTimeOutState=0x00021621 ---defsym:vTaskMissedYield=0x00021631 ---defsym:vTaskPlaceOnEventList=0x0002163d ---defsym:vTaskPlaceOnEventListRestricted=0x00021675 ---defsym:vTaskPriorityDisinheritAfterTimeout=0x000216b5 ---defsym:vTaskStartScheduler=0x00021761 ---defsym:vTaskStepTick=0x000217f1 ---defsym:vTaskSuspendAll=0x00021821 ---defsym:vTaskSwitchContext=0x00021831 ---defsym:xPortStartScheduler=0x000218c9 ---defsym:xQueueGenericCreate=0x00021985 ---defsym:xQueueGenericCreateStatic=0x000219d1 ---defsym:xQueueGenericReset=0x00021a39 ---defsym:xQueueGenericSend=0x00021ac5 ---defsym:xQueueGenericSendFromISR=0x00021c31 ---defsym:xQueueGiveFromISR=0x00021cf1 ---defsym:xQueueReceive=0x00021d95 ---defsym:xQueueSemaphoreTake=0x00021ec1 ---defsym:xTaskCheckForTimeOut=0x0002202d ---defsym:xTaskCreate=0x0002209d ---defsym:xTaskCreateStatic=0x000220f9 ---defsym:xTaskGetSchedulerState=0x00022169 ---defsym:xTaskGetTickCount=0x00022185 ---defsym:xTaskIncrementTick=0x00022191 ---defsym:xTaskPriorityDisinherit=0x0002225d ---defsym:xTaskPriorityInherit=0x000222f1 ---defsym:xTaskRemoveFromEventList=0x00022385 ---defsym:xTaskResumeAll=0x00022405 ---defsym:xTimerCreate=0x000224cd ---defsym:xTimerCreateStatic=0x00022501 ---defsym:xTimerCreateTimerTask=0x00022539 ---defsym:xTimerGenericCommand=0x000225a5 diff --git a/examples-gcc/peripheral_ibeacon/Makefile b/examples-gcc/peripheral_ibeacon/Makefile index b7ecf2080..67e3d3e74 100644 --- a/examples-gcc/peripheral_ibeacon/Makefile +++ b/examples-gcc/peripheral_ibeacon/Makefile @@ -4,7 +4,7 @@ ING_BUNDLE=../../bundles/typical/inc APPNAME=peripheral_ibeacon -PROJECT_FILES=src/main.c ../../examples/${APPNAME}/src/profile.c ${ING_REL}/src/FWlib/peripheral_uart.c +PROJECT_FILES=src/main.c ../../examples/${APPNAME}/src/profile.c ${ING_REL}/src/FWlib/peripheral_uart.c SYMDEFS=-Wl,--just-symbols=../../bundles/typical/symdefs.g diff --git a/examples-gcc/peripheral_ibeacon/flash_download.ini b/examples-gcc/peripheral_ibeacon/flash_download.ini index 0b44ba30e..035630687 100644 --- a/examples-gcc/peripheral_ibeacon/flash_download.ini +++ b/examples-gcc/peripheral_ibeacon/flash_download.ini @@ -14,7 +14,7 @@ script= [bin-0] Name=Burn Bin #1 Checked=0 -FileName=../../bundles/typical/platform.bin +FileName=../../bundles/typical/ING9188xx/platform.bin Address=16384 [bin-1] diff --git a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw index 80e9c7ff8..14336a7f9 100644 --- a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw +++ b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw @@ -1,20 +1,20 @@ { "bundle_meta": { "rom": { - "size": 132208, + "size": 135904, "base": 16384 }, "ram": { - "size": 30560, - "base": 536880208 + "size": 32536, + "base": 536870912 }, "app": { "base": 155648 }, "api": [ - "att_server_init","att_server_register_packet_handler","att_server_can_send_packet_now","att_server_request_can_send_now_event","att_server_notify","att_server_indicate","att_server_get_mtu","att_emit_general_event","att_set_db","att_set_read_callback","att_set_write_callback","att_dispatch_register_client","att_dispatch_register_server","att_dispatch_client_can_send_now","att_dispatch_server_can_send_now","att_dispatch_client_request_can_send_now_event","att_dispatch_server_request_can_send_now_event","gatt_client_discover_primary_services","gatt_client_discover_primary_services_by_uuid16","gatt_client_discover_primary_services_by_uuid128","gatt_client_discover_characteristics_for_service","gatt_client_find_included_services_for_service","gatt_client_discover_characteristics_for_handle_range_by_uuid16","gatt_client_discover_characteristics_for_handle_range_by_uuid128","gatt_client_discover_characteristics_for_service_by_uuid16","gatt_client_discover_characteristics_for_service_by_uuid128","gatt_client_discover_characteristic_descriptors","gatt_client_read_value_of_characteristic","gatt_client_read_value_of_characteristic_using_value_handle","gatt_client_read_value_of_characteristics_by_uuid16","gatt_client_read_value_of_characteristics_by_uuid128","gatt_client_read_long_value_of_characteristic","gatt_client_read_long_value_of_characteristic_using_value_handle","gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset","gatt_client_read_multiple_characteristic_values","gatt_client_write_value_of_characteristic_without_response","gatt_client_signed_write_without_response","gatt_client_write_value_of_characteristic","gatt_client_write_long_value_of_characteristic","gatt_client_write_long_value_of_characteristic_with_offset","gatt_client_reliable_write_long_value_of_characteristic","gatt_client_read_characteristic_descriptor","gatt_client_read_characteristic_descriptor_using_descriptor_handle","gatt_client_read_long_characteristic_descriptor","gatt_client_read_long_characteristic_descriptor_using_descriptor_handle","gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset","gatt_client_write_characteristic_descriptor","gatt_client_write_characteristic_descriptor_using_descriptor_handle","gatt_client_write_long_characteristic_descriptor","gatt_client_write_long_characteristic_descriptor_using_descriptor_handle","gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset","gatt_client_write_client_characteristic_configuration","gatt_client_prepare_write","gatt_client_execute_write","gatt_client_cancel_write","gatt_client_deserialize_service","gatt_client_deserialize_characteristic","gatt_client_deserialize_characteristic_descriptor","ble_gatts_find_svc","ble_gatts_find_chr","gatt_client_get_mtu","gatt_client_is_ready","gatt_client_listen_for_characteristic_value_updates","gatt_client_register_handler","gatt_client_pts_suppress_mtu_exchange","gap_set_random_device_address","gap_disconnect","gap_add_whitelist","gap_remove_whitelist","gap_read_phy","gap_set_def_phy","gap_set_phy","gap_set_adv_set_random_addr","gap_set_ext_scan_para","gap_set_ext_scan_response_data","gap_set_ext_scan_enable","gap_set_ext_adv_enable","gap_set_ext_adv_para","gap_set_ext_adv_data","gap_set_periodic_adv_data","gap_set_periodic_adv_enable","gap_set_periodic_adv_para","gap_clr_adv_set","gap_rmv_adv_set","gap_periodic_adv_create_sync","gap_periodic_adv_create_sync_cancel","gap_periodic_adv_term_sync","gap_add_dev_to_periodic_list","gap_rmv_dev_from_periodic_list","gap_clr_periodic_adv_list","gap_read_periodic_adv_list_size","gap_ext_create_connection","gap_create_connection_cancel","gap_set_host_channel_classification","gap_update_connection_parameters","gap_get_connection_parameter_range","gap_set_connection_parameter_range","gap_aes_encrypt","gap_start_ccm","hci_add_event_handler","hci_register_acl_packet_handler","hci_power_control","platform_set_evt_callback","platform_set_irq_callback","platform_get_version","platform_raise_assertion","platform_get_heap_status","platform_reset","platform_switch_app","platform_config","platform_shutdown","platform_printf","sysSetPublicDeviceAddr","platform_set_rf_clk_source","platform_set_rf_init_data","platform_set_rf_power_mapping","ll_set_adv_coded_scheme","ll_set_initiating_coded_scheme","ll_hint_on_ce_len","big_endian_read_16","big_endian_read_32","big_endian_store_16","big_endian_store_32","reverse_bytes","reverse_24","reverse_48","reverse_56","reverse_64","reverse_128","reverse_bd_addr","char_for_nibble","nibble_for_char","bd_addr_cmp","bd_addr_copy","printf_hexdump","uuid128_to_str","bd_addr_to_str","sscanf_bd_addr","uuid_add_bluetooth_prefix","uuid_has_bluetooth_prefix","btstack_push_user_msg","l2cap_register_fixed_channel","l2cap_can_send_fixed_channel_packet_now","l2cap_request_can_send_fix_channel_now_event","l2cap_send_connectionless","l2cap_send_connectionless3","l2cap_le_send_flow_control_credit","l2cap_send_echo_request","l2cap_require_security_level_2_for_outgoing_sdp","l2cap_init","l2cap_register_packet_handler","l2cap_max_mtu","l2cap_max_le_mtu","l2cap_create_channel","l2cap_disconnect","l2cap_get_remote_mtu_for_local_cid","l2cap_send","l2cap_register_service","l2cap_unregister_service","l2cap_can_send_packet_now","l2cap_request_can_send_now_event","l2cap_request_connection_parameter_update","l2cap_send_signaling_le","l2cap_next_sig_id","l2cap_next_local_cid","sm_config","sm_add_event_handler","sm_private_random_address_generation_set_mode","sm_private_random_address_generation_get_mode","sm_private_random_address_generation_set_update_period","sm_private_random_address_generation_get","sm_register_oob_data_callback","sm_bonding_decline","sm_just_works_confirm","sm_passkey_input","sm_set_accepted_stk_generation_methods","sm_set_encryption_key_size_range","sm_set_authentication_requirements","sm_send_security_request","sm_encryption_key_size","sm_authenticated","sm_authorization_state","sm_request_pairing","sm_authorization_decline","sm_authorization_grant","sm_address_resolution_lookup","sm_le_device_key","kv_init","kv_remove","kv_put","kv_get","kv_value_modified","kv_visit","xQueueGenericSend","xQueueReceive","xQueueGenericSendFromISR","xQueueGiveFromISR","xQueueSemaphoreTake","xQueueGenericCreate","xQueueGenericCreateStatic","vQueueWaitForMessageRestricted","xQueueGenericReset","xTaskCreate","xTaskCreateStatic","vTaskDelay","vTaskStartScheduler","vTaskSuspendAll","xTaskResumeAll","xTaskGetTickCount","xTaskIncrementTick","vTaskPlaceOnEventList","vTaskPlaceOnEventListRestricted","xTaskRemoveFromEventList","vTaskSwitchContext","xTaskCheckForTimeOut","vTaskMissedYield","xTaskGetSchedulerState","xTaskPriorityInherit","xTaskPriorityDisinherit","vTaskPriorityDisinheritAfterTimeout","vTaskStepTick","eTaskConfirmSleepModeStatus","pvTaskIncrementMutexHeldCount","vTaskInternalSetTimeOutState","xTimerCreate","xTimerCreateStatic","pvTimerGetTimerID","xTimerCreateTimerTask","xTimerGenericCommand","pxPortInitialiseStack","pvPortMalloc","vPortFree","xPortStartScheduler"], + "att_server_init","att_server_register_packet_handler","att_server_can_send_packet_now","att_server_request_can_send_now_event","att_server_notify","att_server_indicate","att_server_get_mtu","att_emit_general_event","att_set_db","att_set_read_callback","att_set_write_callback","att_dispatch_register_client","att_dispatch_register_server","att_dispatch_client_can_send_now","att_dispatch_server_can_send_now","att_dispatch_client_request_can_send_now_event","att_dispatch_server_request_can_send_now_event","gatt_client_discover_primary_services","gatt_client_discover_primary_services_by_uuid16","gatt_client_discover_primary_services_by_uuid128","gatt_client_find_included_services_for_service","gatt_client_discover_characteristics_for_service","gatt_client_discover_characteristics_for_handle_range_by_uuid16","gatt_client_discover_characteristics_for_handle_range_by_uuid128","gatt_client_discover_characteristic_descriptors","gatt_client_read_value_of_characteristic_using_value_handle","gatt_client_read_value_of_characteristics_by_uuid16","gatt_client_read_value_of_characteristics_by_uuid128","gatt_client_read_long_value_of_characteristic_using_value_handle","gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset","gatt_client_read_multiple_characteristic_values","gatt_client_write_value_of_characteristic_without_response","gatt_client_signed_write_without_response","gatt_client_write_value_of_characteristic","gatt_client_write_long_value_of_characteristic","gatt_client_write_long_value_of_characteristic_with_offset","gatt_client_reliable_write_long_value_of_characteristic","gatt_client_read_characteristic_descriptor_using_descriptor_handle","gatt_client_read_long_characteristic_descriptor_using_descriptor_handle","gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset","gatt_client_write_characteristic_descriptor_using_descriptor_handle","gatt_client_write_long_characteristic_descriptor_using_descriptor_handle","gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset","gatt_client_write_client_characteristic_configuration","gatt_client_prepare_write","gatt_client_execute_write","gatt_client_cancel_write","gatt_client_get_mtu","gatt_client_is_ready","gatt_client_listen_for_characteristic_value_updates","gatt_client_register_handler","gatt_client_pts_suppress_mtu_exchange","gap_set_random_device_address","gap_disconnect","gap_disconnect_all","gap_add_whitelist","gap_remove_whitelist","gap_clear_white_lists","gap_read_rssi","gap_read_remote_used_features","gap_read_remote_info","gap_le_read_channel_map","gap_read_phy","gap_set_def_phy","gap_set_phy","gap_set_adv_set_random_addr","gap_set_ext_scan_para","gap_set_ext_scan_response_data","gap_set_ext_scan_enable","gap_set_ext_adv_enable","gap_set_ext_adv_para","gap_set_ext_adv_data","gap_set_periodic_adv_data","gap_set_periodic_adv_enable","gap_set_periodic_adv_para","gap_clr_adv_set","gap_rmv_adv_set","gap_periodic_adv_create_sync","gap_periodic_adv_create_sync_cancel","gap_periodic_adv_term_sync","gap_add_dev_to_periodic_list","gap_rmv_dev_from_periodic_list","gap_clr_periodic_adv_list","gap_read_periodic_adv_list_size","gap_ext_create_connection","gap_create_connection_cancel","gap_set_connectionless_cte_tx_param","gap_set_connectionless_cte_tx_enable","gap_set_connectionless_iq_sampling_enable","gap_set_connection_cte_rx_param","gap_set_connection_cte_tx_param","gap_set_connection_cte_request_enable","gap_set_connection_cte_response_enable","gap_read_antenna_info","gap_set_periodic_adv_rx_enable","gap_periodic_adv_sync_transfer","gap_periodic_adv_set_info_transfer","gap_periodic_adv_sync_transfer_param","gap_default_periodic_adv_sync_transfer_param","gap_set_host_channel_classification","gap_update_connection_parameters","gap_get_connection_parameter_range","gap_set_connection_parameter_range","gap_aes_encrypt","gap_start_ccm","hci_add_event_handler","hci_register_acl_packet_handler","hci_power_control","platform_trace_raw","platform_set_evt_callback","platform_set_irq_callback","platform_get_version","platform_raise_assertion","platform_get_heap_status","platform_reset","platform_switch_app","platform_write_persistent_reg","platform_read_persistent_reg","platform_shutdown","platform_config","platform_read_info","platform_calibrate_32k","platform_hrng","platform_rand","platform_get_us_time","platform_printf","sysSetPublicDeviceAddr","platform_set_rf_clk_source","platform_set_rf_init_data","platform_set_rf_power_mapping","platform_patch_rf_init_data","ll_set_adv_coded_scheme","ll_set_initiating_coded_scheme","ll_hint_on_ce_len","ll_set_def_antenna","big_endian_read_16","big_endian_read_32","big_endian_store_16","big_endian_store_32","reverse_bytes","reverse_24","reverse_48","reverse_56","reverse_64","reverse_128","reverse_bd_addr","char_for_nibble","nibble_for_char","bd_addr_cmp","bd_addr_copy","printf_hexdump","uuid128_to_str","bd_addr_to_str","sscanf_bd_addr","uuid_add_bluetooth_prefix","uuid_has_bluetooth_prefix","btstack_push_user_msg","l2cap_register_fixed_channel","l2cap_can_send_fixed_channel_packet_now","l2cap_request_can_send_fix_channel_now_event","l2cap_send_connectionless","l2cap_send_connectionless3","l2cap_le_send_flow_control_credit","l2cap_send_echo_request","l2cap_require_security_level_2_for_outgoing_sdp","l2cap_init","l2cap_register_packet_handler","l2cap_max_mtu","l2cap_max_le_mtu","l2cap_create_channel","l2cap_disconnect","l2cap_get_remote_mtu_for_local_cid","l2cap_send","l2cap_register_service","l2cap_unregister_service","l2cap_can_send_packet_now","l2cap_request_can_send_now_event","l2cap_request_connection_parameter_update","l2cap_send_signaling_le","l2cap_next_sig_id","l2cap_next_local_cid","sm_config","sm_add_event_handler","sm_private_random_address_generation_set_mode","sm_private_random_address_generation_get_mode","sm_private_random_address_generation_set_update_period","sm_private_random_address_generation_get","sm_register_oob_data_callback","sm_bonding_decline","sm_just_works_confirm","sm_passkey_input","sm_set_accepted_stk_generation_methods","sm_set_encryption_key_size_range","sm_set_authentication_requirements","sm_send_security_request","sm_encryption_key_size","sm_authenticated","sm_authorization_state","sm_request_pairing","sm_authorization_decline","sm_authorization_grant","sm_address_resolution_lookup","sm_le_device_key","kv_init","kv_remove_all","kv_remove","kv_put","kv_get","kv_value_modified","kv_commit","kv_visit","btstack_memory_pool_create","btstack_memory_pool_get","btstack_memory_pool_free","xQueueGenericSend","xQueuePeek","xQueuePeekFromISR","xQueueReceive","uxQueueMessagesWaiting","uxQueueSpacesAvailable","vQueueDelete","xQueueGenericSendFromISR","xQueueGiveFromISR","xQueueReceiveFromISR","xQueueIsQueueEmptyFromISR","xQueueIsQueueFullFromISR","uxQueueMessagesWaitingFromISR","xQueueCreateMutex","xQueueCreateMutexStatic","xQueueCreateCountingSemaphore","xQueueCreateCountingSemaphoreStatic","xQueueSemaphoreTake","xQueueTakeMutexRecursive","xQueueGiveMutexRecursive","xQueueGenericCreate","xQueueGenericCreateStatic","xQueueCreateSet","xQueueAddToSet","xQueueRemoveFromSet","xQueueSelectFromSet","xQueueSelectFromSetFromISR","vQueueWaitForMessageRestricted","xQueueGenericReset","xTaskCreate","xTaskCreateStatic","vTaskDelay","vTaskStartScheduler","vTaskSuspendAll","xTaskResumeAll","xTaskGetTickCount","xTaskGetTickCountFromISR","xTaskIncrementTick","vTaskPlaceOnEventList","vTaskPlaceOnEventListRestricted","xTaskRemoveFromEventList","vTaskSwitchContext","xTaskGetCurrentTaskHandle","xTaskCheckForTimeOut","vTaskMissedYield","xTaskGetSchedulerState","xTaskPriorityInherit","xTaskPriorityDisinherit","vTaskPriorityDisinheritAfterTimeout","vTaskStepTick","eTaskConfirmSleepModeStatus","pvTaskIncrementMutexHeldCount","vTaskInternalSetTimeOutState","xTimerCreate","xTimerCreateStatic","pvTimerGetTimerID","xTimerGetExpiryTime","xTimerCreateTimerTask","xTimerGenericCommand","pxPortInitialiseStack","pvPortMalloc","vPortFree","xPortStartScheduler","vPortEnterCritical","vPortExitCritical","vPortSuppressTicksAndSleep","vPortValidateInterruptPriority"], "version": [ - 0,14,5] + 1,0,8] }, "tc_dir": "C:\/Program Files(2)\/gcc-arm-none-eabi-8-2018-q4-major-win32\/bin", "ide_ver": "", @@ -29,6 +29,7 @@ "ota_ver_minor": "0", "ota_ver_major": "0", "template": "C:\\projects\\ingWizard\\templates\\typical\\peripheral", + "series": "ING9188xx", "proj_name": "peripheral_ibeacon", "sdk_release_path": "..\/..", "legacy_adv": true, @@ -50,8 +51,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingWizard\/CMSIS", - "app_ram_size": 25680, - "app_ram_addr": 536910768, + "app_ram_size": 33000, + "app_ram_addr": 536903448, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld index 94a2c3f46..4540d30f6 100644 --- a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld +++ b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 155648, LENGTH = 385024 - RAM (rwx) : ORIGIN = 536910768, LENGTH = 25680 + RAM (rwx) : ORIGIN = 536903448, LENGTH = 33000 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples-iar/peripheral_ibeacon/flash_download.ini b/examples-iar/peripheral_ibeacon/flash_download.ini index a96a3c927..70705f09d 100644 --- a/examples-iar/peripheral_ibeacon/flash_download.ini +++ b/examples-iar/peripheral_ibeacon/flash_download.ini @@ -14,7 +14,7 @@ script= [bin-0] Name=Burn Bin #1 Checked=0 -FileName=../../bundles/typical/platform.bin +FileName=../../bundles/typical/ING9188xx/platform.bin Address=16384 [bin-1] diff --git a/examples-iar/peripheral_ibeacon/generic_cortex.icf b/examples-iar/peripheral_ibeacon/generic_cortex.icf index 7703b56a9..a44929ca3 100644 --- a/examples-iar/peripheral_ibeacon/generic_cortex.icf +++ b/examples-iar/peripheral_ibeacon/generic_cortex.icf @@ -2,9 +2,9 @@ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_4.xml" */ /*-Specials-*/ -define symbol __ICFEDIT_intvec_start__ = 155648; +define symbol __ICFEDIT_intvec_start__ = 155648; /*-Memory Regions-*/ -define symbol __ICFEDIT_region_IROM1_start__ = 155648; +define symbol __ICFEDIT_region_IROM1_start__ = 155648; define symbol __ICFEDIT_region_IROM1_end__ = 0x00084000; define symbol __ICFEDIT_region_IROM2_start__ = 0x0; define symbol __ICFEDIT_region_IROM2_end__ = 0x0; @@ -14,7 +14,7 @@ define symbol __ICFEDIT_region_EROM2_start__ = 0x0; define symbol __ICFEDIT_region_EROM2_end__ = 0x0; define symbol __ICFEDIT_region_EROM3_start__ = 0x0; define symbol __ICFEDIT_region_EROM3_end__ = 0x0; -define symbol __ICFEDIT_region_IRAM1_start__ = 536910768; +define symbol __ICFEDIT_region_IRAM1_start__ = 536903448; define symbol __ICFEDIT_region_IRAM1_end__ = 0x2000FFFF; define symbol __ICFEDIT_region_IRAM2_start__ = 0x0; define symbol __ICFEDIT_region_IRAM2_end__ = 0x0; diff --git a/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ewp b/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ewp index 9def0ed85..4ca310ef4 100644 --- a/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ewp +++ b/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ewp @@ -812,7 +812,7 @@