mbed library sources
Fork of mbed-src by
Revision 123:8a356fb1000a, committed 2014-03-18
- Comitter:
- mbed_official
- Date:
- Tue Mar 18 12:30:07 2014 +0000
- Parent:
- 122:6790158fd562
- Child:
- 124:73383cc04afd
- Commit message:
- Synchronized with git revision 3e40310534d854400e01b2e9612ef7edf44a2dc9
Full URL: https://github.com/mbedmicro/mbed/commit/3e40310534d854400e01b2e9612ef7edf44a2dc9/
Changed in this revision
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/doc/ble_api.dox Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1177 +0,0 @@ -/** - * @addtogroup BLE_COMMON - * @{ - * @defgroup BLE_COMMON_MSC Message Sequence Charts - * @{ - * @defgroup BLE_COMMON_IRQ_EVT_MSC Interrupt-driven Event Retrieval - * @msc - * hscale = "1.5"; - * APP,SD; - * |||; - * APP=>SD [label = "sd_softdevice_enable(clock, assertion_handler);"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_nvic_EnableIRQ(SD_EVENT_IRQn)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * APP rbox SD [label="Application runs and uses SD API"]; - * |||; - * SD rbox SD [label="Event Available for the App"]; - * |||; - * APP<-SD [label = "SD_EVENT_IRQn", textcolor="#800080", linecolor="#800080"]; - * APP=>APP [label = "SD_EVENT_IRQHandler()"]; - * APP=>SD [label = "sd_ble_evt_get(buffer);"]; - * APP<<SD [label = "{NRF_SUCCESS, event}"]; - * |||; - * @endmsc - * - * @defgroup BLE_COMMON_THREAD_EVT_MSC Thread Mode Event Retrieval - * @msc - * hscale = "1.5"; - * APP,SD; - * |||; - * APP=>SD [label = "sd_softdevice_enable(clock, assertion_handler);"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * APP=>SD [label = "sd_app_evt_wait(void);"]; - * APP rbox APP [label="App Thread Mode blocked, CPU in low power mode"]; - * |||; - * ...; - * |||; - * SD rbox SD [label="Event Available for the App"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_ble_evt_get(buffer);"]; - * APP<<SD [label = "{NRF_SUCCESS, event}"]; - * APP=>SD [label = "sd_app_evt_wait(void);"]; - * APP rbox APP [label="App Thread Mode blocked, CPU in low power mode"]; - * |||; - * ...; - * |||; - * SD rbox SD [label="Event Available for the App"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_ble_evt_get(buffer);"]; - * APP<<SD [label = "{NRF_SUCCESS, event}"]; - * APP=>SD [label = "sd_app_evt_wait(void);"]; - * APP rbox APP [label="App Thread Mode blocked, CPU in low power mode"]; - * |||; - * ...; - * |||; - * @endmsc - * - * @defgroup BLE_COMMON_APP_BUFF_MSC App Buffer Management - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP=>SD [label = "sd_ble_tx_buffer_count_get();"]; - * APP<<SD [label = "{NRF_SUCCESS, N}"]; - * APP rbox APP [label="available = N"]; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gattc_write(handle, value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP rbox APP [label="available--"]; - * SD:>PEER [label = "ATT Write Command", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_TX_COMPLETE {1}"]; - * APP rbox APP [label="available += 1"]; - * |||; - * ...; - * |||; - * APP=>SD [label = "sd_ble_gatts_hvx(NOTIFICATION, app_value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP rbox APP [label="available--"]; - * SD:>PEER [label = "ATT Handle Value Notification", textcolor="#000080", linecolor="#000080"]; - * APP=>SD [label = "sd_ble_gatts_hvx(NOTIFICATION, app_value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP rbox APP [label="available--"]; - * SD:>PEER [label = "ATT Handle Value Notification", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_TX_COMPLETE {2}"]; - * APP rbox APP [label="available += 2"]; - * |||; - * ...; - * |||; - * APP rbox PEER [label="Terminate Connection"]; - * |||; - * APP rbox APP [label="available = N"]; - * |||; - * @endmsc - * @} - * @} - */ - -/** - * @addtogroup BLE_GAP - * @{ - * @defgroup BLE_GAP_MSC Message Sequence Charts - * @{ - * @defgroup BLE_GAP_ADV_MSC GAP Advertisement - * @msc - * hscale = "1.5"; - * APP,SD,SCANNERS; - * |||; - * APP=>SD [label = "sd_ble_gap_address_set(addr)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_ble_gap_adv_data_set(adv, sr)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_ble_gap_adv_start(params)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; - * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; - * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; - * ...; - * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #1 App Stops Advertisement "]; - * APP=>SD [label = "sd_ble_gap_adv_stop()"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * --- [label = " Variant #2 Advertisement Timeout "]; - * APP<<=SD [label = "BLE_GAP_EVT_TIMEOUT"]; - * @endmsc - * - * @defgroup BLE_GAP_CONN_MSC GAP Connection Establishment and Termination - * @msc - * hscale = "1.5"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Start Advertising"]; - * |||; - * SD<:>CENTRAL [label = "Connection Establishment", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONNECTED"]; - * |||; - * --- [label = " Variant #1 Local Disconnection "]; - * APP=>SD [label = "sd_ble_gap_disconnect(reason)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "Connection Termination", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_DISCONNECTED {reason}"]; - * |||; - * --- [label = " Variant #2 Remote Disconnection "]; - * SD<:CENTRAL [label = "Connection Termination", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_DISCONNECTED {reason}"]; - * @endmsc - * - * @defgroup BLE_GAP_CPU_MSC GAP Connection Parameter Update - * @msc - * hscale = "1.5"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established with conn. params. CP#1"]; - * |||; - * APP=>SD [label = "sd_ble_gap_conn_param_update(CP#2)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "L2CAP CPU Request", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #1 Central Accepts "]; - * |||; - * SD<:CENTRAL [label = "L2CAP CPU Response: Accepted", textcolor="#000080", linecolor="#000080"]; - * |||; - * SD<:CENTRAL [label = "Connection Update", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_PARAM_UPDATE {CP#2}"]; - * |||; - * --- [label = " Variant #2 Central Rejects "]; - * |||; - * SD<:CENTRAL [label = "L2CAP CPU Response: Rejected", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_PARAM_UPDATE {CP#1}"]; - * --- [label = " Variant #3 Central Ignores "]; - * |||; - * ...; - * |||; - * SD box SD [label="Timeout"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_PARAM_UPDATE {CP#1}"]; - * @endmsc - * - * @defgroup BLE_GAP_RSSI_MSC GAP RSSI - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gap_rssi_start()"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * SD<-PEER [label = "RSSI Sample", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_RSSI_CHANGED {RSSI#1}"]; - * |||; - * SD<-PEER [label = "RSSI Sample", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_RSSI_CHANGED {RSSI#2}"]; - * |||; - * SD<-PEER [label = "RSSI Sample", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_RSSI_CHANGED {RSSI#3}"]; - * |||; - * APP=>SD [label = "sd_ble_gap_rssi_stop()"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * @endmsc - * - * @defgroup BLE_GAP_PAIRING_JW_MSC GAP Pairing: Just Works - * @msc - * hscale = "2"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established"]; - * |||; - * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: no_bond, no_mitm, no_io_caps}"]; - * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: no_bond, no_mitm, no_io_caps)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; - * |||; - * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS}"]; - * APP rbox CENTRAL [label = "Encrypted with STK"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_NO_MITM}"]; - * @endmsc - * - * @defgroup BLE_GAP_BONDING_JW_MSC GAP Bonding: Just Works - * @msc - * hscale = "2"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established"]; - * |||; - * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: bond, no_mitm, no_io_caps}"]; - * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: bond, no_mitm, no_io_caps)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; - * |||; - * APP rbox CENTRAL [label = "Encrypted with STK"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_NO_MITM}"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 3", textbgcolor="#7f7fff"]; - * |||; - * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS, periph_keys}"]; - * APP rbox APP [label = "Store Peripheral Keys"]; - * @endmsc - * - * @defgroup BLE_GAP_BONDING_PK_PERIPH_MSC GAP Bonding: Passkey Entry, Peripheral displays - * @msc - * hscale = "2"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established"]; - * |||; - * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: bond, mitm, keyboard}"]; - * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: bond, mitm, display)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_PASSKEY_DISPLAY {passkey}"]; - * APP rbox APP [label="Passkey displayed to the user"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; - * |||; - * APP rbox CENTRAL [label = "Encrypted with STK"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_MITM}"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 3", textbgcolor="#7f7fff"]; - * |||; - * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS, periph_keys}"]; - * APP rbox APP [label = "Store Peripheral Keys"]; - * @endmsc - * - * @defgroup BLE_GAP_BONDING_PK_CENTRAL_OOB_MSC GAP Bonding: Passkey Entry (Central display) or OOB MSC - * @msc - * hscale = "2"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established"]; - * |||; - * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: bond, mitm, display}"]; - * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: bond, mitm, keyboard)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_AUTH_KEY_REQUEST {type}"]; - * APP rbox APP [label="User enters Passkey or data received Out Of Band"]; - * APP=>SD [label = "sd_ble_gap_auth_key_reply(passkey or OOB)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; - * |||; - * APP rbox CENTRAL [label = "Encrypted with STK"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_MITM}"]; - * |||; - * SD abox CENTRAL [label="SMP Pairing Phase 3", textbgcolor="#7f7fff"]; - * |||; - * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS, periph_keys}"]; - * APP rbox APP [label = "Store Peripheral Keys"]; - * @endmsc - * - * @defgroup BLE_GAP_SEC_MSC GAP Security Establishment using stored keys - * @msc - * hscale = "1.5"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established"]; - * |||; - * SD<:CENTRAL [label = "LL Encryption Request", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GAP_EVT_SEC_INFO_REQUEST {addr, div}"]; - * |||; - * --- [label = " Variant #1 App Replies with Keys "]; - * |||; - * APP rbox APP [label = "Load Peripheral Keys"]; - * APP=>SD [label = "sd_ble_gap_sec_info_reply(div, LTK)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "LL Encryption Response", textcolor="#000080", linecolor="#000080"]; - * APP rbox CENTRAL [label = "Encrypted with LTK"]; - * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE"]; - * |||; - * --- [label = " Variant #2 App Replies without Keys "]; - * |||; - * APP=>SD [label = "sd_ble_gap_sec_info_reply(NULL)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "LL Reject Ind: Pin or Key Missing", textcolor="#000080", linecolor="#000080"]; - * APP rbox CENTRAL [label = "Link Not Encrypted"]; - * @endmsc - * - * @defgroup BLE_GAP_PERIPH_SEC_MSC GAP Peripheral Initiated Security Establishment - * @msc - * hscale = "1.5"; - * APP,SD,CENTRAL; - * |||; - * APP rbox CENTRAL [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gap_authenticate(params)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>CENTRAL [label = "SMP Security Request", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #1 Central initiates Security Establishment "]; - * |||; - * APP rbox CENTRAL [label="Encryption or Pairing/Bonding initiated by Central"]; - * |||; - * --- [label = " Variant #2 Central ignores "]; - * |||; - * ...; - * |||; - * APP<<=SD [label = "BLE_GAP_EVT_TIMEOUT"]; - * |||; - * @endmsc - * @} - * @} - */ - -/** - * @addtogroup BLE_GATTC - * @{ - * @defgroup BLE_GATTC_MSC Message Sequence Charts - * @{ - * @defgroup BLE_GATTC_PRIM_SRVC_DISC_MSC GATTC Primary Service Discovery - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * --- [label = " Variant #1 Discover All Services "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle, NULL)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Group Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Group Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; - * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N, NULL)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Group Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Group Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; - * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N + M, NULL)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Group Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; - * |||; - * --- [label = " Variant #2 Discover a Specific Service "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle, uuid)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Find By Type Value Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Find By Type Value Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; - * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N, uuid)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Find By Type Value Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Find By Type Value Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; - * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N + M, uuid)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Find By Type Value Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; - * @endmsc - * - * @defgroup BLE_GATTC_REL_DISC_MSC GATTC Relationship Discovery - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gattc_relationships_discover(handle_range)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_REL_DISC_RSP {SUCCESS, includes}"]; - * APP=>SD [label = "sd_ble_gattc_relationships_discover(handle_range + N)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_REL_DISC_RSP {SUCCESS, includes}"]; - * APP=>SD [label = "sd_ble_gattc_relationships_discover(handle_range + N + M)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; - * @endmsc - * - * @defgroup BLE_GATTC_CHAR_DISC_MSC GATTC Characteristic Discovery - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gattc_characteristics_discover(handle_range)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_DISC_RSP {SUCCESS, chars}"]; - * APP=>SD [label = "sd_ble_gattc_characteristics_discover(handle_range + N)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_DISC_RSP {SUCCESS, chars}"]; - * APP=>SD [label = "sd_ble_gattc_characteristics_discover(handle_range + N + M)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; - * @endmsc - * - * @defgroup BLE_GATTC_DESC_DISC_MSC GATTC Descriptor Discovery - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gattc_descriptors_discover(handle_range)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Find Information Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Find Information Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_DESC_DISC_RSP {SUCCESS, descs}"]; - * APP=>SD [label = "sd_ble_gattc_descriptors_discover(handle_range + N)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Find Information Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Find Information Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_DESC_DISC_RSP {SUCCESS, descs}"]; - * APP=>SD [label = "sd_ble_gattc_descriptors_discover(handle_range + N + M)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Find Information Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; - * @endmsc - * - * @defgroup BLE_GATTC_READ_UUID_MSC GATTC Read Characteristic Value by UUID - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_gattc_char_value_by_uuid_read(uuid, handle_range)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP {SUCCESS, char_values}"]; - * APP=>SD [label = "sd_ble_gattc_char_value_by_uuid_read(uuid, handle_range + N)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP {SUCCESS, char_values}"]; - * APP=>SD [label = "sd_ble_gattc_char_value_by_uuid_read(uuid, handle_range + N + M)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; - * @endmsc - * - * @defgroup BLE_GATTC_VALUE_READ_MSC GATTC Characteristic or Descriptor Value Read - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * --- [label = " Variant #1 offset == 0 "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_read(handle, 0)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_READ_RSP {SUCCESS, value}"]; - * |||; - * --- [label = " Variant #2 offset != 0 "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_read(handle, offset)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Blob Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read Blob Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_READ_RSP {SUCCESS, value}"]; - * APP=>SD [label = "sd_ble_gattc_read(handle, offset + N)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Blob Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read Blob Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_READ_RSP {SUCCESS, value}"]; - * APP=>SD [label = "sd_ble_gattc_read(handle, offset + N + M + 1)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Blob Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Invalid Offset", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {INVALID_OFFSET}"]; - * @endmsc - * - * @defgroup BLE_GATTC_READ_MULT_MSC GATTC Read Multiple Characteristic Values - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * --- [label = " Variant #1 Successful request "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_char_values_read(handles)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Multiple Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Read Multiple Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_VALS_READ_RSP {SUCCESS, char_values}"]; - * |||; - * --- [label = " Variant #2 Failing request (invalid handle) "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_char_values_read(handles)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Multiple Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Error Response: Invalid Handle", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT {INVALID_HANDLE, error_handle=<invalid handle>}"]; - * @endmsc - * - * @defgroup BLE_GATTC_VALUE_WRITE_MSC GATTC Characteristic or Descriptor Value Write - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * --- [label = " Variant #1 write_op == BLE_GATT_OP_WRITE_CMD "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_write(handle, value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Write Command", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_TX_COMPLETE"]; - * |||; - * --- [label = " Variant #2 write_op == BLE_GATT_OP_WRITE_REQ "]; - * |||; - * APP=>SD [label = "sd_ble_gattc_write(handle, value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Write Request", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_WRITE_RSP {SUCCESS}"]; - * @endmsc - * - * @defgroup BLE_GATTC_HVI_MSC GATTC Handle Value Indication - * <b> GATTC Handle Value Indication MSC </b> - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD<:PEER [label = "ATT Handle Value Indication", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_HVX {INDICATION, data}"]; - * APP=>SD [label = "sd_ble_gattc_hv_confirm(handle)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Handle Value Confirmation", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTC_HVN_MSC GATTC Handle Value Notification - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD<:PEER [label = "ATT Handle Value Notification", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTC_EVT_HVX {NOTIFICATION, data}"]; - * @endmsc - * - * @defgroup BLE_GATTC_TIMEOUT_MSC GATTC Timeout - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox PEER [label="Any GATTC API used"]; - * SD:>PEER [label = "ATT Packet", textcolor="#000080", linecolor="#000080"]; - * APP note PEER [label = "No Response from Peer"]; - * |||; - * ...; - * |||; - * SD box SD [label="Timeout"]; - * APP<<=SD [label = "BLE_GATTC_EVT_TIMEOUT {source}"]; - * APP rbox PEER [label="No additional ATT Traffic Allowed", textbgcolour="#ff7f7f"]; - * APP=>SD [label = "Any API call"]; - * APP<<SD [label = "NRF_ERROR_BUSY"]; - * @endmsc - * @} - * @} - */ - -/** - * @addtogroup BLE_GATTS - * @{ - * @defgroup BLE_GATTS_MSC Message Sequence Charts - * @{ - * @defgroup BLE_GATTS_ATT_TABLE_POP_MSC GATTS ATT Table Population - * @msc - * hscale = "1.5"; - * APP,SD; - * |||; - * APP=>SD [label = "sd_ble_gatts_service_add(uuid#1)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_srvc#1}"]; - * APP=>SD [label = "sd_ble_gatts_characteristic_add(handle_srvc#1, char_md, value)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_char#1, ...}"]; - * APP=>SD [label = "sd_ble_gatts_descriptor_add(handle_char#1, value)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_desc#1}"]; - * APP=>SD [label = "sd_ble_gatts_descriptor_add(handle_char#1, value)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_desc#2}"]; - * APP=>SD [label = "sd_ble_gatts_characteristic_add(handle_srvc#1, char_md, value)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_char#2, ...}"]; - * APP=>SD [label = "sd_ble_gatts_descriptor_add(handle_char#2, value)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_desc#3}"]; - * APP=>SD [label = "sd_ble_gatts_service_add(uuid#2)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_srvc#2}"]; - * APP=>SD [label = "sd_ble_gatts_include_add(handle_srvc#2, handle_srvc#1)"]; - * APP<<SD [label = "{NRF_SUCCESS, handle_inc#1}"]; - * |||; - * ...; - * |||; - * @endmsc - * - * @defgroup BLE_GATTS_READ_REQ_NO_AUTH_MSC Read Request without Authorization - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD<:PEER [label = "ATT Read Request", textcolor="#000080", linecolor="#000080"]; - * SD:>PEER [label = "ATT Read Response", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTS_WRITE_REQ_NO_AUTH_MSC GATTS Write Request without Authorization - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD<:PEER [label = "ATT Write Request", textcolor="#000080", linecolor="#000080"]; - * SD:>PEER [label = "ATT Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {WRITE_REQ, data}"]; - * @endmsc - * - * @defgroup BLE_GATTS_WRITE_CMD_NO_AUTH_MSC GATTS Write Command with or without Authorization - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD<:PEER [label = "ATT Write Command", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {WRITE_CMD, data}"]; - * @endmsc - * - * @defgroup BLE_GATTS_READ_REQ_AUTH_MSC GATTS Read Request with Authorization - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * SD<:PEER [label = "ATT Read Request", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {READ, current_value}"]; - * --- [label = " Variant #1 App Authorizes "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(SUCCESS, app_value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD rbox SD [label="Value in ATT Table: app_value"]; - * SD:>PEER [label = "ATT Read Response {app_value}", textcolor="#000080", linecolor="#000080"]; - * --- [label = " Variant #2 App Disallows "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(READ_NOT_PERMITTED)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Error Response", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTS_WRITE_REQ_AUTH_MSC GATTS Write Request with Authorization - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * SD<:PEER [label = "ATT Write Request {peer_data}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, peer_value}"]; - * --- [label = " Variant #1 App Authorizes "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(SUCCESS)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD rbox SD [label="Value in ATT Table: peer_data"]; - * SD:>PEER [label = "ATT Write Response", textcolor="#000080", linecolor="#000080"]; - * --- [label = " Variant #2 App Disallows "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE_NOT_PERMITTED)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Error Response", textcolor="#000080", linecolor="#000080"]; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * @endmsc - * - * @defgroup BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC GATTS Queued Writes: Stack handled, no attributes require authorization - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; - * APP=>SD [label = "sd_ble_user_mem_reply {user_mem_block}"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #1 Attribute Values validation passed "]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; - * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="App parses the memory it provided"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * |||; - * --- [label = " Variant #2 Attribute Values validation failed "]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Error Response {Invalid Value Length / Offset}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * |||; - * --- [label = " Variant #3 Peer cancels operation "]; - * SD<:PEER [label = "ATT Execute Write Request {CANCEL}", textcolor="#000080", linecolor="#000080"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * |||; - * @endmsc - * - * @defgroup BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC GATTS Queued Writes: Stack handled, one or more attributes require authorization - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; - * APP=>SD [label = "sd_ble_user_mem_reply {user_mem_block}"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; - * |||; - * --- [label = " Variant #1 App Authorizes both Prepare Write and Execute Write"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="App parses the memory it provided"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * |||; - * --- [label = " Variant #2 App Disallows Prepare Write and Authorizes Execute Write "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, INSUF_AUTHORIZATION)"]; - * SD:>PEER [label = "ATT Error Response {Insufficient Authorization}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="App parses the memory it provided"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * |||; - * --- [label = " Variant #3 App Authorizes Prepare Write and Disallows Execute Write "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="App parses the memory it provided"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, APP_ERROR_CODE)"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Error Response {APP_ERROR_CODE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * @endmsc - * - * @defgroup BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC GATTS Queued Writes: App handled, no attributes require authorization - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; - * APP=>SD [label = "sd_ble_user_mem_reply {NULL}"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_1, offset_1, peer_value_1}"]; - * APP rbox APP [label="App queues {handle_1, offset_1, peer_value_1}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; - * APP rbox APP [label="App queues {handle_2, offset_2, peer_value_2}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * |||; - * --- [label = " Variant #1 Attribute values in stack memory (VLOC_STACK), attribute values validation passed "]; - * APP=>SD [label = "sd_ble_gatts_value_set {handle_1, offset_1, peer_value_1}"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_ble_gatts_value_set {handle_2, offset_2, peer_value_2}"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #2 Attribute values in user memory (VLOC_USER), attribute values validation passed "]; - * APP rbox APP [label="Application traverses its queue and executes the write operations (memcpy)"]; - * APP rbox APP [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #3 Attribute values validation failed "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, INVALID_OFFSET)"]; - * APP rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Error Response {Invalid Offset}", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC GATTS Queued Writes: App handled, one or more attributes require authorization - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox APP [label="Values in ATT Table (in user memory):\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; - * APP=>SD [label = "sd_ble_user_mem_reply {NULL}"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_1, offset_1, peer_value_1}"]; - * APP rbox APP [label="App queues {handle_1, offset_1, peer_value_1}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; - * |||; - * --- [label = " Variant #1 App Authorizes both Prepare Write and Execute Write"]; - * APP rbox APP [label="App queues {handle_2, offset_2, peer_value_2}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="Application traverses its queue and executes the write operations (memcpy)"]; - * APP rbox APP [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #2 App Disallows Prepare Write and Authorizes Execute Write "]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, INSUF_AUTHORIZATION)"]; - * SD:>PEER [label = "ATT Error Response {Insufficient Authorization}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="Application traverses its queue and executes the write operations (memcpy)"]; - * APP rbox APP [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * |||; - * --- [label = " Variant #3 App Authorizes Prepare Write and Disallows Execute Write "]; - * APP rbox APP [label="App queues {handle_2, offset_2, peer_value_2}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, APP_ERROR_CODE)"]; - * APP rbox APP [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Error Response {APP_ERROR_CODE}", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC GATTS Queued Writes: Prepare Queue Full - * @msc - * hscale = "2"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; - * |||; - * --- [label = " Variant #1 Stack handled "]; - * APP=>SD [label = "sd_ble_user_mem_reply {user_mem_block}"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * SD:>PEER [label = "ATT Error Response {Prepare Queue Full}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; - * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {EXEC_WRITE_REQ_NOW}"]; - * APP rbox APP [label="App parses the memory it provided"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; - * |||; - * --- [label = " Variant #2 App handled "]; - * APP=>SD [label = "sd_ble_user_mem_reply {NULL}"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_1, offset_1, peer_value_1}"]; - * APP rbox APP [label="App queues {handle_1, offset_1, peer_value_1}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, PREPARE_QUEUE_FULL)"]; - * SD:>PEER [label = "ATT Error Response {Prepare Queue Full}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; - * APP=>SD [label = "sd_ble_gatts_value_set {handle_1, offset_1, peer_value_1}"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; - * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; - * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTS_HVI_MSC GATTS Handle Value Indication - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox PEER [label="Indications Enabled in CCCD"]; - * |||; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * APP=>SD [label = "sd_ble_gatts_hvx(INDICATION, app_value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD rbox SD [label="Value in ATT Table: app_value"]; - * SD:>PEER [label = "ATT Handle Value Indication {app_value}", textcolor="#000080", linecolor="#000080"]; - * --- [label = " Variant #1 Peer Confirms "]; - * SD<:PEER [label = "ATT Handle Value Confirmation", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_HVC"]; - * --- [label = " Variant #2 Peer Ignores "]; - * |||; - * ...; - * |||; - * SD box SD [label="Timeout"]; - * APP<<=SD [label = "BLE_GATTS_EVT_TIMEOUT"]; - * @endmsc - * - * @defgroup BLE_GATTS_HVN_MSC GATTS Handle Value Notification - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox PEER [label="Notifications Enabled in CCCD"]; - * |||; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * APP=>SD [label = "sd_ble_gatts_hvx(NOTIFICATION, app_value)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD rbox SD [label="Value in ATT Table: app_value"]; - * SD:>PEER [label = "ATT Handle Value Notification {app_value}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_TX_COMPLETE"]; - * @endmsc - * - * @defgroup BLE_GATTS_HVX_DISABLED_MSC GATTS Handle Value Indication or Notification disabled - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox PEER [label="Indications and Notifications Disabled in CCCD"]; - * |||; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * APP=>SD [label = "sd_ble_gatts_hvx(INDICATION or NOTIFICATION, app_value)"]; - * APP<<SD [label = "NRF_ERROR_INVALID_STATE"]; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * @endmsc - * - * @defgroup BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC GATTS Handle Value Indication or Notification with System Attributes Missing - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP rbox PEER [label="System Attributes Uninitialized"]; - * |||; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * APP=>SD [label = "sd_ble_gatts_hvx(INDICATION or NOTIFICATION, app_value)"]; - * APP<<SD [label = "BLE_ERROR_GATTS_SYS_ATTR_MISSING"]; - * SD rbox SD [label="Value in ATT Table: current_value"]; - * APP=>SD [label = "sd_ble_gatts_sys_attr_set()"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * ...; - * @endmsc - * - * @defgroup BLE_GATTS_SC_MSC GATTS Service Changed - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox SD [label="Entries added to the ATT Table between handles N and M"]; - * |||; - * APP rbox PEER [label="Connection Established with a Bonded Peer"]; - * |||; - * APP=>SD [label = "sd_ble_gatts_service_changed(N, M)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Handle Value Indication {N, M}", textcolor="#000080", linecolor="#000080"]; - * SD<:PEER [label = "ATT Handle Value Confirmation", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_SC_CONFIRM"]; - * |||; - * SD rbox PEER [label="Service Discovery"]; - * @endmsc - * - * @defgroup BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC GATTS System Attributes Handling: Unknown Peer - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established with an Unknown Peer"]; - * |||; - * SD<:PEER [label = "ATT Read Request {sys_attr_handle}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_SYS_ATTR_MISSING"]; - * APP=>SD [label = "sd_ble_gatts_sys_attr_set(NULL)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Response {sys_attr_value}", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * - * @defgroup BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC GATTS System Attributes Handling: Bonded Peer - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP rbox PEER [label="Connection Established with a Bonded Peer"]; - * |||; - * APP rbox PEER [label="ATT Traffic"]; - * |||; - * APP rbox PEER [label="Connection Terminated"]; - * APP<<=SD [label = "BLE_GAP_EVT_DISCONNECTED {reason}"]; - * |||; - * APP=>SD [label = "sd_ble_gatts_sys_attr_get()"]; - * APP<<SD [label = "{NRF_SUCCESS, sys_attr_data}"]; - * APP rbox APP [label="Store System Attributes"]; - * |||; - * APP rbox SD [label="Shut down IC"]; - * |||; - * APP rbox SD [label="Power up IC"]; - * |||; - * APP rbox PEER [label="Connection Established with the Bonded Peer"]; - * SD<:PEER [label = "ATT Read Request {sys_attr_handle}", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_GATTS_EVT_SYS_ATTR_MISSING"]; - * APP rbox APP [label="Load System Attributes"]; - * APP=>SD [label = "sd_ble_gatts_sys_attr_set(sys_attr_data)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "ATT Read Response {sys_attr_value}", textcolor="#000080", linecolor="#000080"]; - * @endmsc - * @} - * - * @addtogroup BLE_GATTS_QUEUED_WRITES_USER_MEM User memory layout for Queued Writes - * @{ - * The following table shows the memory layout used by the SoftDevice to queue a Queued Write operation (Prepare Write ATT packet) in user memory: - * - * <table style="border:1px solid black;border-collapse:collapse;"> - * <caption>Queued Write</caption> - * <tr> - * <th style="border:1px solid black;padding:5px;">Parameter</th> - * <th style="border:1px solid black;padding:5px;">Size (octets)</th> - * <th style="border:1px solid black;padding:5px;">Description</th> - * </tr> - * <tr> - * <td style="border:1px solid black;padding:5px;">Handle</td> - * <td style="border:1px solid black;padding:5px;">2</td> - * <td style="border:1px solid black;padding:5px;">Attribute Handle</td> - * </tr> - * <tr> - * <td style="border:1px solid black;padding:5px;">Offset</td> - * <td style="border:1px solid black;padding:5px;">2</td> - * <td style="border:1px solid black;padding:5px;">Value Offset</td> - * </tr> - * <tr> - * <td style="border:1px solid black;padding:5px;">Length</td> - * <td style="border:1px solid black;padding:5px;">2</td> - * <td style="border:1px solid black;padding:5px;">Value Length</td> - * </tr> - * <tr> - * <td style="border:1px solid black;padding:5px;">Value</td> - * <td style="border:1px solid black;padding:5px;">Length</td> - * <td style="border:1px solid black;padding:5px;">Attribute Value</td> - * </tr> - * </table> - * - * The application can parse the array of Queued Write instances at any time, but it is recommended to do so whenever an Execute Write ATT packet - * has been received over the air. See the GATT Server Queued Writes MSCs for more details. - * The array will be terminated by an Queued Write instance with its handle set to @ref BLE_GATT_HANDLE_INVALID. - * @} - * @} - */ - -/** - * @addtogroup BLE_L2CAP - * @{ - * @defgroup BLE_L2CAP_MSC Message Sequence Charts - * @{ - * @defgroup BLE_L2CAP_API_MSC L2CAP API - * @msc - * hscale = "1.5"; - * APP,SD,PEER; - * |||; - * APP=>SD [label = "sd_ble_l2cap_cid_register(cid)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * |||; - * APP rbox PEER [label="Connection Established"]; - * |||; - * APP=>SD [label = "sd_ble_l2cap_tx(data)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_EVT_TX_COMPLETE"]; - * SD<:PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_L2CAP_EVT_RX"]; - * SD<:PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; - * APP<<=SD [label = "BLE_L2CAP_EVT_RX"]; - * |||; - * APP=>SD [label = "sd_ble_l2cap_tx(data)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * SD:>PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; - * SD=>>APP [label = "BLE_EVT_TX_COMPLETE"]; - * |||; - * APP rbox PEER [label="Terminate Connection"]; - * |||; - * APP=>SD [label = "sd_ble_l2cap_cid_unregister(cid)"]; - * APP<<SD [label = "NRF_SUCCESS"]; - * @endmsc - * @} - * @} - */
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the S110 SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_EVT_GET = BLE_SVC_BASE, /**< Get an event from the pending events queue. */ - SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company id, LMP Version, LMP Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ -}; - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVTS_PTR_ALIGNMENT 4 - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @brief Maximum number of Vendor Specific UUIDs. -*/ -#define BLE_UUID_VS_MAX_COUNT 10 - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ - BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ - BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ -}; - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/** - * @brief TX complete event. - */ -typedef struct -{ - uint8_t count; /**< Number of packets transmitted. */ -} ble_evt_tx_complete_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occured. */ - union - { - ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ - uint16_t evt_len; /**< Length in octets excluding this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - } evt; -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< LMP Version number for BT 4.0 spec is 6 (https://www.bluetooth.org/technical/assignednumbers/link_layer.htm). */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< LMP Sub Version number corresponds to the SoftDevice Config ID. */ -} ble_version_t; - - -/**@brief Get an event from the pending events queue. - * - * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is - * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). - * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine - * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called - * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. - * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into - * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned - * and the application can then call again with a larger buffer size. - * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, - * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. - * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. - * - * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT - * - * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); - - -/**@brief Get the total number of available application transmission buffers in the BLE stack. - * - * @details This call allows the application to obtain the total number of - * transmission buffers available for application data. Please note that - * this does not give the number of free buffers, but rather the total amount of them. - * The application has two options to handle its own application transmission buffers: - * - Use a simple arithmetic calculation: at boot time the application should use this function - * to find out the total amount of buffers available to it and store it in a variable. - * Every time a packet that consumes an application buffer is sent using any of the - * exposed functions in this BLE API, the application should decrement that variable. - * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application - * it should retrieve the count field in such event and add that number to the same - * variable storing the number of available packets. - * This mechanism allows the application to be aware at any time of the number of - * application packets available in the BLE stack's internal buffers, and therefore - * it can know with certainty whether it is possible to send more data or it has to - * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. - * - Choose to simply not keep track of available buffers at all, and instead handle the - * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and - * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. - * - * The API functions that <b>may</b> consume an application buffer depending on - * the parameters supplied to them can be found below: - * - * - @ref sd_ble_gattc_write (write witout response only) - * - @ref sd_ble_gatts_hvx (notifications only) - * - @ref sd_ble_l2cap_tx (all packets) - * - * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon - * successful return. - * - * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); - - -/**@brief Add a Vendor Specific UUID. - * - * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, - * for later use all other modules and APIs. This then allows the application to use the shorter, - * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to - * check for lengths and having split code paths. The way that this is accomplished is by extending the - * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The - * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) - * to the table populated by multiple calls to this function, and the uuid field in the same structure - * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the - * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @return @ref NRF_SUCCESS Successfully encoded into the buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[in] p_version Pointer to ble_version_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Version information stored successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); - -#endif /* BLE_H__ */ - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_err.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x001) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid attribute handle. */ -#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x003) /**< Buffer capacity exceeded. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#endif - - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_gap.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,895 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - -/** - * @brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ - SD_BLE_GAP_ADV_START, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ - SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -}; - - -/** @addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -/** @} */ - - -/** @defgroup BLE_GAP_ROLES GAP Roles - * @note Not explicitly used in peripheral API, but will be relevant for central API. - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/** @} */ - - -/** @defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ -#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -/** @} */ - - -/** @defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ -/** @} */ - - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN 6 - - -/** @defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/** @} */ - - -/** @defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/** @} */ - - -/** @defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ - /** @} */ - - -/** @brief Maximum size of advertising data in octets. */ -#define BLE_GAP_ADV_MAX_SIZE 31 - - -/** @defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * @{ */ -#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -/** @} */ - - -/** @defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/** @} */ - - -/** @defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ -/** @} */ - - -/** @defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/** @} */ - -/** @defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/** @} */ - - -/** @defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/** @} */ - -/** @defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -/** @} */ - -/** @defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/** @} */ - -/** @defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/** @} */ - - -/**@brief GAP device name maximum length. */ -#define BLE_GAP_DEVNAME_MAX_LEN 31 - - -/** @defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/** @brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/** @brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/** @brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/** @brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/** @brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/** @brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/** @} */ - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - -/**@brief Maximum amount of addresses in a whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - -/**@brief Maximum amount of IRKs in a whitelist. - * @note The number of IRKs is limited to 8, even if the hardware supports more. - */ -#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) - -/** @defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ - -/** @} */ - - -/** @} */ - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP link requirements. - * - * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets.*/ -} ble_gap_conn_sec_t; - - - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Whitelist structure. */ -typedef struct -{ - ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ - uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ - ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ - uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ -} ble_gap_whitelist_t; - - -/**@brief GAP advertising parameters.*/ -typedef struct -{ - uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ - ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ - uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ - ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ - uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ - uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ -} ble_gap_adv_params_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ - uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ - uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ - uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ - uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ - uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ -} ble_gap_scan_params_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection required. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< Out Of Band data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint16_t div; /**< Encryption Diversifier. */ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 7; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[8]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Identity Information. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ -} ble_gap_id_info_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - - -/** - * @brief GAP Event IDs. - * Those IDs uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ - BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ - BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ - BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ - BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ - BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ - BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ - BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ - BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ -}; - - -/** @brief Event data for connected event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ - uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_connected_t; - - -/** @brief Event data for disconnected event. */ -typedef struct -{ - uint8_t reason; /**< HCI error code. */ -} ble_gap_evt_disconnected_t; - - -/** @brief Event data for connection parameter update event. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - - -/** @brief Event data for security parameters request event. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/** @brief Event data for securito info request event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint16_t div; /**< Encryption diversifier for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/** @brief Event data for passkey display event. */ -typedef struct -{ - uint8_t passkey[6]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -} ble_gap_evt_passkey_display_t; - - -/** @brief Event data for authentication key request event. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - - -/** @brief Security levels supported. - * @note See Bluetooth Specification Version 4.0 Volume 3, Chapter 10. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -} ble_gap_sec_levels_t; - - -/** @brief Keys that have been exchanged. */ -typedef struct -{ - uint8_t ltk : 1; /**< Long Term Key. */ - uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ - uint8_t irk : 1; /**< Identity Resolving Key. */ - uint8_t address : 1; /**< Public or static random address. */ - uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ -} ble_gap_sec_keys_t; - - -/** @brief Event data for authentication status event. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ - ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ - struct periph_keys_t - { - ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ - } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ - struct central_keys_t - { - ble_gap_irk_t irk; /**< Central's IRK. */ - ble_gap_addr_t id_info; /**< Central's Identity Info. */ - } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ -} ble_gap_evt_auth_status_t; - - -/** @brief Event data for connection security update event. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/** @brief Event data for timeout event. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -} ble_gap_evt_timeout_t; - - -/** @brief Event data for advertisement report event. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -} ble_gap_evt_rssi_changed_t; - - - -/**@brief GAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ - } params; - -} ble_gap_evt_t; - - -/**@brief Set local Bluetooth address. - * - * @param[in] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(ble_gap_addr_t const * const p_addr)); - - -/**@brief Get local Bluetooth address. - * - * @param[out] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); - - -/**@brief Set, clear or update advertisement and scan response data. - * - * @note The format of the advertisement data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertisement data and scan response data. - * - * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding - * length (dlen/srdlen) set to 0. - * - * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. - * - * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. - * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. - * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. - * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. - * - * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @param[in] p_adv_params Pointer to advertising parameters structure. - * - * @return @ref NRF_SUCCESS The BLE stack has started advertising. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. - * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint - * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * - * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a BLE_GAP_EVT_DISCONNECTED event. - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). - * - * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). - * - * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. - * - * @return @ref NRF_SUCCESS Successfully changed the transmit power. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value set successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); - - -/**@brief Set GAP device name. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. - * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS GAP device name retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); - - -/**@brief Initiate GAP Authentication procedure. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. - * - * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. - * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. - * - * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. - * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, - * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout - * - * - * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail - * if the application supplies a different value. - * - * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with an authentication key. - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). - * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @return @ref NRF_SUCCESS Authentication key successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); - - -/**@brief Reply with GAP security information. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. - * - * @return @ref NRF_SUCCESS Successfully accepted security information. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Current connection security successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); - - -/**@brief Stop reporting the received singnal strength. - * - * An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); - -#endif // BLE_GAP_H__ - -/** - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_gatt.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include "ble_types.h" -#include "ble_ranges.h" - - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default MTU size. */ -#define GATT_MTU_SIZE_DEFAULT 23 - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 -/** @} */ - -/** @} */ - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of value permitted. */ - uint8_t read :1; /**< Reading value permitted. */ - uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ - uint8_t write :1; /**< Writing value with Write Request permitted. */ - uint8_t notify :1; /**< Notications of value permitted. */ - uint8_t indicate :1; /**< Indications of value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ -} ble_gatt_char_ext_props_t; - -#endif // BLE_GATT_H__ - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_gattc.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,395 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include "ble_gatt.h" -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ -}; - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) -/** @} */ - -/**@brief Last Attribute Handle. */ -#define BLE_GATTC_HANDLE_END 0xFFFF - -/** @} */ - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see BLE_GATT_WRITE_OPS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t* p_value; /**< Pointer to the value data. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -} ble_gattc_write_params_t; - - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ - BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ -}; - -/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data, variable length. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data, variable length. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). - Please note that this pointer is absolute to the memory provided by the user when retrieving the event, - so it will effectively point to a location inside the handle_value array. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values, variable length. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data Offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data, variable length. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief GATTC event type. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; - - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates a Primary Service discovery, starting from the supplied handle. - * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the - * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @return @ref NRF_SUCCESS Successfully started the Write procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - - -#endif /* BLE_GATTC_H__ */ - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_gatts.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,547 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_l2cap.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "nrf_svc.h" - - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ -}; - - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - - -/** @} */ - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. */ -} ble_gatts_attr_t; - - -/**@brief GATT Attribute Context. */ -typedef struct -{ - ble_uuid_t srvc_uuid; /**< Service UUID. */ - ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - uint16_t srvc_handle; /**< Service Handle. */ - uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ - uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ -} ble_gatts_attr_context_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ - ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ - uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Read Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_read_authorize_params_t; - -/**@brief GATT Write Authorisation parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -} ble_gatts_write_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ - } params; -} ble_gatts_rw_authorize_reply_params_t; - - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ - BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ -}; - - -/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the incoming data. */ - uint8_t data[1]; /**< Incoming data, variable length. */ -} ble_gatts_evt_write_t; - -/**@brief Event structure for authorize read request. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - - -/**@brief GATT Server event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - } params; -} ble_gatts_evt_t; - - -/**@brief Add a service declaration to the local server ATT table. - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the ATT table. - * - * @return @ref NRF_SUCCESS Successfully added a service declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); - - -/**@brief Add an include declaration to the local server ATT table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). - * - * @note The included service must already be present in the ATT table prior to this call. - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added an include declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, - * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a characteristic. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); - - -/**@brief Add a descriptor to the local server ATT table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a descriptor. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); - -/**@brief Set the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to write from. - * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. - * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. - * - * @return @ref NRF_SUCCESS Successfully set the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); - -/**@brief Get the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to read from. - * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. - * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * p_len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in p_data. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from - * the peer. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and - * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. - * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). - * - * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the - * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with - * the contents pointed by it before sending the notification or indication. - * - * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute - * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. - * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, - * or for Read Authorization reply: requested handles not replied with, - * or for Write Authorization reply: handle supplied does not match requested handle. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply to the stack information about persistent system attributes. - * This call is legal in the connected state only, and is usually - * made immediately after a connection is established and the bond identified. - * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the struct. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved data for this bond. - * - * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * - * @return @ref NRF_SUCCESS Successfully set the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored perisistently by the application - * after a connection has been terminated. When a new connection is made to the same bond, the values - * should be restored using @ref sd_ble_gatts_sys_attr_set. - * The data should be read before any new advertising is started, or any new connection established. The connection handle for - * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to - * obtain the length of the data - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. - * - * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); - - -#endif // BLE_GATTS_H__ - -/** - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_hci.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 -/*0x23 LMP Error Transaction Collision*/ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -0x30 Parameter Out Of Mandatory Range -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E - -/** @} */ - - -#endif // BLE_HCI_H__ - -/** @} */
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_l2cap.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_err.h" -#include "nrf_svc.h" - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ - SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ - SD_BLE_L2CAP_TX /**< Transmit a packet. */ -}; - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP - * @{ */ -#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ -/** @} */ - -/**@brief Default L2CAP MTU. */ -#define BLE_L2CAP_MTU_DEF (23) - -/**@brief Invalid Channel Identifier. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Dynamic Channel Identifier base. */ -#define BLE_L2CAP_CID_DYN_BASE (0x0040) - -/**@brief Maximum amount of dynamic CIDs. */ -#define BLE_L2CAP_CID_DYN_MAX (8) - -/** @} */ - -/**@brief Packet header format for L2CAP transmission. */ -typedef struct -{ - uint16_t len; /**< Length of valid info in data member. */ - uint16_t cid; /**< Channel ID on which packet is transmitted. */ -} ble_l2cap_header_t; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ -}; - - -/**@brief L2CAP Received packet event report. */ -typedef struct -{ - ble_l2cap_header_t header; /** L2CAP packet header. */ - uint8_t data[1]; /**< Packet data, variable length. */ -} ble_l2cap_evt_rx_t; - - -/**@brief L2CAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union - { - ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ - } params; -} ble_l2cap_evt_t; - - -/**@brief Register a CID with L2CAP. - * - * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. - * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); - -/**@brief Unregister a CID with L2CAP. - * - * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully unregistered the CID. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. - */ -SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); - -/**@brief Transmit an L2CAP packet. - * - * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. - * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection Handle. - * @param[in] p_header Pointer to a packet header containing length and CID. - * @param[in] p_data Pointer to the data to be transmitted. - * - * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. - * @return @ref NRF_ERROR_NOT_FOUND CID not found. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. - */ -SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); - - -#endif // BLE_L2CAP_H__ - -/** - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_ranges.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC and event number subranges - @{ - - @brief Definition of SVC and event number subranges for each API module. - - @note - SVCs and event numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC and event values are defined in each module's ble_<module>.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#define BLE_SVC_BASE 0x60 -#define BLE_SVC_LAST 0x6B /* Total: 12. */ - -#define BLE_RESERVED_SVC_BASE 0x6C -#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ - -#define BLE_GAP_SVC_BASE 0x70 -#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ - -#define BLE_GATTC_SVC_BASE 0x90 -#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ - -#define BLE_GATTS_SVC_BASE 0xA0 -#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ - -#define BLE_L2CAP_SVC_BASE 0xB0 -#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ - - -#define BLE_EVT_INVALID 0x00 - -#define BLE_EVT_BASE 0x01 -#define BLE_EVT_LAST 0x0F /* Total: 15. */ - -#define BLE_GAP_EVT_BASE 0x10 -#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ - -#define BLE_GATTC_EVT_BASE 0x30 -#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ - -#define BLE_GATTS_EVT_BASE 0x50 -#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ - -#define BLE_L2CAP_EVT_BASE 0x70 -#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ - -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_types.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the S110 SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include <stdint.h> - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - unsigned char uuid128[16]; -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - - - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/nrf_error.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#endif // NRF_ERROR_H__ - -/** - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/nrf_error_sdm.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) - -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/nrf_error_soc.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/nrf_sdm.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -/* Header guard */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf_soc.h" -#include "nrf_error_sdm.h" - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE 0x10 - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_FORWARD_TO_APPLICATION,/**< ::sd_softdevice_forward_to_application */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/**@brief Possible lfclk oscillator sources. */ -enum NRF_CLOCK_LFCLKSRCS -{ - NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ - NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing lfclk oscillator source. */ -typedef uint32_t nrf_clock_lfclksrc_t; - - -/**@brief SoftDevice Assertion Handler type. - * - * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. - * - * @param[in] pc The program counter of the failed assert. - * @param[in] line_number Line number where the assert failed. - * @param[in] file_name File name where the assert failed. - */ -typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to enable the SoftDevice. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available - * - A portion of RAM will be unavailable (see relevant SDS documentation) - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) - * - Interrupts will not arrive from protected peripherals or interrupts - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) - * - Chosen low frequency clock source will be running - * - * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). - * @param assertion_handler Callback for SoftDevice assertions. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Start forwarding interrupts to application. - * - * This function is only intended to be called when a bootloader is enabled is used. - * The bootloader should call this right before it starts the application. - * It is recommended that all interrupt sources are off when this is called, - * or you could end up having interrupts in the application being executed before main() of the application. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_FORWARD_TO_APPLICATION, uint32_t, sd_softdevice_forward_to_application(void)); - -/** @} */ - -#endif // NRF_SDM_H__ - -/** - @} -*/
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/nrf_soc.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,777 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** - @defgroup nrf_soc_api SoC Library API - @{ - - @brief APIs for the SoC library. - -*/ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf51_bitfields.h" -#include "nrf_error_soc.h" - -/** @addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE 0x20 - -/**@brief Guranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_MUTEX_NEW = SOC_SVC_BASE, - SD_MUTEX_ACQUIRE, - SD_MUTEX_RELEASE, - SD_NVIC_ENABLEIRQ, - SD_NVIC_DISABLEIRQ, - SD_NVIC_GETPENDINGIRQ, - SD_NVIC_SETPENDINGIRQ, - SD_NVIC_CLEARPENDINGIRQ, - SD_NVIC_SETPRIORITY, - SD_NVIC_GETPRIORITY, - SD_NVIC_SYSTEMRESET, - SD_NVIC_CRITICAL_REGION_ENTER, - SD_NVIC_CRITICAL_REGION_EXIT, - SD_RAND_APPLICATION_POOL_CAPACITY, - SD_RAND_APPLICATION_BYTES_AVAILABLE, - SD_RAND_APPLICATION_GET_VECTOR, - SD_POWER_MODE_SET, - SD_POWER_SYSTEM_OFF, - SD_POWER_RESET_REASON_GET, - SD_POWER_RESET_REASON_CLR, - SD_POWER_POF_ENABLE, - SD_POWER_POF_THRESHOLD_SET, - SD_POWER_RAMON_SET, - SD_POWER_RAMON_CLR, - SD_POWER_RAMON_GET, - SD_POWER_GPREGRET_SET, - SD_POWER_GPREGRET_CLR, - SD_POWER_GPREGRET_GET, - SD_POWER_DCDC_MODE_SET, - SD_APP_EVT_WAIT, - SD_CLOCK_HFCLK_REQUEST, - SD_CLOCK_HFCLK_RELEASE, - SD_CLOCK_HFCLK_IS_RUNNING, - SD_PPI_CHANNEL_ENABLE_GET, - SD_PPI_CHANNEL_ENABLE_SET, - SD_PPI_CHANNEL_ENABLE_CLR, - SD_PPI_CHANNEL_ASSIGN, - SD_PPI_GROUP_TASK_ENABLE, - SD_PPI_GROUP_TASK_DISABLE, - SD_PPI_GROUP_ASSIGN, - SD_PPI_GROUP_GET, - SD_RADIO_NOTIFICATION_CFG_SET, - SD_ECB_BLOCK_ENCRYPT, - SD_RESERVED1, - SD_RESERVED2, - SD_RESERVED3, - SD_EVT_GET, - SD_TEMP_GET, - SD_FLASH_ERASE_PAGE, - SD_FLASH_WRITE, - SD_FLASH_PROTECT, - SVC_SOC_LAST -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Possible values of ::nrf_app_irq_priority_t. */ -enum NRF_APP_PRIORITIES -{ - NRF_APP_PRIORITY_HIGH = 1, - NRF_APP_PRIORITY_LOW = 3 -}; - -/**@brief Possible values of ::nrf_power_mode_t. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Possible values of ::nrf_power_failure_threshold_t */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ -}; - - -/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ - NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ - NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ -}; - -/**@brief Possible values of ::nrf_radio_notification_distance_t. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Possible values of ::nrf_radio_notification_type_t. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RESERVED1, - NRF_EVT_RESERVED2, - NRF_EVT_RESERVED3, - NRF_EVT_RESERVED4, - NRF_EVT_RESERVED5, - NRF_EVT_NUMBER_OF_EVTS -}; - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief The interrupt priorities available to the application while the softdevice is active. */ -typedef uint8_t nrf_app_irq_priority_t; - -/**@brief Represents a power mode, used in power mode functions */ -typedef uint8_t nrf_power_mode_t; - -/**@brief Represents a power failure threshold value. */ -typedef uint8_t nrf_power_failure_threshold_t; - -/**@brief Represents a DCDC mode value. */ -typedef uint32_t nrf_power_dcdc_mode_t; - -/**@brief Radio notification distances. */ -typedef uint8_t nrf_radio_notification_distance_t; - -/**@brief Radio notification types. */ -typedef uint8_t nrf_radio_notification_type_t; - - -/**@brief AES ECB data structure */ -typedef struct -{ - uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ - uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ - uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ -} nrf_ecb_hal_data_t; - -/** @} */ - -/** @addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - - @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - @param[in] length Number of bytes to take from pool and place in p_buff. - - @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Sets the power-fail threshold value. - * - * @param[in] threshold The power-fail threshold value to use. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); - -/**@brief Sets bits in the NRF_POWER->RAMON register. - * - * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); - -/** @brief Clears bits in the NRF_POWER->RAMON register. - * - * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); - -/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. - * - * @param[out] p_ramon Content of NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); - -/**@brief Set bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); - -/**@brief Clear bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); - -/**@brief Get contents of the NRF_POWER->GPREGRET register. - * - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); - -/**@brief Sets the DCDC mode. - * - * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. - * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When - * the radio transmission is done, the last mode will be used. - * - * @param[in] dcdc_mode The mode of the DCDC. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50us from call to return. - * - * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write - * - * Commands to write a buffer to flash - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] p_dst Pointer to start of flash location to be written. - * @param[in] p_src Pointer to buffer with data to be written - * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. - * - * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. - * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); - - -/**@brief Flash Erase page - * - * Commands to erase a flash page - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] page_number Pagenumber of the page to erase - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_ERASE_PAGE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection registers PROTENSETx - * - * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. - * - * @param[in] protenset0 Value to be written to PROTENSET0 - * @param[in] protenset1 Value to be written to PROTENSET1 - * - * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice - * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); - - -/** @} */ - -#endif // NRF_SOC_H__ - -/** - @} - */
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/nrf_svc.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ - __attribute__((naked)) static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (number) : "r0" \ - ); \ - } -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = number) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION -#endif // NRF_SVC__
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/softdevice_assert.h Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** @brief Utilities for verifying program logic - */ - -#ifndef SOFTDEVICE_ASSERT_H_ -#define SOFTDEVICE_ASSERT_H_ - -#include <stdint.h> - -/** @brief This function handles assertions. - * - * - * @note - * This function is called when an assertion has triggered. - * - * - * @param line_num The line number where the assertion is called - * @param file_name Pointer to the file name - */ -void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); - - -/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ -/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ -/** @brief Check intended for production code - * - * Check passes if "expr" evaluates to true. */ -#define ASSERT(expr) \ -if (expr) \ -{ \ -} \ -else \ -{ \ - assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ - /*lint -unreachable */ \ -} - -#endif /* SOFTDEVICE_ASSERT_H_ */
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_license.txt Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -NORDIC SEMICONDUCTOR ASA SOFTDEVICE LICENSE AGREEMENT - - -License Agreement for the Nordic Semiconductor ASA ("Nordic") -S110 Bluetooth SoftDevice software package ("SoftDevice"). - - -You ("You" "Licensee") must carefully and thoroughly read this License -Agreement ("Agreement"), and accept to adhere to this Agreement before -downloading, installing and/or using any software or content in the -SoftDevice provided herewith. - -YOU ACCEPT THIS LICENSE AGREEMENT BY (A) CLICKING ACCEPT OR AGREE TO -THIS LICENSE AGREEMENT, WHERE THIS OPTION IS MADE AVAILABLE TO YOU; OR -(B) BY ACTUALLY USING THE SOFTDEVICE, IN THIS CASE YOU AGREE THAT THE -USE OF THE SOFTDEVICE CONSTITUTES ACCEPTANCE OF THE LICENSING -AGREEMENT FROM THAT POINT ONWARDS. - -IF YOU DO NOT AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT, THEN -DO NOT DOWNLOAD, INSTALL/COMPLETE INSTALLATION OF, OR IN ANY OTHER WAY -MAKE USE OF THE SOFTDEVICE. - - - -1. Grant of License - -Subject to the terms in this Agreement Nordic grants Licensee a -limited, non-exclusive, non-transferable, non-sub licensable, -revocable license ("License"): (a) to use the SoftDevice solely in -connection with a Nordic integrated circuit, and (b) to distribute the -SoftDevice solely as integrated in Licensee Product. Licensee shall -not use the SoftDevice for any purpose other than specifically -authorized herein. It is a material breach of this agreement to use or -modify the SoftDevice for use on any wireless connectivity integrated -circuit other than a Nordic integrated circuit. - - -2. Title - -Nordic retains full rights, title, and ownership to the SoftDevice and -any and all patents, copyrights, trade secrets, trade names, -trademarks, and other intellectual property rights in and to the -SoftDevice. - - -3. No Modifications or Reverse Engineering - -Licensee shall not, modify, reverse engineer, disassemble, decompile -or otherwise attempt to discover the source code of any non-source -code parts of the SoftDevice including, but not limited to -pre-compiled hex files, binaries and object code. - - -4. Distribution Restrictions - -Except as set forward in Section 1 above, the Licensee may not -disclose or distribute any or all parts of the SoftDevice to any third -party. Licensee agrees to provide reasonable security precautions to -prevent unauthorized access to or use of the SoftDevice as proscribed -herein. Licensee also agrees that use of and access to the SoftDevice -will be strictly limited to the employees and subcontractors of the -Licensee necessary for the performance of development, verification -and production tasks under this Agreement. The Licensee is responsible -for making such employees and subcontractors comply with the -obligations concerning use and non-disclosure of the SoftDevice. - - -6. No Other Rights - -Licensee shall use the SoftDevice only in compliance with this -Agreement and shall refrain from using the SoftDevice in any way that -may be contrary to this Agreement. - - -7. Fees - -Nordic grants the License to the Licensee free of charge provided that -the Licensee undertakes the obligations in the Agreement and warrants -to comply with the Agreement. - - -8. DISCLAIMER OF WARRANTY - -THE SOFTDEVICE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND -EXPRESS OR IMPLIED AND NEITHER NORDIC, ITS LICENSORS OR AFFILIATES NOR -THE COPYRIGHT HOLDERS MAKE ANY REPRESENTATIONS OR WARRANTIES, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR THAT THE -SOFTDEVICE WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, -TRADEMARKS OR OTHER RIGHTS. THERE IS NO WARRANTY BY NORDIC OR BY ANY -OTHER PARTY THAT THE FUNCTIONS CONTAINED IN THE SOFTDEVICE WILL MEET -THE REQUIREMENTS OF LICENSEE OR THAT THE OPERATION OF THE SOFTDEVICE -WILL BE UNINTERRUPTED OR ERROR-FREE. LICENSEE ASSUMES ALL -RESPONSIBILITY AND RISK FOR THE SELECTION OF THE SOFTDEVICE TO ACHIEVE -LICENSEES INTENDED RESULTS AND FOR THE INSTALLATION, USE AND RESULTS -OBTAINED FROM IT. - - -9. No Support - -Nordic is not obligated to furnish or make available to Licensee any -further information, software, technical information, know-how, -show-how, bug-fixes or support. Nordic reserves the right to make -changes to the SoftDevice without further notice. - - -10. Limitation of Liability - -In no event shall Nordic, its employees or suppliers, licensors or -affiliates be liable for any lost profits, revenue, sales, data or -costs of procurement of substitute goods or services, property damage, -personal injury, interruption of business, loss of business -information or for any special, direct, indirect, incidental, -economic, punitive, special or consequential damages, however caused -and whether arising under contract, tort, negligence, or other theory -of liability arising out of the use of or inability to use the -SoftDevice, even if Nordic or its employees or suppliers, licensors or -affiliates are advised of the possibility of such damages. Because -some countries/states/jurisdictions do not allow the exclusion or -limitation of liability, but may allow liability to be limited, in -such cases, Nordic, its employees or licensors or affiliates -liability shall be limited to USD 50. - - -11. Breach of Contract - -Upon a breach of contract by the Licensee, Nordic and its licensor are -entitled to damages in respect of any direct loss which can be -reasonably attributed to the breach by the Licensee. If the Licensee -has acted with gross negligence or willful misconduct, the Licensee -shall cover both direct and indirect costs for Nordic and its -licensors. - - -12. Indemnity - -Licensee undertakes to indemnify, hold harmless and defend Nordic and -its directors, officers, affiliates, shareholders, licensors, -employees and agents from and against any claims or lawsuits, -including attorney's fees, that arise or result of the Licensees -execution of the License and which is not due to causes for which -Nordic is responsible. - - -13. Governing Law - -This Agreement shall be construed according to the laws of Norway, and -hereby submits to the exclusive jurisdiction of the Oslo tingrett. - - -14. Assignment - -Licensee shall not assign this Agreement or any rights or obligations -hereunder without the prior written consent of Nordic. - - -15. Termination - -Without prejudice to any other rights, Nordic may cancel this -Agreement if Licensee does not abide by the terms and conditions of -this Agreement. Upon termination Licensee must promptly cease the use -of the License and destroy all copies of the Licensed Technology and -any other material provided by Nordic or its affiliate, or produced by -the Licensee in connection with the Agreement or the Licensed -Technology. - - -16. Third party beneficiaries - -Nordics licensors are intended third party beneficiaries under this -Agreement. - - -
Binary file targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_migration-document.pdf has changed
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_readme.txt Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -s110_nrf51822_6.0.0 - -This release consists of the following: -- This readme file -- The s110_nrf51822_6.0.0 license -- The s110_nrf51822_6.0.0 softdevice (binary hex file) -- The s110_nrf51822_6.0.0 API (softdevice header files) -- The s110_nrf51822_6.0.0 release notes -- The s110_nrf51822_6.0.0 migration document - - -IMPORTANT NOTE: If you intend to use the softdevice with the nRF51 -SDK only, you do _not_ need the API files. The API header files are -already installed as part of the nRF51 SDK versions 5.0.0 and 5.1.0.
Binary file targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_releasenotes.pdf has changed
--- a/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_softdevice.hex Tue Mar 18 11:00:08 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4835 +0,0 @@ -:020000040000FA -:10000000481C0020992B0100F1160100CF2A0100A5 -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000000D2C010096 -:100030000000000000000000F1160100F1160100B0 -:10004000752C01007B2C0100F1160100F116010056 -:10005000F1160100F1160100F1160100F116010080 -:10006000812C0100F1160100F1160100872C01001E -:10007000F11601008D2C0100B9020000FF81000083 -:10008000F1160100F1160100F1160100F116010050 -:10009000F1160100F1160100F1160100F116010040 -:1000A000932C0100992C0100F1160100F1160100BA -:1000B000F1160100F1160100F1160100F116010020 -:1000C00000F002F812F04FFD0CA030C808382418D8 -:1000D0002D18A246671EAB4654465D46AC4201D180 -:1000E00012F041FD7E460F3E0FCCB646012633424C -:1000F00000D0FB1AA246AB46334318475C2C0100E4 -:100100008C2C0100103A02D378C878C1FAD8520773 -:1001100001D330C830C101D504680C6070470000BD -:100120000023002400250026103A01D378C1FBD813 -:10013000520700D330C100D50B6070471FB5C046D1 -:10014000C04612F093FC04B00FB41FBD826902498F -:100150008161024810447047610100000100000005 -:1001600001B41EB400B50FF067FE01B401988646D5 -:1001700001BC01B01EBD0000F0B4404649465246E5 -:100180005B460FB402A0013001B50648004700BF2E -:1001900001BC86460FBC8046894692469B46F0BC11 -:1001A00070470000C1000000401E00BF00BF00BF3C -:1001B00000BF00BF00BF00BF00BF00BF00BF00BF47 -:1001C00000BFF1D17047000070B505460C461646D9 -:1001D00002E00FCC0FC5103E102EFAD2082E02D32B -:1001E00003CC03C5083E042E07D301CC01C5361F3E -:1001F00003E021782970641C6D1C761EF9D270BD55 -:100200008307FF22DB0E9A408907090E99400028D8 -:100210000BDA0007000F0838830828489B001B18DA -:10022000D86990430843D8617047830824489B00ED -:100230001B181868904308431860704710B50446AF -:1002400000210120FFF7DCFF00211820FFF7D8FF75 -:1002500000210B20FFF7D4FF02211920FFF7D0FF68 -:1002600002210D20FFF7CCFF02210E20FFF7C8FF6F -:1002700002210F20FFF7C4FF0221C81FFFF7C0FFB4 -:1002800003211620FFF7BCFF03211520FFF7B8FF5D -:10029000204600F019F8002010BD49210180704768 -:1002A00010B500F04FF810BD0648704710B500F0CB -:1002B0004AF810BD704770477047000000ED00E03D -:1002C00000E400E003F900C330B50546384C95B0B2 -:1002D00006202070A01CFFF7E0FF5920A0803548C1 -:1002E00061880069344A80B2D269344B120C98425A -:1002F00004D18A4208D032A1B42003E0884203D05E -:100300002FA1B72012F0DDFB334802F057F9044665 -:10031000072000F0D7F92146254800F015FA6D1E98 -:10032000072D0AD8302168460170857001F0CCF99C -:10033000002802D009A800F065FC204601F0BBFAB5 -:1003400015B030BD704710B50C46014660390B2919 -:1003500003D8214601F01CFF06E001466C39032951 -:1003600004D8214601F047FF206010BD01467039D6 -:100370001F2903D8214600F03FF8F5E701469039E0 -:100380000F2903D8214600F0C1F8EDE70146A03956 -:100390000F2903D8214600F029F9E5E70146B039D5 -:1003A0000F2903D8214600F006F9DDE70120DBE73D -:1003B000140000200010001040000010FFFF00009B -:1003C0007372635C636F72655F66756E6374696F89 -:1003D0006E732E63000000006D1C000070477047B4 -:1003E00070477047704770477047704710B50128D5 -:1003F00001D100F0CEF910BD10B57038030012F035 -:1004000065FC150C10141C20232A31363B3F434752 -:100410004E535A626A72797E8300086803F0FDFBCE -:1004200010BD086803F050FC10BD0C790B7B8A6886 -:100430000868214603F06EFC10BD086803F0E8FC74 -:1004400010BD03F0BAF910BD08884A6880B21146A1 -:1004500003F06CFE10BD0A790888114680B203F0E3 -:10046000BCFE10BD087840B203F0C7FE10BD08887E -:1004700080B203F0E3FE10BD086803F0F2FE10BD89 -:10048000086803F00AFF10BD086803F036FF10BDCE -:10049000088982B209C9194603F061FF10BD05C978 -:1004A000114603F0B0FF10BD08884A6880B21146BB -:1004B00003F0CEFF10BD0B7908888A6880B2194618 -:1004C00004F010F810BD0B7908888A6880B21946CC -:1004D00004F0B9F810BD08884B688A6880B21946E4 -:1004E00004F0FAF810BD08884A6880B2114604F09A -:1004F00045F910BD088880B204F05EF910BD088887 -:1005000080B204F07CF910BD012010BD10B5903808 -:10051000030012F0DBFB09060F161D242C363F46A4 -:100520004E0088888A6883B20888194680B204F031 -:1005300030FD10BD08884A6880B2114604F086FD7F -:1005400010BD08884A6880B2114604F0C9FD10BD8C -:1005500008884A6880B2114604F0FFFD10BD088883 -:100560004B688A6880B2194604F030FE10BD0889D5 -:1005700082B2888883B20888194680B204F065FE8A -:1005800010BD08894B6882B20888194680B204F011 -:100590009AFE10BD08884A6880B2114604F0CAFE6F -:1005A00010BD888882B20888114680B204F05EFFD0 -:1005B00010BD012010BD10B5B02805D0B12808D05D -:1005C000B2280BD0012010BD088880B205F042FA95 -:1005D00010BD088880B205F06DFA10BD08884B6820 -:1005E0008A6880B2194605F076FA10BD10B5A038B9 -:1005F000030012F06BFB0B070E172028323C434D13 -:10060000545D65004B6808788A68194606F090FDCD -:1006100010BD88888A6883B20888194680B206F0BF -:100620009CFD10BD08884C68CB688A6880B2214662 -:1006300006F0A3FD10BD08884B688A6880B2194691 -:1006400006F0BDFD10BD8888CB6884B208888A6832 -:1006500080B2214606F0DDFD10BD8888CB6884B2EB -:1006600008888A6880B2214606F0E3FD10BD08883C -:100670004A6880B2114606F00BFE10BD088982B2AE -:10068000888883B20888194680B206F00BFE10BD38 -:1006900008884A6880B2114606F024FE10BD088919 -:1006A0004B6882B20888194680B206F0A1FE10BDE0 -:1006B00008884B688A6880B2194606F05EFF10BD54 -:1006C000012010BD10B507F09BF80FF0CFF907F02F -:1006D00049FD0FF01DFB07F0B3FD07F0D1FC10BD85 -:1006E0001CB50446002069460870204608F020FD2D -:1006F0006946204608F0DEFB002803D1FBA1B120AB -:1007000012F0DFF901A9204608F033FB002803D1DD -:10071000F6A1B62012F0D5F9684600781CBD70B578 -:10072000F74D002428462C7620308471C47112F0D5 -:10073000DBFA284640380470203084738474847651 -:100740002C74AC7070BDEAE710B50C46ED49828898 -:100750008A8042884A800078087008460A38847087 -:1007600008F0DDFAFFF7DBFF204609F01FFDE44A41 -:10077000E0321146383908461446813808F04AFDFF -:100780002146E0480AF0FDFF08F0C9FC12F0ACFA7F -:1007900010BD10B50120FFF721FE10BDF8B509F01E -:1007A0004CF9D84DD64C0A3D022802D0207C0028B6 -:1007B0007CD0207E0026102819D1A078002803D0F4 -:1007C000CAA1D14812F07DF9CD48E838817A89076D -:1007D0000DD50146267160398989E180C17A21727F -:1007E00081896181C089A0810120A0702676C44FD3 -:1007F000203FB87C002859D1C4486946808908F058 -:1008000059FB002805D06946687809784018687057 -:1008100004E0C520B5A1C00012F053F9207C0028E7 -:1008200038D0BA488189FF300930406D80898142D3 -:1008300004D0B548ADA1223012F043F9B348808905 -:1008400008F0DEFB002804D1AF48A8A1283012F040 -:1008500038F908F04CFC00281CD0AC488089FFF720 -:100860003FFF697840186870A5484038416D2031D5 -:100870000A7C012A0DD1A54A3E779289C287487C1D -:1008800020700120B876207E102801D0282800D1C1 -:10089000267626746978002908D09C488289FF3022 -:1008A0000930C28601870120B8746E7009F0BAF869 -:1008B000002805D1207C002802D0A87801F0A2FEF3 -:1008C000F8BDF8B50F460446FFF768FF8C4D403D74 -:1008D00028788B4E002813D0002F10D1307E0028AE -:1008E00004D0FF2081A1BE3012F0EBF82C22A91C0D -:1008F000204611F049FF0E202070002028708FE064 -:100900007F4D203DA87B002818D0002FF7D1307EE6 -:10091000102808D0282806D0002804D0FF2073A172 -:10092000CA3012F0CEF80120E070E87BA070287C7D -:1009300060700F2020700020A87371E00121204614 -:1009400008F00EFC002807D0307C002851D1394631 -:10095000204608F005FCF8BDA97C69480C380090D9 -:1009600068480A38002913D00178052910D2002FD1 -:1009700056D1491C0170002666700D2020700120A0 -:1009800028750622A01C009911F0FEFEAE7447E007 -:100990005C4800210A380170B078002814D0002F7C -:1009A0003ED1307E002803D050A1594812F089F87A -:1009B000002565700120524920700A22091DA01CE3 -:1009C00011F0E2FEB5702BE0394620460AF046FEF3 -:1009D000002825D1A87C002805D0002F20D1494827 -:1009E0000A380178C5E7A87E002802D0307C0028AC -:1009F00001D00020F8BD002F12D1307E002804D095 -:100A00008D203AA1800012F05CF8002666700A2062 -:100A10003B4920700622091FA01C11F0B5FEAE76DE -:100A20000120F8BD10B53648017E002908D1007CB0 -:100A3000012805D001210020FFF743FF002801D045 -:100A4000072010BD012010BD10B5012409F0F8FBEE -:100A50000443FFF7E7FF044308F062FB014621432C -:100A6000084610BDF8B51D4614460E4608F0A1F91B -:100A7000002807D0684608F0A7F9002803D0002C0A -:100A800007D101E00120F8BD992018A1800012F0E3 -:100A900018F808F045F9A04204D21D4813A15830B7 -:100AA00012F00FF8009807F0B9FD3146009807F0F2 -:100AB000C7FDE2B22946009807F07EFF08F096F9DC -:100AC000002804D19D2009A1800011F0FAFF08F050 -:100AD00029FB0E4800244030C17B002902D0C4739A -:100AE00009F080FC0948C480CCE700007372635CA5 -:100AF0006C6C5F6374726C2E73302E6300000000A8 -:100B0000E0020020240000200B06000098010020D5 -:100B10000D02000010B50179002907D001290AD083 -:100B2000F749FE2011F0CDFF002010BD831D428843 -:100B30000488022103E042880488831D01212046A5 -:100B4000FFF790FF10BDF8B51F4615460E46044648 -:100B500008F073FF022803D0EA48007C00281FD069 -:100B6000E9488089208008F04BFA002803D1E44945 -:100B7000E64811F0A6FF0524684608F04CFA002864 -:100B80000ED0009807F094FD3070022809D001289B -:100B900007D008F080FA641E2406240EECD1002051 -:100BA000F8BD3946009807F01FFF2880002804D1BF -:100BB000D648D349123011F084FF08F06CFA0028AF -:100BC00004D1AF20CE49800011F07BFF0120F8BD99 -:100BD00038B50446831D821C6946FFF7B4FF002820 -:100BE0000DD00020607168460078012808D00228E6 -:100BF00006D0FF20C249203011F063FF012038BD2C -:100C00002071FBE700215CE670B5BE4C0546403C18 -:100C10002078002803D1BB48007E002803D0B849C3 -:100C2000BB4811F04EFF287808F093FB28780AF0B3 -:100C3000EEFE00202071012060713921E1702070EA -:100C400070BD70B5AF4D0446403D2878002803D1F3 -:100C5000AC48007E002804D0AD48A949183811F0EE -:100C600030FFA94E2188B089884203D108F0E5FE03 -:100C7000022807D002202871012068713821E9700C -:100C8000287070BD7F2070769F48E1782030C17356 -:100C9000A17881730020EEE710B59A4C403C207893 -:100CA000002807D19748007E002803D108F0C5FE30 -:100CB000032804D161209249C00011F002FF91493C -:100CC00000202031C8712071012060713A21E1704B -:100CD000207010BD70B58B4C0646403C2078002833 -:100CE00007D18848007E002803D108F0A6FE03281B -:100CF00004D186488249783011F0E3FE814D2035D9 -:100D0000E87908280CD2E87910220001001968302F -:100D1000314600F09FFDE879401CE871002000E0BA -:100D200007202071012060713B21E170207070BDAF -:100D3000F8B5744C0546403C2078002803D1714832 -:100D4000007E002804D072486D49443811F0B9FE85 -:100D5000A878002801D0012804D1A888FF21F53106 -:100D6000884204D96A4866493E3811F0AAFE664EA8 -:100D70002988B089884203D108F05FFE022807D095 -:100D800002202071012060713621E1702070F8BDD1 -:100D90005D48002720308772A988B185012131760E -:100DA000A978012900D00021817257484030C07BCA -:100DB000002801D009F016FB2771E3E770B5514C0C -:100DC0000546403C2078002807D14E48007E002888 -:100DD00003D108F032FE002804D04D484849673856 -:100DE00011F06FFE287809F02EFA00202071012002 -:100DF00060713021E170207070BD70B5414C0546C6 -:100E0000403C2078002803D13E48007E002804D0D2 -:100E10003F483B490D3011F054FE287800280BD094 -:100E2000012809D0022807D06878402804D3384820 -:100E30003349143011F045FE284608F0F6FD00282D -:100E400001D0002000E00C202071012060713421CD -:100E5000E170207070BD70B52A4C0546403C20788A -:100E6000002807D12748007E002803D108F0E5FDBF -:100E7000002804D0264822495C3811F022FE297847 -:100E8000002914D00A2912D0142910D01E290ED0FE -:100E900028290CD032290AD04B2908D0642906D041 -:100EA000FF2904D01A481649503811F00AFE284686 -:100EB00009F028FA00202071012060713321E170CF -:100EC000207070BD70B50F4C0546403C207800285E -:100ED00003D10C4A107E002804D00D48084975380B -:100EE00011F0EFFD062229460A4811F04DFC0020C2 -:100EF0002071012060713221E170207070BD00000E -:100F0000EC0A0000E002002098010020A30200008B -:100F1000910500001D00002070B5F84C05462078B2 -:100F2000002804D120464030007E002803D0F44938 -:100F3000F44811F0C6FD00216956042914D0002997 -:100F400012D0081D10D0001D0ED0001D0CD0001DA9 -:100F50000AD0001D08D00A3006D0283104D0A120C4 -:100F6000E749C00011F0ADFDE74829780170012084 -:100F700060713121E1702070C0E710B5DF4C20783E -:100F8000002804D120464030007E002804D067208D -:100F9000DB49000111F095FD07F0C2FEE08007F08B -:100FA00087FF207200202071012060710521E1700F -:100FB000207010BDF8B5D14C07462034A07B2546E3 -:100FC0002035002805D1287E002802D1A8780028E5 -:100FD00004D0CC48CA492A3811F073FD08F02DFD21 -:100FE0001026022822D1C9483988808988421DD11B -:100FF000C249483908460A7F6038807A002A03D0FF -:1010000080070CD40C200CE0800708D40620087759 -:10101000BE484030C07B002801D009F0E3F92E76AD -:101020000020E07326740120A073F8BD0220F8E7C9 -:1010300010B5B24C2078002804D120464030007E04 -:10104000002804D0AF48AE493C3811F03AFD0020EA -:1010500020710E20A0700F20E070FF20A0710020F2 -:10106000C0432081AA480178A1728188A18140886B -:10107000E08101206071207010BD10B59F4C207878 -:10108000002804D120464030007E002804D0DB2018 -:101090009B49800011F015FD0821A01D0EF082FD76 -:1010A00000202071012060712B21E170207010BDA3 -:1010B00070B5924D04462878002804D12846403067 -:1010C000007E002804D0B7208D49C00011F0F9FC43 -:1010D0008E4810222146303800F0BCFB8B4810228D -:1010E000A118203800F0B6FB884830380EF061FEB9 -:1010F0008649102210392C46A81D00F0ABFB0020B9 -:1011000020710E20A0702A20E070012060712070F4 -:10111000F4E6F8B5794C05462034A07B2646203607 -:10112000002802D1307E002804D076487449DC388B -:1011300011F0C7FCA978052912D0132910D0142961 -:101140000ED015290CD01A290AD0292908D03D29FA -:1011500006D03B2904D06B486949D43811F0B1FC62 -:1011600028886C49884204D966486549CB3811F013 -:10117000A8FC08F062FC0C212827022809D163484A -:101180002A888089904215D15C484838027E002A1E -:1011900001D0E17310E0A97841760121017637761C -:1011A0000020E07359484030C07B002804D009F08B -:1011B00019F901E00220E07327740120A073F8BD43 -:1011C00070B54E4C05462078002804D122464032A6 -:1011D000107E002804D083204949C00011F071FC22 -:1011E0004648294660300622054611F0CDFA012016 -:1011F000A8710021217160711721E17020707DE6D6 -:10120000F0B5414F85B0403F3D7A06463B480078F7 -:10121000002804D13846A038007E002803D0384981 -:101220003D4811F04EFC3078002806D0012804D04B -:101230000D203349800111F044FC082D39D2324889 -:1012400020380190C469307800282CD0012804D0BF -:1012500031482B490F3011F034FC29460831012068 -:10126000884004430120A84020430090B179234CDA -:1012700008027279690009191043FF310131888130 -:10128000B01C11F0E2FA717800020843A9000919B4 -:10129000C031C862387A401C387201990098C86120 -:1012A0000020207108E0294608310120884084434D -:1012B000D8E7124807210171012110480B22417122 -:1012C000C270017005B0F0BD10B50C4C207800283C -:1012D00004D120464030007E002804D00E48084942 -:1012E0000E3811F0EEFB11F0FFFC00202071012000 -:1012F00060710A21E170207010BD0000A002002082 -:10130000EC0A000006050000C00300209801002040 -:1013100024000020FF0E00003F03000010B508F07D -:101320000AFF002803D0FC49FC4811F0CAFB07F073 -:10133000F5FE07F0D8FC0AF016FA002804D0F748AA -:10134000F5490E3011F0BDFB07F039FF002804D03D -:10135000F248F149123011F0B4FB11F0C5FCF0482D -:1013600000240470FFF7DBF9EE480121047141719C -:101370000222C2700170BFE770B5EA4D04462878BA -:10138000002804D128464030007E002804D0EF20F9 -:10139000E149800011F095FB20781F2801D8601CDE -:1013A00004D1DE48DC49DE3011F08BFB00202871CF -:1013B0002078611C07F0BCFF012068712021E970D2 -:1013C00028709BE5F8B5D74C054620782646403670 -:1013D00000280CD1307E002809D108F02EFB00280F -:1013E00002D1307C002807D0287800280ED0CB48C6 -:1013F000C949EB3011F065FB2878012806D0002898 -:1014000004D0C648C449F03011F05BFB0120607184 -:1014100028780027C44D01280BD0002008F074FE66 -:10142000002844D00C2020711B20E0700120207087 -:10143000F8BD0C20207107F003FF0028F4D0BA4853 -:1014400002210C300EF037FB002806D00F21A889AE -:10145000090211F013FAA98100E0AF8101220321F2 -:10146000B14807F0E9FAB04808F051F8A88907F048 -:1014700059FC002803D1A849AC4811F022FBA889E7 -:10148000002107F053FE002804D0A848A249001DFF -:1014900011F017FB317F708B08F0D9FE002804D0C3 -:1014A000A2489D49083011F00CFB2771BCE7277159 -:1014B000307C0028B8D1A889FFF712F9B4E770B5DD -:1014C000984D04462878002804D128464030007EF4 -:1014D000002804D0954890493B3811F0F2FA207862 -:1014E0001F2801D8601C04D190488B493A3811F06C -:1014F000E8FA002028712078611C07F02DFF0120F8 -:1015000068711A21E9702870F8E4F8B5854D044631 -:1015100028780C272E464036002806D1307E002839 -:1015200003D108F08AFA032804D16F207A49C00059 -:1015300011F0C7FA6079002801D001282FD1A079D5 -:10154000002801D001282AD1A07B002805D001283D -:1015500003D0022801D0032821D1607B40071ED090 -:10156000618801208003814202D82288824201D909 -:1015700020790CE02079002804D0022805D0032827 -:1015800003D004E0202904D209E0A02A01D20128D6 -:1015900005D12088884207D92079012804D06348E2 -:1015A0005D495F3811F08DFA20887083207930779B -:1015B0006079002802D0012803D00CE05C4A0021A9 -:1015C00005E0584A60329079002804D00121204675 -:1015D00007F03AFE074601202F7168711821E97063 -:1015E0002870F8BD70B54F4C05462078002804D10E -:1015F00020464030007E002804D04C484649B63092 -:1016000011F05FFA08F019FA0C2102280ED14648B1 -:101610002A8883899A4219D10246C032137F002B4F -:1016200004D1807E0E2803D00F2801D0217103E061 -:1016300005201077002020710E20A0702E20E07071 -:101640002888E08001206071207057E40220F2E7D2 -:1016500070B5344C05462078002804D1204640302F -:10166000007E002804D031482B498A3011F029FA35 -:1016700008F0E3F90C2102280ED12B482A8883892F -:101680009A421FD10646C036327F002A04D1807E9E -:101690000E2803D00F2801D0217109E02148102223 -:1016A000A91C1E3811F070F804203077002020713A -:1016B0000E20A0702D20E0702888E080012060714D -:1016C00020701BE40220F2E710B501780B0011F046 -:1016D000FDFA3C90904590906590909090484B908A -:1016E00090905E619090909090904F3590393D90A1 -:1016F00090909041909090909090905390575B90E4 -:101700001F319078686C7074907C90878B84809087 -:10171000801CFFF79DFF6AE0EC0A0000DF0200007A -:10172000C0030020A002002098010020E90300006F -:101730001D000020801CFFF755FF58E0801CFFF7BC -:10174000E4FE54E0801CFFF7BAFE50E0801CFFF777 -:1017500039FE4CE0801CFFF70FFE48E0FFF7DEFD8E -:1017600045E0FFF7B1FD42E0801CFFF749FD3EE098 -:10177000801CFFF725FD3AE0801CFFF7CAFC36E02D -:10178000801CFFF795FC32E0FFF777FC2FE0FFF7B6 -:101790004FFC2CE0801CFFF70DFC28E0FFF7EDFB71 -:1017A00025E0801CFFF7B8FB21E0801CFFF78AFBD7 -:1017B0001DE0801CFFF74FFB19E0801CFFF71DFBAD -:1017C00015E0801CFFF7FAFA11E0801CFFF7B0FA71 -:1017D0000DE0801CFFF77EFA09E0FFF75DFA06E0F6 -:1017E000801CFFF72EFA02E0801CFFF70DFA0120A3 -:1017F00082E5002080E510B51D491E4811F061F911 -:101800007AE570B51D4A012411461B4D4031030095 -:1018100011F05CFA05191C1C04191C00012200219E -:10182000154807F009F91548002148380177417734 -:10183000C03808F068FD002804D00E480C49D330A9 -:1018400011F03FF964E40C74556561E46D200849BA -:101850000001F5E730B5134606E0CC18203CE47FE4 -:10186000D51A44555B1EDBB2002BF6D130BD00000B -:10187000EC0A0000CA05000098010020A002002028 -:1018800010B5030011F022FA070805080B0B0E0E25 -:10189000110003F0FAFF10BD01F0BAFF10BD0BF00C -:1018A0009BFF10BD0DF004FE10BDFF20F8A17D30A0 -:1018B00011F007F910BD7FB5F94AFA4C51689268EA -:1018C0000192009120700823F74A1946F7480EF05C -:1018D00093FB0025F6480EF0ADFB6D1CEDB2072D15 -:1018E000F8D3F1490320803140020BF0C7FF0028F4 -:1018F00003D0E7A1912011F0E4F81E220221ED4867 -:101900000AF077FBEB481E22032110300BF0EBF8B6 -:10191000E8480722342174300AF0C4FAE5484C2123 -:10192000283010F090FFE3496A46743108464C387D -:101930004164FF317B31816401211172039002F017 -:1019400016F902A80CF0CCFA002803D0D0A1A520EB -:1019500011F0B7F8D54802222421A8380AF0A2FADB -:10196000D24802222C215C380AF09CFAD2490B2082 -:101970000DF08AFE002803D0C5A1B22011F0A1F815 -:1019800003F070FF03F076F904F0D6FD6B46CB4A06 -:101990000821CBA002F04BF8002803D0BCA1B9204D -:1019A00011F08FF8012005F0C8F8002803D0B8A185 -:1019B000BB2011F086F87921C900C44810F043FF1C -:1019C000C249B74A0020135C0D18401CC0B2EB702E -:1019D0000428F8D3002060606070A0707FBD70B5EF -:1019E000BB4E0546706A94B00C46401C04D1B06AE8 -:1019F000C0430004000C0BD0306AC007C00F287031 -:101A0000706A10F033FFB06A2071000A607113E051 -:101A10002B206946087009A968460AF089FA00284F -:101A200003D09BA1DF2011F04CF801202870062282 -:101A30000AA9204610F0A8FE2878002815D0607961 -:101A4000C0210843607117206946087000A806226B -:101A50002146023010F098FE09A968460AF068FA9B -:101A6000002816D08AA1F42011E0322069460870BF -:101A700000A806222146023010F086FE09A9684619 -:101A80000AF056FA002804D0FF2081A1013011F09D -:101A900018F814B070BDF0B58D4C0646206895B0AE -:101AA0000D463746401C0837002808D16068401CA6 -:101AB00005D1A068401C02D1E068401C11D020680C -:101AC000314610F0D3FE6068311D10F0CFFEA068E3 -:101AD000394610F0CBFEE06831460C3110F0C6FEFE -:101AE00025E02B206946087009A968460AF020FA0B -:101AF000002804D0FF2066A1203010F0E2FF082269 -:101B00000AA9304610F040FE2B206946087009A94A -:101B100068460AF00DFA002804D0FF205CA12730A7 -:101B200010F0CFFF08220AA9384610F02DFE2069D8 -:101B30002E46401C0836002808D16069401C05D19B -:101B4000A069401C02D1E069401C12D020692946DE -:101B500010F08CFE6069291D10F088FEA0693146E6 -:101B600010F084FEE06929460C3110F07FFE15B0BC -:101B7000F0BD2B246846047009A90AF0D9F90028A1 -:101B800004D0FF2042A1453010F09BFF082209AF8E -:101B90000AA9284610F0F8FD6846047009A90AF061 -:101BA000C7F9002804D0FF2039A14C3010F089FF7C -:101BB0000822391D304610F0E7FDD8E710B50021A6 -:101BC00008460EF0ECFA002101200EF0E8FA0021A0 -:101BD00002200EF0E4FA002103200EF0E0FA0021CA -:101BE00004200EF0DCFA002105200EF0D8FA10BD1A -:101BF00010B5364CA0780A2804D3FF2024A19630D3 -:101C000010F05FFF20786021484300190830002160 -:101C100001704178E722C908C900C91C1140417010 -:101C2000204A0121517010BD70B51E4C607800280B -:101C30000ED0264800250178491CC9B201700A2936 -:101C400000D105708178491C81700EF072FB6570BF -:101C500070BD70B5134C05466068002804D0FF20A5 -:101C60000BA1BF3010F02DFF656070BD70B50D4E3B -:101C7000164DFFF7BDFF7168044600292AD0602287 -:101C8000FEF7A2FAFFF7D0FF00207060F1E7000036 -:101C90007372635C686F73745F636F72652E630049 -:101CA000F82C01002C000020C40300206C1100203F -:101CB00081180000440A0020141000203412000093 -:101CC0006E52463531383232000000004C0C002094 -:101CD000800000102879002852D0FE480AF0F2F85F -:101CE0006060002804D1FF20FB49DD3010F0E9FEE0 -:101CF00060680AF045F9002810D0204601F0A5F8E8 -:101D00006078010707D5C008C000401C60702879C2 -:101D1000401E287126E0EF48616829E0ED486168BF -:101D20000AF0D9F8687900282AD0EA484C380AF035 -:101D3000C9F86060002803D1E749E84810F0C1FE07 -:101D400060680AF021F9002815D0204603F0DCFD78 -:101D50006078010709D5C008C000801C60706879F0 -:101D6000401E6871FFF760FF83E7DA4861684C380E -:101D70000AF0B1F87DE7D74861684C380AF0ABF853 -:101D800070BDF7B505460078002700090C463E46B1 -:101D9000062804D0D148D049223010F092FE287A8B -:101DA00000280ED0012814D0CC48CB49433010F085 -:101DB00088FE0298002C068001D0278066800020D3 -:101DC000FEBD02270926002C0ED0A889A080A87B82 -:101DD00008E003271426002C06D02869E060A88AB2 -:101DE0002082287B2072E4E702980680E7E770B53E -:101DF0000E4600211C4619801546030010F066FFB0 -:101E00000723050B1711231D2300224629463046C0 -:101E100003F046FD70BD22462946304601F09BFA8C -:101E200070BD22462946304604F081FA70BD224634 -:101E30002946304602F052FF70BD22462946304600 -:101E4000FFF79FFF70BD4D20A349C00010F039FE81 -:101E5000032070BD01469F4810B54C380AF03BF88E -:101E60009F494879401CC0B24871012803D19D4860 -:101E7000007800F0C7FB10BDF8B505460720400705 -:101E80000F460A18012189038A4209D2002D02D087 -:101E90002818884204D2E81C80088000A84201D09B -:101EA0001020F8BD8E488178002911D03988009122 -:101EB0004178602251430C18083420783B460007D3 -:101EC000000F00222146FFF792FF060004D015E024 -:101ED000002038800520F8BD002D13D039880098E7 -:101EE000814201D90C260DE020783B460007000F07 -:101EF0002A462146FFF77BFF060005D00C2E01D0B5 -:101F0000002038803046F8BD754D6878401CC0B25E -:101F100068700A2801D100206870A878401EA87057 -:101F200061784807400F022810D00128EAD169489B -:101F3000616809F0D0FF2879401CC0B228710128DF -:101F4000E0D16848007800F05DFBDBE7C806D9D433 -:101F50006068FFF77FFFD5E770B504466248164614 -:101F60000D46814204D15D485B49DB3010F0A9FD8C -:101F7000012E05D059485849EB3010F0A2FD70BD34 -:101F80005848012181706620207000202072A581B0 -:101F9000A17370BD70B516460D46040001D1FFF760 -:101FA00027FE662101700121017229680161A9885B -:101FB00081820673002C01D1FFF736FE70BD072128 -:101FC0004907012241189203914201D31020704722 -:101FD0000721017000207047052210B5920390423E -:101FE0000ED301239B04C21A404B9A4208D3404BA4 -:101FF000984205D2072252078A18DB139A4201D36E -:10200000102010BD0DF079FB10BD052310B59B030A -:1020100099420ED301239B04344CCB1AA34208D31C -:10202000334B994205D2E3020124D318A403A342FF -:1020300001D3102010BD022803D0102801D00920A0 -:1020400010BD0DF080FB0028FAD0052010BD70B542 -:1020500005239B03984212D301239B04234CC31AEC -:10206000A3420CD3224B984209D2E4020D19DB1390 -:102070009D4204D2002A04D014199C4201D310209E -:1020800070BD0DF086FB0028FAD0072070BD10B59A -:1020900004460720400701212018890394B0884294 -:1020A00002D3102014B010BD01F0ADFD002801D006 -:1020B0001120F7E70F2008A9087369460BA809F05B -:1020C00037FF0028EED16846007A207068464089C4 -:1020D00060800FE010110020901C0000FF01000044 -:1020E0004C0C00202C000020FFFF00000000FC1F13 -:1020F0000040002068468089A0800020D2E710B50B -:1021000094B0044601F07FFD002801D01120C9E7FA -:10211000002C01D00720C5E7392168460170002155 -:10212000817009A909F004FF002803D01549164859 -:1021300010F0C7FC0020B5E770B5144C0846A17834 -:10214000002913D000280FD0072252070123851839 -:102150009B039D4203D20568AA189A4201D310201E -:1021600070BD8288002A03D0012903D0082070BDE9 -:10217000092070BD04F042FA0028FAD10021A170B4 -:1021800070BD0000901C0000790300002C000020AE -:1021900010B56038030010F099FD07050A0E131AF8 -:1021A00021252C0005C91146FFF766FE10BD086801 -:1021B000FFF705FF10BD05C91146FFF70DFF10BD64 -:1021C0004B6808788A681946FFF71FFF10BD4B68F7 -:1021D0008A6808681946FFF73AFF10BD0868FFF7DC -:1021E00056FF10BD08884A6880B21146FFF7A4FF69 -:1021F00010BD012010BD10B56C2801D0012010BD0C -:102200000878FFF77CFF10BD10B5EFF31080C4070E -:10221000E40F72B6D6484178491C417040780128D5 -:1022200001D10EF0ABF8002C00D162B610BD70B534 -:10223000CF4CE07800280AD10125E570FFF7E4FFD4 -:102240000EF0A4F8002804D000200EF077F800204B -:1022500070BDC84865714560F9E770B5EFF310804F -:10226000C507ED0F72B6C24C6078002803D1C2A139 -:102270008F2010F026FC6078401E60706078002887 -:1022800001D10EF07FF8002D00D162B670BD10B5FF -:10229000B748C178002904D000214171C170FFF70F -:1022A000DCFF002010BD10B504460EF06FF8B049F9 -:1022B000C978084000D001202060002010BDF8B58A -:1022C0000246AB4C0026A6710820042101251027E8 -:1022D000130010F0FBFC0D080A0C0E101214161E51 -:1022E000262123252800257122E0022001E021710A -:1022F0001EE020711CE027711AE02020F9E701267A -:1023000016E0FFF781FF0EF041F80028FBD002260F -:102310000EE02171A5710BE02771FBE7202000E0A2 -:1023200040202071F6E7FF2093A17E3010F0C9FB1A -:102330000EF038F8002809D00EF03AF8B04205D176 -:1023400030460EF038F80028FAD024E0012080074B -:10235000C5608D4A002151608C4A9661854B0222EE -:102360005A6085608A4803690569DB43DB06DB1731 -:102370005B1C10273D430561834D00E020BF6F6863 -:10238000002FFBD0002B03D1076910239F43076167 -:10239000784882606960A07900280CD00DF0F6FFC3 -:1023A00005460DF053FF7B4A002D02D0A260E0608D -:1023B00001E0E260A060002E01D100F0B1F8F8BDAC -:1023C00010B504460DF0E8FF002805D0684901204B -:1023D000C8704A78521C4A702046FFF770FF10BD43 -:1023E000F8B5694FB8680025012802D1BD600DF02D -:1023F000A5FF7868012800D17D60386801265C4C13 -:10240000012814D13D606079002803D000200DF030 -:1024100095FF65712078002809D00DF0B7FF0028DE -:1024200005D05948C038866300060661A670386931 -:1024300001282CD13D6100F068F801208007466139 -:10244000A079002815D00DF0A1FF00900DF0FEFE40 -:102450000099002901D0E16800E0A168411A022931 -:1024600001DA8A1C13DC0099002901D0E06000E049 -:10247000A060FFF7C9FE0DF089FF002806D0424892 -:10248000C038866300060661A67000E02670F86812 -:10249000012819D100F039F800F037F800F035F8CC -:1024A000A078002804D1FF2033A1053010F009FBEB -:1024B000FD60A5702570FFF7D0FE0DF042FA0028F0 -:1024C00002D03148C038C663F8BD10B5284CE0785A -:1024D000002801D10DF056FF01208107886100F02E -:1024E00014F8A07800280BD0274CE068002803D10E -:1024F0000DF061FF0028F8D10020E06000F005F841 -:1025000000201C49C043886010BD08B550206946B2 -:1025100008806A461088411E11800028F9D108BD44 -:10252000F8B5144819278760174900200860C8606B -:102530000DF02CFFBD0701240D4E002805D01248D8 -:10254000C03884632C61B47000E03470FFF75CFE27 -:10255000084847600D4930798863FFF7D6FFAC61C2 -:10256000FFF7D3FF0849002008616C61F8BD000047 -:1025700034000020000300407372635C736F635F7C -:10258000636C6F636B2E6300000100400005004028 -:1025900000ED00E0FFFFFF7F01203F49400608609B -:1025A0003E4908603E490A68FF231B029A43831292 -:1025B0001A430A60384980390860704710B50246EE -:1025C0000420384904E0C3005B181B79002B0AD0B3 -:1025D0000346401EC0B2002BF5D133A1432010F0BA -:1025E00070FAFF2010BDC300CA50002259184A716A -:1025F0008A7101220A7110BD2A4A0021C000801888 -:102600000171704710B50446042803D326A1522057 -:1026100010F057FA2348E1000C182079012803D064 -:1026200021A1532010F04DFA6079A179401CC0B26D -:10263000814200D060710120174940068031086056 -:1026400010BD70B5164800680004800F022803D042 -:1026500015A1692010F035FA124E194C0325207887 -:10266000C10088190279012A07D1427983799A42F7 -:1026700003D042798271705880472078401CC0B2E4 -:102680002070042801D30020207028466D1EEDB272 -:102690000028E4D170BD000080E100E080E200E0AD -:1026A00018E400E08C1100207372635C736F635F49 -:1026B0007369676E616C6C696E672E630000000061 -:1026C000440000208107C90E002808DA0007000F27 -:1026D000083880082C4A80008018C06904E080080F -:1026E0002A4A800080180068C8400006800F7047A2 -:1026F00010B50D20FFF7E6FFC4B20420C043FFF77A -:10270000E1FFC0B2844203D021A11A2010F0D9F910 -:1027100010BD0121234A48031060234B00221A6098 -:10272000224A5160224A1060224A11601D498039B4 -:102730000860704701211B4A480310601D4A516020 -:10274000194A002111601A490860704710B51649EE -:102750000868012804D00EA1562010F0B2F910BD6F -:10276000154880680022C0B20A600DF041FA10BD21 -:1027700010B50D4801680029FCD0FFF7E7FF0120E4 -:102780000B494003086010BD00ED00E000E400E0EC -:102790007372635C736F635F68616C5F726E672EE8 -:1027A0006300000080E100E000D1004000D3004061 -:1027B00080E200E000D0004000D5004030B40121AC -:1027C000BB48C9020160CD1005604A030260B948E8 -:1027D00003681B021B0A036004680023240A240206 -:1027E0000460B5480468240A24020460B348012444 -:1027F00044608460B24C23606360A360B14B196095 -:102800001D601A60B04B19601A600121016030BC74 -:10281000704710B40121A648CC0204600A0202608D -:102820000B060360A54841608160A549002008604F -:1028300048608860A34804600260036010BC704771 -:102840000121A048C9020160C91001607047002839 -:1028500005D0012805D0022805D19C4870479C4826 -:1028600070479C48704710B59BA18B2010F029F948 -:10287000002010BD70B500219E4C9F4D9F4A904B8B -:10288000002808D001281DD0022822D092A1B32010 -:1028900010F017F970BD01200004A060A86011605D -:1028A0001960974B42109A60964A9060804A0012D5 -:1028B0001060954801608648016094480160944822 -:1028C000017070BD01204004A060A8605160596093 -:1028D00070BD01208004A060A8609160996070BD07 -:1028E000F8B59446834A844D00240127744E00288D -:1028F00008D0012836D0022844D077A1E82010F073 -:10290000E0F8F8BD891E0902090A01200004906060 -:1029100034606860794A1160012B21D000217C4A23 -:102920007C4B517061463D31DC63DF637A4B5C6008 -:1029300002249C6004241C61734B196073490F606E -:10294000604B891519606F4B58605F48016074488F -:102950007249C16086606A49600348601770F8BDBB -:102960000121DCE701205B4E40046E4F012B04D1B6 -:102970003460506068603960F8BD906034606860B1 -:102980003960F8BD0120514E8004674F012BF4D10E -:10299000EEE766484068704770B5494D28680026E4 -:1029A000544C012806D1A068C00303D501200004BF -:1029B000A0602E606868012809D1A068800306D550 -:1029C00001204004A0606E6001200EF05BFAA86850 -:1029D000012809D1A068400306D501208004A06029 -:1029E000AE6002200EF04EFA70BD10B5484908786E -:1029F000002818D00120424AC0039060414A40009C -:102A000090602B4A001210603F4A00201060304A4C -:102A100010603E4A106008704A78002A02D0487060 -:102A20000EF030FA10BD0320FAE7012040490006FD -:102A300008607047012023490006086070470120A4 -:102A40003B4940050860704701201E494005086069 -:102A5000704730490020C8637047410A354AC005B5 -:102A6000C00D5043801C5143400A0818704710B4F1 -:102A7000314C430B63431B0C5C020C602D4C6343D5 -:102A8000C31A2E485C0258432A4B400D4343E31AB5 -:102A90000124DB0324041B191B1613700A68101889 -:102AA000086010BC704710B50EF0B6FA10BD0000FB -:102AB00080E100E008E400E018E400E000B000403D -:102AC00040B1004080E200E000E100E048B1004099 -:102AD0004081004044B100407372635C72656D5F79 -:102AE00068616C5F6576656E745F74696D65722E82 -:102AF0006300000000B3004040B3004040B5004018 -:102B000000F5014000830040408500400082004005 -:102B100045000020C08F004000850040008000403C -:102B200080F5014044B5004048B5004000B5004084 -:102B300000E200E0093D0000378600006F0C010054 -:102B400010B50EF055FA10BD012001218140064A52 -:102B5000116000BF00200549C8630120C8637047A9 -:102B600000200249C863704780E100E0C01F0040B8 -:102B700070B5FF4D044629680300A03110F0A6F897 -:102B800008053E08080E1D2C3242FAA1D22033E07F -:102B9000887F012832D0F7A1D8202DE001F058FE1F -:102BA00005282BD001F054FE062827D001F050FE56 -:102BB000072823D0EFA1DB201EE001F049FE032807 -:102BC0001CD001F045FE062818D001F041FE072870 -:102BD00014D0E8A1E0200FE0887F05280ED0E5A101 -:102BE000E52009E001F034FE052807D001F030FEB1 -:102BF000062803D0DFA1E8200FF063FF2868A0308B -:102C0000847770BDDBA1EC20F6E7D949C1220968C1 -:102C1000525CD206920F05D1A0318A8A824201D13C -:102C2000887D70470020704770B5044611202070E1 -:102C30000021CF4D61702968C0318978002908D002 -:102C400003290ED0042910D0FF20CAA116300FF09E -:102C500038FF20780009012802D92868807E60703A -:102C600070BD0007000F203002E00007000F303079 -:102C70002070EEE730B50388C249C34C8B4202D0C6 -:102C80009A1FA2421ED242888A4202D0951FA542B4 -:102C900018D2934216D883887D24E400A34211D829 -:102CA000C088884205D0B84D04460A3C2D1FAC426E -:102CB00008D2884208D08A4206D05B1C5A43C00022 -:102CC000824201DD072030BD002030BDFFB500226B -:102CD000099B002802D0994205DC5CE0002902D162 -:102CE000002004B0F0BD0920FBE7845C002C12D06A -:102CF00085186F780D2F4CD010DC3B000FF0E6FFED -:102D00000A421B2A2A303032323A3A42835C002B84 -:102D10003FD1521CD2B28A42F8DBE1E7122F31D008 -:102D200004DC0E2F35D00F2F2CD132E0142F11D010 -:102D3000152F27D116E0022CD5D1AB78039C072B99 -:102D4000237001D25B0701D40A20CAE7029B012449 -:102D50001B7814E0E343DB0708E0012C08D011E006 -:102D60000620BEE70F2523072D075B19002BF4D0A3 -:102D70003046B6E7029B1B789C070AD40224234303 -:102D8000029C2370835C521C9A18D2B28A4204DDE2 -:102D9000A9E70B20A5E7192676028A42A5DB9FE763 -:102DA00005E00278401C002A01D0002070470A4646 -:102DB000491E89B2002AF4D10120704730B56C4D0C -:102DC0000021286887B0C943A0308182002484751F -:102DD000214606200DF0E3F9002105200DF0DFF972 -:102DE000002102200DF0DBF90120FFF7C1FE286869 -:102DF000BF210C54C0300470012069460870684639 -:102E00000BF08FF807B030BD10B5594A94B0126876 -:102E1000A032927F042A0AD028236A461370508079 -:102E2000132906D03B2904D0072014B010BD082078 -:102E3000FBE71171104609A909F07AF8040002D1E4 -:102E40000420FFF795FE2046EFE7F0B59BB00400A5 -:102E500003D148A14D480FF034FE72202070606805 -:102E6000002701780826491F414D0B000FF02EFF67 -:102E70000F096ECBFB6E70F9F8AA6E6E6E6EF7F6E8 -:102E80006E002868A030807F032804D0972039A1E5 -:102E900080000FF016FE002108460DF080F96078E2 -:102EA00010233043607028680146C0314A781A43C5 -:102EB0004A7061688A783C2A45D08E880146012292 -:102EC000A0318A756268D2890A836268128A4A834D -:102ED0006268528A8A838E8261680622C979C173C8 -:102EE0006168103008310FF04FFC0520FFF740FEFD -:102EF0002868C2210F54017FFB2211400177B021C5 -:102F000009584A7A920892004A72C782304602F003 -:102F1000B5FC002804D01D4816A122300FF0D1FDC9 -:102F2000304601F0C7FE002804D04F2011A1C00098 -:102F30000FF0C7FD304603F00FFB002806D0134802 -:102F40000CA1273023E10120FFF712FE1BB0F0BDDA -:102F5000878801F07DFC052820D001F079FC062847 -:102F60001CD001F075FC072818D001F071FC0FE0AF -:102F7000480000207372635C6761705F636F726505 -:102F80002E630000FFFF00007B0C000053020000D6 -:102F9000042803D0FB49FC480FF093FD60783043D0 -:102FA00060702868C030417831434170FFF706FFF8 -:102FB000384602F068FC384601F082FE384603F0DD -:102FC00001FBC3E701F044FC052810D001F040FCF0 -:102FD00006280CD001F03CFC072808D001F038FC92 -:102FE000042804D0E848E74913300FF06AFD606810 -:102FF000807902F000FD0028A8D06178314361702B -:103000006168C880A2E701F023FC052810D001F018 -:103010001FFC06280CD001F01BFC072808D001F08B -:1030200017FC042804D05520D649C0000FF049FDF4 -:103030006078304360706068C1882868A030018380 -:10304000616809894183616849898183002102207F -:103050000DF0A5F82868A030C77777E70CE167E1A5 -:103060006FE070E0FFE701F0F3FB052810D001F0FE -:10307000EFFB06280CD001F0EBFB072808D001F08D -:10308000E7FB042804D0C048BE4935300FF019FDD5 -:103090002868BE21095C042993D0807D40063CD578 -:1030A000606802210C30FFF77BFE002835D0606895 -:1030B0000821001DFFF774FE00282ED02868014665 -:1030C00080310A6B527A920708D1C222125C002A20 -:1030D00008D1C28AD30505D5D20703D1C38A4022BD -:1030E0009343C382C38A80229343C3822D236A46BB -:1030F0001370A030808A5080CB698A694869096A58 -:1031000001AC0DC4049109A9684608F011FF00281C -:10311000A3D09D489B49573039E062682868A421B4 -:1031200092890A5261680822091DA6300FF02CFB13 -:1031300010A806742868A630159014A80AF0F1FEAD -:1031400004E70121817101F083FB052810D001F013 -:103150007FFB06280CD001F07BFB072808D001F08C -:1031600077FB042804D0884886497B300FF0A9FCFF -:103170002868BE21095C0429E2D061688A79002AA6 -:1031800002D08978002905D07F487E49E1300FF0D0 -:1031900098FCDBE6617831436170B0210958497AC7 -:1031A0008907890F01294DD1817D09064AD4017F04 -:1031B000490701D5042100E00321C03081702B2094 -:1031C0006946087009A9684608F0B2FE002804D0D4 -:1031D0006D486C4997300FF074FC69462868098D7A -:1031E00001830E2210A90A7468491591027A0A70A7 -:1031F000024609324A600F320A61521D8A6010325B -:10320000CA60133A4A618A328A61921CCA61423AA0 -:103210000A6210324A6210328A62403A8A63D21FCE -:10322000CA63521C54300A64486414A80CF004F8B1 -:10323000022815D0002813D053485249BF300FF050 -:1032400040FC0DE0817D4906017F490701D504213D -:1032500000E00321C0308170002106200CF09FFFA8 -:103260002868C18A0A0602D440229143C1828AB2E8 -:1032700080218A43C28269E62868A030807F0328C3 -:1032800004D041483F49ED300FF01BFC00210846B7 -:103290000CF085FF60781023304360702868014689 -:1032A000C0314A781A434A7061688A783C2A00D152 -:1032B00049E68E8801460122A0318A756268D2896A -:1032C0000A836268128A4A836268528A8A838E827B -:1032D00061680622C979C1736168103008310FF046 -:1032E00053FA0520FFF744FC2868C2210F54017FE0 -:1032F000FB2211400177C782304602F0BFFA002856 -:1033000004D0E3201F4980000FF0DBFB304601F0C2 -:10331000D1FC002803D01B491D480FF0D2FB3046DA -:1033200003F01AF90028A6D019481649801C2EE788 -:1033300060783043607009E600290BD0888015481A -:103340000068A030028BCA80028B0A81428B4A81BE -:10335000808B88817047F7B5064600780C460027B9 -:10336000010982B03D4601296FD00A4800680090EB -:10337000C03002296AD0072910D00A2967D0014934 -:103380000548DAE1742F0000860200000C120020CC -:103390008F030000480000201105000071680A78C2 -:1033A000521F13000FF092FC0F09B054B0B02F5B06 -:1033B0005B47B0B0B0B0656FB0008A783C2A1BD0D4 -:1033C00010271625002C7DD08888A0807068A21D4B -:1033D000C08920827068C089E0817068008A60823C -:1033E0007068408AA082716808460831C07901F08F -:1033F00034FA0020607375E019270725002CE2D00D -:103400000021A17171E011270725002CDBD08988EC -:103410000091A1807168F7228979A17141781140EA -:103420004170009802F030FA009801F04DFC0098CD -:1034300003F0D6F8ACE101270925002CC3D0888819 -:10344000A080706880792072A2E160E09DE178E060 -:10345000888812270E252146FFF76EFF98E118276E -:103460000825002CAFD08888A080A01DFFF7DCFBCA -:103470008EE11A270725002CA5D04888A080706807 -:103480000079A07184E18A783C2A32D01027162571 -:10349000002C98D08888A0807068C08920827068CD -:1034A000C089E0817068008A60827068408AA0826A -:1034B0007168607B497D40084000C907C90F084317 -:1034C000607300E036E17168C007497DC00F4908AC -:1034D0004900084360737168A21D08460831C0792D -:1034E00001F0BBF9FB480068C0304178EF22114081 -:1034F00031E119270725002C88D00021A1714278DD -:10350000EF210A40427043E1F349F44815E1307A73 -:10351000012803D0F148F04917300EE112270E259B -:1035200070892146FFF708FF002C87D0707840078C -:10353000400F032888D1E7480068C0304178FB225B -:10354000D5E7E4490968A031002C01D08A8AA2801D -:10355000327A921E13000FF0B9FB073B4651EEDBA7 -:103560006B05EE0013270C25002C85D0F1688978B7 -:103570008907890F0129217A27D04908490021723A -:10358000FD221140F268E32392785207D20F5200D5 -:10359000114321720022E2801940F3681B785B0717 -:1035A000DB0E19432172DF231940F3685B78DB07D8 -:1035B0009B0E194321726272F1680122C978A172CF -:1035C00001781143F722114016E001221143D6E79A -:1035D00015270C25002C8FD0F06806220068A11D4D -:1035E0000EF032F8D4E016270725002C84D0317B6A -:1035F000A1710178082219E00170C9E01427122591 -:10360000002C92D000980099C07BA21D103101F0CF -:1036100024F9B089E081207C01210843F921084088 -:103620002074AC480068C030017802221143E3E7FF -:1036300017273825002C7DD03221A01D0FF001F96D -:103640000020A071207A03210843A24A2072116849 -:10365000FB260B7F30405B07DB0F9B00184320727B -:10366000B0204058407A800751D0A07A8A7D400827 -:10367000D2074000D20F1043FD221040A0728B7D74 -:1036800030409B07DB0F9B00184308231843EF23B0 -:103690001840A0728A7DE07AD206D20F30409200A4 -:1036A0001043E072F72210408A7DD206D20FD2007A -:1036B0001043E072088BA0812046102264310E3046 -:1036C0000FF062F88349A07F0968C0078A7EC00FA7 -:1036D00052001043A0770A7F400852074000D20FE3 -:1036E0001043A077084644304DC820344DC4303CC8 -:1036F0003D20405C224630323E3101F0AEF8754844 -:1037000000688030006B417A8908890041723FE08F -:10371000327B022A14D017273825002C2ED0012AFC -:103720001BD0032A1BD0042A1CD0052A1AD06A49B0 -:103730006A4801E022E024E0B1300FF0C2F927E04E -:1037400019270725002C19D0898AA1800121A17190 -:1037500041784908490041701AE0012000E0022048 -:10376000A07106E0707B0007000F8030A071052A71 -:1037700002D00020E0710BE00120FBE704980580F7 -:103780000CE09F205449C000D7E7317A002908D0C7 -:103790000498002C058001D027806580002005B0AA -:1037A000F0BD19270725002CE8D00021C943A180CE -:1037B0000021A1714178FD2299E600B595B001F094 -:1037C00047F8022803D001F043F8032819D11B2140 -:1037D00008A801730021817369460BA808F0A8FBB3 -:1037E000002804D1684640781B2802D0032015B079 -:1037F00000BD002108460CF0D2FC68468078002805 -:1038000001D00820F3E70120FFF7B2F90020EEE72E -:1038100070B500252F4C002807D0022817D0A9200A -:103820002D49C0000FF04DF970BDFFF7C6FF00280D -:10383000FAD1FEF7DDF9222101700572FEF7F4F9E5 -:103840002068C030417802221143417070BDFEF7FC -:10385000CFF912210170012101722168A0318A8AF9 -:103860004281CD77FEF7E0F92068C030417804222C -:10387000EAE770B50D46040004D155201649000151 -:103880000FF01FF92078012804D0134914480FF0D5 -:1038900018F970BDA18813480E4E814209D1E28803 -:1038A000824206D130681321A030808AFFF7ACFA3B -:1038B00070BD814202D1E088002815D01220287006 -:1038C000687808210843687007CC083507C50021CF -:1038D00011E0000048000020742F00003D040000AB -:1038E0006E050000FFFF0000002278231146022031 -:1038F0000CF0B3FB02213068A030C17770BDF748EF -:103900000068C0308078704738B5F44C05460178BF -:1039100020680B00A0300FF0D9F909863506067132 -:1039200013365A758600807F052803D0EC49ED4890 -:103930000FF0C7F820680422017F114301775DE092 -:10394000A98800291ED0808AE74988421AD0A86831 -:10395000002804D1E348E2490F300FF0B2F8A8681C -:1039600006220A38A86000902068AB88A030808AC0 -:10397000042101F0B7FE002804D0DA48D8491430F9 -:103980000FF09FF838BD2979807F02290BD00428D9 -:10399000F8D0284600F072FF20681321A030808AFA -:1039A000FFF732FA38BD062804D0CE48CC491E3085 -:1039B0000FF087F8284600F061FF20680122C03030 -:1039C0004178114341700520FFF7D2F838BD00F06F -:1039D0003FFF052808D000F03BFF042804D0C14871 -:1039E000BF493C300FF06DF80ECDC0480361C26096 -:1039F0008160A2210170FEF72CF938BD284600F045 -:103A00003DFF38BD00F024FF052808D000F020FF5E -:103A1000062804D0B348B2494D300FF052F80720C1 -:103A2000FFF7A6F8EAE7AF48AD495630A8E7FFB57B -:103A300093B00124684603218470C9021D460180A9 -:103A400009F063FF00226946012003F027F80646CB -:103A500009F05FFF002E5CD1684615218470490291 -:103A6000018000271C2101A808970EF0ECFE012020 -:103A70000146103108A801700020014608A84170D5 -:103A80008178F9200140891C214308A8817068468B -:103A9000017902263143017114998185C7851F215F -:103AA000018608A80A9013980D906846099009F0BD -:103AB0002CFF0EAA09A901A802F0D4FD074609F0BF -:103AC00028FF002F02D0384617B0F0BD834F68465C -:103AD0003968008F4880684684708549018008A84D -:103AE0008078F9210840801C4108490008A88170AD -:103AF00068468685068615A80D9009F006FF0EAA71 -:103B000009A901A802F0AEFD064609F002FF002E49 -:103B100001D03046D8E768463968008F88807449FC -:103B200068468470C91C0180298810A801806988B2 -:103B30004180A9888180E988C18008216846818503 -:103B4000018610A80D9009F0E0FE0EAA09A901A8AF -:103B500002F088FD044609F0DCFE002C01D020466E -:103B6000B2E768463968008FC8800020ACE770B5BE -:103B700004465E48C421A8300EF065FE5B48574DF0 -:103B8000A83000212860C943A030818200268675B4 -:103B90000120FEF7EDFF2868BF210E5401460931D0 -:103BA0000830FDF71CFF296808462D311D30FDF750 -:103BB00072FF002C26D02868B0210C501E21A18154 -:103BC000217A8F2211401031217201461831216172 -:103BD00009396161491CA1610839E161491C21620F -:103BE0009B31616287392160103161601339E16274 -:103BF000091F21637E3121643039616310318430C3 -:103C0000A163E06370BD35480068A030807F042860 -:103C100001D0002070470120704730B504460520D0 -:103C2000800395B0844208D3012080043149201AD2 -:103C3000884202D33048844202D3102015B030BDF0 -:103C400026490868A030807F012801D00820F5E7C8 -:103C5000FFF7D9FF002801D01120EFE70D68012000 -:103C600028722278002A08D024491720012A0AD075 -:103C7000022A1FD0032A25D121E03220694608708C -:103C80000020287205E0A2799209032A1AD1694618 -:103C9000087000A80622611C02300EF075FD28464F -:103CA0000622611C09300EF06FFD09A9684608F074 -:103CB0003FF9C3E7A2799209012A03D1E7E7A27984 -:103CC0009209E4D00846B9E707214907012210B557 -:103CD00041189203914213D3102010BD48000020D8 -:103CE000742F000085050000FFFF0000AC110020CC -:103CF000012A00000000FC1F0040002002320000EA -:103D0000F949024609680B7A0931184600F0A5FD09 -:103D10000020E2E7FFB599B005460020694608712A -:103D2000087208A9087408751E461446052001216A -:103D300080038904ED4AEE4B002D06D085420DD359 -:103D40006F1A97420AD39D4208D2002C09D08442B0 -:103D500004D3601A904201D39C4202D310201DB0BC -:103D6000F0BD2846204318D01F270CAB01AA0097AE -:103D700028461A99FEF7AAFF0028F0D10DAB02AA37 -:103D8000314620460097FEF7A1FF0028E7D168469C -:103D9000007AC10703D00A20E1E70720DFE78007A8 -:103DA00005D568460079800701D50B20D7E7FFF7D6 -:103DB0002AFF002801D01120D1E703AF002D0FD03A -:103DC0001A20694608731A9888732946F81C1A9AAB -:103DD0000EF0DAFC0EA903A808F0AAF80028BED15C -:103DE000002C0ED02021684601738673324621468E -:103DF000F81C0EF0C9FC0EA903A808F099F80028D9 -:103E0000ADD1B94908A80968007C08700020A6E770 -:103E1000F0B5044695B0002014900520800384423C -:103E200075D301208004B14F201AB8426FD3B04837 -:103E300084426CD2207801280CD105216068890366 -:103E4000884264D301218904411AB9425FD3A84949 -:103E500088425CD200F0FCFC022809D000F0F8FC9B -:103E6000032805D0A048BE210068095C012902D0C2 -:103E7000082015B0F0BDC121095CCA06920F03D11C -:103E80008A0701D4490701D51120F2E721780129D9 -:103E900015D0228A974D1346203BAB4272D202299D -:103EA00001D0032901D1A02A6CD3012907D00278BF -:103EB000D20704D0628A002A64D0B42A62D80029CA -:103EC00006D0012908D0022904D003295AD110E0D4 -:103ED000002512E0022510E061680125097800291B -:103EE0000BD0012907D0022905D0032903D082482D -:103EF000BFE7032501E001211491217A002907D0B1 -:103F0000012907D0022907D003293BD106E037E079 -:103F1000002604E0012602E0022600E00326002D30 -:103F200001D0022D3FD1002E3DD0E168002929D0DB -:103F30000A79002A27D0082A24D80B7B9C46082B14 -:103F400020D8002A0CD005230A689B039A4217D375 -:103F500001239B04D31ABB4212D3654B9A420FD262 -:103F60006246002A13D0896805229203914207D342 -:103F7000012292048A1ABA4202D35D4A914206D3C0 -:103F8000102076E75EE00B7B002B5BD0D5E7017855 -:103F9000890702D05848401E6BE7022D03D1022E3C -:103FA00050D0032E4ED0182269460A70228A4A80C9 -:103FB000228A8A808D71007A0127002802D0012888 -:103FC0007ED102E00020C87100E0CF711498087221 -:103FD000217802A80130012922D006210EF031FCFF -:103FE00007216846C173067409A907F0A1FF0028DC -:103FF000C7D10A206946087009A9684607F098FFEA -:104000000028BED13A206946087009A9684607F021 -:104010008FFF0028B5D1002D08D0022D06D04AE030 -:1040200061680622491C0EF0AFFBD9E7002E42D092 -:10403000002623E00168B00009580978002903D060 -:10404000012905D0072014E700216A46917001E09C -:1040500069468F70E16806220968095800A8491C62 -:1040600003300EF091FB0B206946087009A96846E1 -:1040700007F05EFF002884D1761CF6B2E068017973 -:10408000B142D7D8002612E08068B100415800A89C -:10409000102202300EF078FB3B206946087009A917 -:1040A000684607F045FF0028CDD1761CF6B2E068DF -:1040B000017BB142E8D81B2168460170877000E09F -:1040C0002EE009A907F034FF0028BCD108A84079E8 -:1040D0001B2825D1002D15D0012D0FD0022D21D068 -:1040E000032D12D11EE00000480000200000FC1F3C -:1040F00000400020E13F0000023200000320FEF7F4 -:1041000037FD11E00320FEF733FD608A00280BD055 -:1041100000228300114610460BF09FFF002803D0B9 -:104120000320A6E60220EEE70020A2E670B586B0E6 -:104130000C0006460CD00520800384424BD301209E -:104140008004FD49201A884245D3FC48844242D26B -:10415000FB4DBF212868095C022903D0C03040789C -:10416000400702D5112006B070BD002C04D02046B7 -:10417000FEF780FD0028F6D13046FEF746FD012807 -:1041800003D0022823D0EF48EDE721001BD10820FF -:1041900069468882286801ABC08805AA002103F01F -:1041A00048F80028DFD16846808A082801D003201B -:1041B000D9E7684681888181C188C18101890182EE -:1041C0004189418203A9304601F0E5FBCBE7002C91 -:1041D00001D00620C7E71020C5E770B50C4605469C -:1041E000FEF713FD012803D0022801D0D54870BD89 -:1041F00021462846FEF708FE70BD00B50146143082 -:1042000095B0192801D2880707D008461E3004D07F -:104210000A3002D0072015B000BDFFF7F4FC0028DB -:1042200001D01120F7E7C648312200684170684686 -:104230000270817009A907F07BFEECE701B582B03E -:10424000022069460880BE4802AB00686A46808842 -:10425000002102F073FE69460988022900D003207C -:104260000EBD38B502216A46118007214907012297 -:1042700041189203914201D3102038BDB049034642 -:1042800009686A468C880021204602F0D2FF694600 -:1042900009880229F1D0032038BD3EB50446082024 -:1042A0006946088005208003844208D301208004E9 -:1042B000A149201A884202D3A048844201D3102089 -:1042C0003EBD2046FEF7D6FC0028F9D1208869467D -:1042D00088806088C880A0880881E08848819848E4 -:1042E00001AB00686A46C088002102F027FE6946DB -:1042F00009880829E4D003203EBD1FB504460820E4 -:104300006946888105208003844208D30120800407 -:104310008949201A884202D38848844202D3102057 -:1043200004B0DAE486486B46006803AAC08800211E -:1043300002F07FFF0028F3D169468989082901D05E -:104340000320EDE769460988218069464988618034 -:1043500069468988A1806946C988E180E0E7FEB5A1 -:1043600005460520800317460E46814208D30121E9 -:104370008904714A731A934202D3704B9E4201D34F -:104380001020FEBD1F2F01D90C20FEBD6C4C8542B4 -:104390002AD3681A904227D39D4225D2206801A9CA -:1043A000408802F07DFD0028EFD1287869464871E9 -:1043B000206801A9408802F056FD0028E5D1694631 -:1043C0000090087802210843694608704979090776 -:1043D00003D0082108436946087020686946408870 -:1043E00002F0EBFC0028D0D169460F8120683346EB -:1043F000408802AA002102F0A1FD69460989B9425C -:10440000C3D00320FEBD38B50C4607210122490761 -:104410009203002802D04318934202D261189142BD -:1044200001D3102038BD21886A461180002801D0B0 -:1044300000290BD04249034609684D8800212846CF -:1044400002F0F7FE69460988218038BD0C2038BD8E -:1044500010B50C460521890386B08C4208D3012192 -:104460008904354A611A914202D334498C4202D3FD -:10447000102006B031E432490968A031897F05294E -:1044800001D00820F5E7FEF7C0FB012803D0022881 -:1044900026D02C48EDE720881E2801D20720E8E727 -:1044A0000620FEF765FB052168460170007981084A -:1044B000A0788900C007C00F014368460171FB2046 -:1044C0000140A0788007C00F800001436846017159 -:1044D0002188C18009F025FD0028CAD00320C8E743 -:1044E0000620C6E770B586B014460D46FEF78DFB74 -:1044F000012803D0022801D0124834E6104EC02112 -:104500003068095CC90706D0BE21095C042902D0C5 -:10451000002D02D05AE0082025E6052189038C42AF -:1045200008D301218904044A611A914202D3034944 -:104530008C4209D3102016E60000FC1F004000202A -:104540004800002001300000A178C906490F042965 -:104550000CD8E178072909D3102907D822798A4293 -:1045600004D3102A02D822881E2A01D00720FAE597 -:104570008030026BF7239172026B2179D172026B4A -:10458000117A1940A3789B06DB0FDB0019431172E7 -:10459000026B21889181026BA378517ADB0789082D -:1045A0008900DB0F19435172FB231940A378026B7A -:1045B0009B07DB0F9B0019435172006BA278017AB5 -:1045C000D206C908C900520F114301720B20694677 -:1045D0000870852D25D008DC002D1AD0812D1AD029 -:1045E000822D1AD0832D08D119E0862D1BD0882D5D -:1045F0001BD0892D1BD08A2D1BD00B2008710520C4 -:10460000FEF7B6FA684609F08CFC002813D00320A8 -:10461000A9E50020F2E70120F0E70220EEE7032001 -:10462000ECE70520EAE70620E8E70820E6E70920AE -:10463000E4E70A20E2E73068C03001784908490021 -:10464000017000208FE570B5924E0D46316886B03E -:10465000C03109781446090701D4082083E5FEF724 -:10466000D4FA012803D0022801D08B487BE5002D25 -:1046700013D005208003844208D301208004874999 -:10468000201A884202D38648844201D310206AE56A -:10469000012D0BD0022D02D106E0002C01D0072005 -:1046A00061E50020029005E0022000E0012069465B -:1046B00008710294032069460870684609F031FCCD -:1046C000002801D003204EE53068F722C030017881 -:1046D00011400170002046E570B594B014460E46B6 -:1046E000FEF793FA012804D0022802D06A4814B0D9 -:1046F00070BD684D2868C0300078800701D408205C -:10470000F5E7002C01D00720F1E7FFF77CFA00283D -:1047100001D01120EBE7002E1DD02D21684601703D -:104720002C68B420015B684641801022B11C01A8AE -:104730000EF02AF8207FFB210840B17CC907490F01 -:1047400008432077B07CFF214008A076E08A8231C0 -:104750000843E08207E02E21684601702868A030F7 -:10476000818A6846418009A9684607F0E1FB29680B -:10477000FD23C0310A781A400A70B8E710B50C461C -:10478000FEF743FA012803D0022801D0424810BDA9 -:1047900005208003844208D3012080043F49201A69 -:1047A000884202D33E48844201D3102010BD2046E7 -:1047B000FEF73AFA002010BD10B594B00446FEF79B -:1047C00024FA012804D0022802D0334814B010BDC6 -:1047D00030480068A030807F04280ED03820694619 -:1047E00008704C8001200871487109A9684607F0DB -:1047F0009FFB0028EAD00B20E8E70020E6E710B591 -:1048000094B00446FEF701FA012803D0022801D033 -:104810002148DBE71F480068A030807F04280BD0C8 -:104820003820694608704C8000200871487109A939 -:10483000684607F07DFBC9E70020C7E71548006818 -:10484000A030807F052801D30120704700207047E9 -:1048500010480068A030807F704708B513460028D4 -:1048600006D010A00068009048796A468009105C64 -:1048700018700622581C0DF087FF08BD10B50446BD -:10488000FDF7B6F9A22101700ECC08300EC0FDF77D -:10489000CBF910BD48000020013000000000FC1FD3 -:1048A000004000200302FF01FFB581B001980E46D1 -:1048B000C078174610360E37022809D0032840D09A -:1048C00005287DD0F2A1F7480EF0FBF805B0F0BD49 -:1048D000CC890A2060430E30188031230A98002AC0 -:1048E0000380F3D04868008890800020D080108139 -:1048F000097B9481891FCDB21AE0308871683880B5 -:1049000048780A7800021043F880C8788A78000254 -:1049100010433881BA1C091D28460AF014FF002DE7 -:1049200001D0002802D000203871788008360A377C -:104930002046641EA4B20028DFD101990020C8706F -:10494000C4E7CC890A2060430E30188032230A98CD -:10495000002A0380BAD04868002500889080D5805E -:104960001581087B401FC0B20090948142E07168BD -:1049700032880878FA803A79C30752085200DB0F70 -:104980001A43FD231A408307DB0F5B001A43FB2306 -:104990001A404307DB0F9B001A43F7231A40030713 -:1049A000DB0FDB001A43EF231A40C306DB0F1B01AA -:1049B0001A43DF231A408306DB0F5B011A4300E032 -:1049C00020E0BF231A404306DB0F9B011A433A71D4 -:1049D000C00978718A784B781002184338813A46BA -:1049E000C91C00980AF0AFFE002801D0BD703D80C0 -:1049F00008360A372046641EA4B20028B7D10198B1 -:104A0000C57063E7087BCC89801E85B228460830D4 -:104A100060431030188034230A98002A03808FD016 -:104A200048681746008890800020D08010819481CB -:104A30001037E000D581C0190CE03088388000982C -:104A400078602A46716800980DF09EFE009808363E -:104A50000837401900902046641EA4B20028ECD10B -:104A60006BE7FFB50546C07881B00C460A9E03008F -:104A70000EF02CF90BA3071733414F6D8F9D9D9DB1 -:104A8000A300207B1746082806D0032804D08548B9 -:104A90007FA153300EF015F804990E2008803020C5 -:104AA0000CE0207B1746042804D07E4878A17030A3 -:104AB0000EF007F804990E20088031203080002F76 -:104AC00044D060680088B880607AFF300130F88098 -:104AD000E08938810020B88137E0207B1746042820 -:104AE00004D070486AA18C300DF0EBFF04990E20C1 -:104AF00008803220E2E7207B1746022804D069486C -:104B000063A1A8300DF0DDFF04990E20088033204A -:104B1000D4E7207B1746042804D062485CA1C33048 -:104B20000DF0CFFF04981021018034203080002F39 -:104B30000CD060680088B880607AFF300130F8805F -:104B4000E08938810020B881F881E870BEE6207BDA -:104B50001746052806D0062804D052484CA1E0305C -:104B60000DF0AFFF04981221018035203080002F16 -:104B7000ECD060680088B880607AFF300130F8803F -:104B8000E0893881E089B88100203882A988F981DC -:104B9000DBE7207B1746072804D042483CA1F730CA -:104BA0000DF08FFF04990E200880362086E70096CE -:104BB0002846049B00F02BFD88E635A13A480DF00D -:104BC00080FF83E670B5054600780C460826030092 -:104BD0000EF07CF8124C3434241C380A0A0A0A0AF3 -:104BE0000A0A0A0A0A0A0A4C6878002804D02E48E1 -:104BF00027A12C300DF065FF002C03D12A4824A1F9 -:104C00002D3008E060783043607020E0002CF9D14E -:104C100025481FA135300DF054FFF3E7002904D0DB -:104C200021481BA13D300DF04CFFFCF7E1FF04468D -:104C3000407830436070FCF7F7FF08E01A4814A191 -:104C4000473002E0184812A14C300DF03AFF002C1A -:104C50000AD06078000707D593202070204658229C -:104C600029460830FBF7B0FA002070BD0E4808A1B5 -:104C70005030EAE710B500200C4C0D490346C20045 -:104C80008C525218401C0006D370000EF7D010BD95 -:104C90007372635C67617474635F636F72652E63C4 -:104CA000000000005A020000B2030000FFFF0000F5 -:104CB0004C000020FD4908800120887000207047CA -:104CC000FA4900208870704710B50021F748C943A1 -:104CD00001800021C17007F065F9D8E7F7B584B00D -:104CE0000546002768460781878068680C4600886B -:104CF00000F0EAFB0646287A032805D0002E03D1EF -:104D0000EB49EC480DF0DDFE287A2146C01E123139 -:104D1000009103000DF0DAFF0FF1F0EF3D09AA4614 -:104D20005C6D34B3CCF28B8BEF00F078012803D0AC -:104D3000DF49AD200DF0C5FEA8896946C0000E30E0 -:104D4000888030200881002C22D068680188A180EA -:104D5000E7802781A989A18100200DE0C100B279F7 -:104D600009190A74B288CA8182005219D3894B8208 -:104D7000128A401C8A8280B2A1898142EED8D6E094 -:104D800002A8009001AB22462946304600F0CAFB3B -:104D9000F0E002A8009001AB22462946304600F020 -:104DA00003FCE7E0F07806281AD0FF20C049223043 -:104DB00014E068680188A180E7802781A989A18122 -:104DC000B188E181E9892182EA89296900982BE08B -:104DD000F078062804D0FF20B5493C300DF071FE74 -:104DE000E88969461230888035200881002CE0D19E -:104DF000C0E0F078072804D0FF20AD4956300DF010 -:104E000060FEA88969460E30888036200881002C13 -:104E1000BED068680188A180E7802781A989A18127 -:104E20002046AA890E3029690DF0AEFC7FE0E889A2 -:104E30006946123080B2382288800A81002C78D0EE -:104E400068680188A180E7802781A989A181287AE3 -:104E5000102809D00221A173E9892182EA892969F0 -:104E600000980DF091FC85E00121F4E702A8009084 -:104E700001AB224629463046FFF716FD7AE0F0786E -:104E8000082803D08A498C480DF01BFE142069467F -:104E9000888037200881002C6CD068680188A18048 -:104EA000E7802781A989A18167820120A0733EE064 -:104EB000F078092804D080487D4917300DF001FEB4 -:104EC000288A69461430888037200881002C51D008 -:104ED00068680188A180E78004212781A173A989DE -:104EE000A181E9892182298A618220462A8A143097 -:104EF000696999E702E038E01CE024E0F0780A28CC -:104F000004D06D486A4932300DF0DBFD142069464B -:104F1000888037200881002C2CD068680188A18007 -:104F2000E78027810521A173A78127826782F77017 -:104F300020E017E002A8009001AB22462946304647 -:104F4000FFF78FFD16E00D206946392288800A811F -:104F5000002C07D00120E08054480188A1802781DF -:104F6000277307E00699088010E0524850493C300A -:104F70000DF0A7FD6846069980880880002C05D0B2 -:104F8000684600892080684680886080002007B0DD -:104F9000F0BDF7B594B015460F46149800F09FFA8F -:104FA00004000AD0032000F087FB022802D2E07838 -:104FB000002804D0112017B0F0BD4048FBE71720AF -:104FC000694601260883002D0FD003216846017130 -:104FD0001021018210A80246059004A928460AF073 -:104FE000D8FB00280DD00720E5E7082168460171AD -:104FF00000210781C943418105218673C90281814E -:105000000CE0A878A0712888A080684605218673E6 -:10501000C902818100210781C943418109AA023265 -:1050200006A901A806F0F7FF002802D000F06AFAEE -:10503000C1E707A800906846038B04220321149857 -:1050400000F050FB0028B6D1E670B4E770B592B01E -:105050000D0006460ED000F042FA04000CD00320EA -:1050600000F02AFB022802D2E078002806D01120A6 -:1050700012B070BD1020FBE71048F9E71721684611 -:10508000818004210172298881816988C18101217F -:1050900081740B4901820AAA023201A902A806F012 -:1050A000BAFF00280ED000F02DFAE1E74C000020F6 -:1050B000904C00003B04000063020000013000003F -:1050C0000228000008A80090684683880422032173 -:1050D000304600F007FB0028CAD10221E170C7E783 -:1050E00070B592B00D0006460DD000F0F8F904003E -:1050F0000BD0032000F0E0FA022802D2E07800286A -:1051000005D01120B4E71020B2E7FA48B0E7172124 -:105110006846818004210172298881816988C18162 -:1051200001218174F44901820AAA023201A902A86C -:1051300006F071FF002802D000F0E4F998E708A813 -:1051400000906846838804220321304600F0CAFAA2 -:1051500000288DD10321E1708AE770B592B00D006F -:1051600006460DD000F0BBF904000BD0032000F080 -:10517000A3FA022802D2E078002805D0112077E7B0 -:10518000102075E7DB4873E7022168460172298821 -:1051900081816988C181172181800AAA023201A90F -:1051A00002A806F038FF002802D000F0ABF95FE754 -:1051B00008A800906846838804220321304600F046 -:1051C00091FA0028DBD10421E17051E7F0B591B0EC -:1051D00015000E4607460ED000F081F904000CD0F1 -:1051E000032000F069FA022802D2E078002806D0F5 -:1051F000112011B0F0BD1020FBE7BE48F9E71721E0 -:105200006846818004210172298881816988C18171 -:10521000B1788174318801820AAA023201A902A8F8 -:1052200006F0F9FE002802D000F06CF9E1E708A8CA -:1052300000906846838804220321384600F052FA21 -:105240000028D6D10521E170D3E7F7B592B0154615 -:105250000E46129800F043F904000AD0032000F033 -:105260002BFA022802D2E078002804D0112015B0D1 -:10527000F0BDA048FBE70627002D12D06846077254 -:105280008681C581A5801720694688800AAA0232D6 -:1052900001A902A806F0BFFE002807D000F032F9ED -:1052A000E5E70521684601728681EBE708A80090D2 -:1052B0006846838804220321129800F013FA00281C -:1052C000D5D1E770D3E7F7B592B016460D000ED0F2 -:1052D000129800F004F904000BD0032000F0ECF960 -:1052E000022802D2E078002805D01120BFE7102064 -:1052F000BDE78048BBE7072768460772868117210C -:10530000049581800AAA023201A902A806F083FE50 -:10531000002802D000F0F6F8A9E708A80090684637 -:10532000838804220321129800F0DCF900289ED122 -:10533000E7709CE7F3B5172091B00C46002915D013 -:1053400021780B000DF0C2FC062B05051A041C2B5E -:105350001520C01EE28880B2002A02D0A368002B6C -:1053600004D0824204D90C2013B0F0BD1020FBE71A -:10537000042905D0A088002811D101E00620F3E718 -:10538000119800F0ACF805000BD02078092701280F -:105390001AD0022807D0042824D0052835D00720A9 -:1053A000E2E75448E0E76846077161880181E188D7 -:1053B0004181A06808260390304600F07DF9072857 -:1053C00029D34C48801CCFE70C21684601716188C5 -:1053D0000181E1884181A06803900EE0E87800280F -:1053E00011D118E00D216846017161880181A18801 -:1053F0004181E1888181A06804900326304600F055 -:105400005BF90228EAD31120AEE70E21684601714C -:10541000217B0172F1E717216846018309AA023254 -:1054200006A901A806F0F7FD002802D000F06AF8EE -:105430009AE707A800906846038B0422314611982A -:1054400000F050F900288FD12178012907D00229D6 -:105450008AD0042905D0052905D0032084E7082136 -:1054600002E0EF7080E70A21E9707DE730B591B086 -:105470000C46054600F033F8002808D0032000F061 -:105480001BF9022805D31B48801C11B030BD1948F8 -:10549000FBE70F216846017104811721018309AAE6 -:1054A000023206A901A806F0B6FD002802D000F0DD -:1054B00029F8EAE707A800906846038B0422032135 -:1054C000284600F00FF9E0E70C49884205D00C4966 -:1054D0000988814201D10A4870470020704710B501 -:1054E000FFF7F2FF002802D08178C90700D1002021 -:1054F00010BD00000130000003280000FFFF000085 -:105500004C000020002806D0012805D0052805D031 -:10551000062805D0032070471120704708207047E7 -:105520005C487047FFB583B003980C9EC0781D4659 -:1055300014460F46012803D05749D2200DF0C1FA76 -:10554000F889C0000E30288030203080387B001F62 -:10555000C0B20190002C26D078680088A08000207E -:10556000E0802081F889A081002616E0F00005196E -:10557000C01900902A4641690E3201980AF0E3F8FA -:10558000002802D000202874E8810098761C008A48 -:1055900068820098B6B2408AA882A089B042E5D855 -:1055A00003990020C870F2E4F8B50646C0781F469B -:1055B00014460D46042804D0FF20374903300DF06F -:1055C00080FAA889062148430E3038803321069896 -:1055D000002C01801AD068680088A0800020E0803C -:1055E0002081A989A18103460CE019460622514376 -:1055F0004A190919D789CF81977C8F74128A5B1C4D -:105600000A829BB2A1899942EFD8F070F8BD70B5BB -:1056100014460546142204981A8037220280002C72 -:1056200018D0486800260088A080487AFF300130F2 -:10563000E080C8892081C889A0816682E87808282E -:1056400009D0092811D00A2819D0134913480DF0A0 -:1056500038FAEE7070BD087B0C2804D00F480E4954 -:105660000C380DF02EFA012012E0087B0D2804D032 -:105670000A48094908380DF024FA042008E0087B9C -:105680000E2804D005480449001F0DF01AFA052021 -:10569000A073DEE702300000904C000081030000A0 -:1056A00001460020FA4A02E0401C082803D24300C9 -:1056B000D35A8B42F8D1704730B50446F44A0020E3 -:1056C000163A117953790AE05518AD79A54201D1FE -:1056D000401CC0B2491CC9B2102900D100218B4224 -:1056E000F2D130BDFFB5EA4881B0163841790A9C45 -:1056F000491CCDB21E46102D00D10025E4481638B5 -:105700000079A84202D1042005B0F0BD0820FFF7BF -:10571000D3FF0746072804D9FF20DEA1A5300DF0EE -:10572000D0F90298082801D1072F17D001982080BE -:10573000301D6080002060712071E6800398208118 -:10574000204606F019FC00280AD0D14802991638E4 -:105750004379821D995445710020D5E7D248D3E79B -:10576000FF20CCA1B7300DF0ACF90320CCE7F0B5A9 -:105770008DB0044600256846057116468C46062005 -:10578000FFF79AFF00281CD121780127C8070028BD -:1057900001D0132917D9684687766178C17602212E -:1057A0008183C58304A8009070680C2300880522BB -:1057B0000621FFF797FF002803D0B6A185200DF042 -:1057C00080F90DB0F0BDB24816380278002AF8D042 -:1057D000427863789A42F4D1012918D0132919D15B -:1057E0006146062916D10570002101200AF0D7FC78 -:1057F00068460771706801886846C1800021C94306 -:105800000181607922790102114368461AE06146FC -:10581000062908D0684600790028D2D0314601A870 -:10582000FEF727F8CDE70570002101200AF0B7FC4C -:105830006846077160792279010211436846018147 -:105840000021C9434181E9E7914810B5002116388C -:1058500001704A1E428041700171417101200AF0BD -:105860009EFC10BD10B5FFF7EFFF002088490246EF -:105870004300401CCA520828FAD310BD8449163987 -:10588000488000207047DFE770470EB50121684669 -:10589000017086498180C1800021FDF7EAFF0EBDBD -:1058A000F7B505460078002700090C463E4601285A -:1058B00004D0FF2077A168300DF003F9287A022880 -:1058C0000CD0FF2073A17E300DF0FBF80298002C65 -:1058D000068001D0278066800020FEBDEA897027FF -:1058E00010460A3086B2002C0BD068680088A08071 -:1058F000A8892081E28020460A3029690CF044FF03 -:10590000E4E702980680E7E7F0B543680246D979F4 -:105910009C79090221435C7A1E7A25025C88981DD5 -:105920003543241F87B0A1421DD11B79022B1AD108 -:10593000042D1AD0052D2AD0062D1AD0402D12D3B1 -:10594000061D0F4614462846FFF7AAFE08280AD06F -:105950001120207002202072A581E78126616078E5 -:1059600008210843607007B0F0BD001D00F0E1F8A9 -:10597000F9E7041D0D46FEF761FF0028F3D006216C -:10598000684601700194057208F0CBFAEBE7001D40 -:10599000FFF7EDFEE7E710B53D4C8AB0163C2278E4 -:1059A000012A26D012236A46937363789B1CD37313 -:1059B000082313820B8853824B8893828B88D3826F -:1059C000C988118301A900910C2305220721FFF743 -:1059D00089FE00280BD10022F023114601200AF095 -:1059E0003CFB012020706078801C607000200AB0B1 -:1059F00010BD1120FBE7F0B5254C0027163C87B001 -:105A00000646A51D1FE060792179884204D1112046 -:105A100020A140010DF055F82079405D042804D004 -:105A2000082808D17F1CFFB205E0072069460870EE -:105A3000684608F076FA2079401CC0B22071102820 -:105A400001D1002020713046761EF6B20028DAD14E -:105A5000384688E710B50446402801D2072010BD1B -:105A6000FFF71EFE082802D03120000210BD0021E1 -:105A7000074802E0491C082903D24A00825A002A3A -:105A8000F8D1082914D049004452002010BD00006C -:105A90002E1300207372635C6C326361705F636FFE -:105AA00072652E630000000003300000FFFF00005D -:105AB0000420EBE700B5402801D2072000BDFFF726 -:105AC000EFFD082805D000213B4A4000115208464E -:105AD00000BD052000BDF0B58BB016460C00074692 -:105AE00007D0002E05D06188402904D207200BB0D2 -:105AF000F0BD1020FBE72088002801D0172801D92D -:105B00000C20F4E70846FFF7CBFD08280FD02588C6 -:105B100003A82A46314602300CF036FE01A8009058 -:105B200062882B4608213846FFF7DCFDDFE70520B9 -:105B3000DDE7F0B50E46074601468BB01446012559 -:105B4000304606F0E5FB08281DD10020694608858F -:105B50000120FFF7B1FD002802D117206946088512 -:105B600003AB02330AAA39463046009406F0E3FF3D -:105B700000280AD0022819D0032804D0FF200F499A -:105B800002300CF09EFF2846B1E76846038D002BDB -:105B9000F9D001A800906068042200880121FFF775 -:105BA000A1FD0028EFD00549EC20EAE76078002548 -:105BB000102108436070E6E72E130020945A00007D -:105BC000002803D08178012939D101E010207047E5 -:105BD0000188FA4A881A914233D01BDCF84A881AA5 -:105BE00091422ED00BDC00292BD00320C002081AD2 -:105BF00027D0012825D001210903401A07E00128F8 -:105C00001FD002281DD0FF281BD0FF3801380028E4 -:105C100015D116E0FF220132811A904211D008DC22 -:105C200001280ED002280CD0FE280AD0FF2806D169 -:105C300007E0012905D0022903D0032901D0002063 -:105C400070470F20704700B50A2821D008DC0300F8 -:105C50000DF03CF80A1C2024241A24282224261A99 -:105C6000102819D008DC0B2816D00C2814D00D28C9 -:105C70001AD00F2808D111E011280FD0822807D0A0 -:105C800084280DD085280DD0032000BD002000BD44 -:105C9000052000BDCB4800BD072000BD0F2000BD82 -:105CA000042000BD062000BD0C2000BD70B50029F9 -:105CB0000BD0CB1FFA3B81241E46CDB2112B1BD239 -:105CC000012805D0022806D009E0002010701DE050 -:105CD000FF20043001E0FF200330814218D0330060 -:105CE0000CF0F4FF111613131613161613161616CE -:105CF00013131313161316000846FF3881381F2894 -:105D000003D9FF39FE39022902D81570002070BD71 -:105D10001470072070BD00B503000CF0D7FF060417 -:105D200006040C080A0C002000BD112000BD07204D -:105D300000BD082000BD032000BD00780207120F3F -:105D400004D0012A05D0022A0AD10EE0000907D1A9 -:105D500008E00009012805D0022803D0032801D05B -:105D60000720704708700020704706207047002801 -:105D700007D0012807D0022807D0032807D0072022 -:105D80007047002004E0112002E0212000E03120D3 -:105D900008700020704738B50C4605004FD06946A2 -:105DA000FFF7CBFF002822D12088032189028843F6 -:105DB000694609788907090D084320806946681CEF -:105DC000FFF7BBFF002812D1218803200003814385 -:105DD000684600788007800C01432180A87840073E -:105DE000820F2020012A03D0022A03D0072038BDC9 -:105DF000814300E00143218088B20105890F08D06A -:105E0000012189038843A9780907C90F8903084339 -:105E1000208080B28104890F0AD0A9784004C90685 -:105E2000C90F400CC903084320808004800F02D1B1 -:105E30002088400403D5208840210843208000208A -:105E400038BD70B504460020088015466068FFF72D -:105E5000A2FF002815D12189A089814210D861684C -:105E6000594E8978C90707D0711E884208D8314633 -:105E70000CF004FD298009E0FF21FF31884201D99F -:105E80000C2070BDFF30FF300330288060688078C0 -:105E9000C007A08903D031460CF0F0FC03E0FF30CE -:105EA000FF30033081B22980206881784748017330 -:105EB00020684649008820394885002070BD10B50B -:105EC000137804785B08E4075B00E40F2343137046 -:105ED000FD2423400478A407E40F640023431370D7 -:105EE000FB24234004786407E40FA40023431370C9 -:105EF000F724234004782407E40FE40023431370BD -:105F0000EF2423400478E406E40F240123431370B4 -:105F1000DF2423400478A406E40F640123431370B4 -:105F20000078BF244006C00F234080010343137054 -:105F3000002906D00878C10701D1800701D50120CA -:105F400000E00020C0015906490E0843107010BD42 -:105F500030B50A8803239B0204889A4323059D0FCA -:105F600002D1A3049C0F01D09B0F00E001239B02F0 -:105F70001A4303230A801B039A4303889804840F5F -:105F800002D11805830F01D0800F00E0012000032B -:105F900002430A8030BDF3B591B00D0018D01198BE -:105FA000002818D0122128460CF04BFC01A9012032 -:105FB00007F0A8FD00242646374677E002290000B6 -:105FC00001280000023000000102000060130020E0 -:105FD000102013B0F0BD0720FBE76846007C0128C5 -:105FE0000BD16846C1890520C002081A0AD00128D1 -:105FF0000AD002280CD003280CD0042C0ED0052C7B -:106000000FD10DE0012400E002246846868908E0F3 -:10601000032406E068460424878902E0052400E0A2 -:10602000062468468189119881423FD12C74002E44 -:106030003AD00BA800900CAB10220021304607F09C -:10604000F3FD002820D16846808D2A46C0B20CA9F5 -:1060500009F079FB002817D1AE81002F24D00BA8BE -:10606000009006AB13220021384607F0DDFD002822 -:106070000AD16846808D06A9C01E0331C0B22A1D10 -:1060800009F061FB002801D00320A2E76846817E69 -:10609000427E08021043E881062C05D16846007C48 -:1060A000A8726846C0892881002092E701A807F0FD -:1060B00031FD002891D0FFF7C6FD8AE7002804D003 -:1060C000012903D0022904D003207047F949C98D62 -:1060D00002E0F8494031C988814201D1002070476F -:1060E0000720704730B5F34C0025608B91B0C00B92 -:1060F0002ED1216900292BD0207B800728D40122B2 -:1061000068460271027200224272228B8281A28A48 -:10611000828204911721018309AA0023023206A971 -:1061200001A807F0BBF8002803D0FFF7F4FD11B079 -:1061300030BD207B02210843207307A800906946E8 -:106140000B8B208804220121FFF7CCFA05460BE0D7 -:10615000FBF74EFD842101700921017218341ECC19 -:106160000C301EC0FBF760FD2846E0E710B5D14CAF -:10617000034621690020002909D02146012210315F -:106180001846FBF707FF00202061A0820120217B39 -:10619000F9221140217310BD70B50C4605461C2133 -:1061A00020460CF04EFB00202080002D08D0012D51 -:1061B00004D0C1A1C5480CF084FC70BD062000E0ED -:1061C0000520A07070BD10B507F090FA10BDFEB5A7 -:1061D0000546007800260C46374603000CF076FD95 -:1061E0000C91070C1D962F462F46486C89916868C4 -:1061F0000A38FBF72FFE89E0002904D0B348AEA18E -:106200001B300CF05EFCFBF7F3FC044640780821E1 -:1062100008436070FBF708FD78E0002C04D1BB2038 -:10622000A5A180000CF04DFC284601F05BFA002887 -:106230006CD06078082108436070022666E0E88828 -:10624000694608800190002C04D1A0489AA12F3003 -:106250000CF037FC287807281CD10198C00B19D006 -:10626000944800218171A988818012E003264DE0C5 -:10627000002C04D1C52090A180000CF022FC8D4898 -:10628000017B89070BD50069002802D0E888C00B84 -:106290003CD00226607808210843607036E0291D52 -:1062A0008EC918308EC02838018802260122204667 -:1062B000FBF752FE0127EDE7002C04D183487EA1B5 -:1062C00064300CF0FEFB7B480821007B4007C00FC8 -:1062D0004600607808436070002E17D128790128A5 -:1062E00002D16879002811D02046FFF73FFF07460A -:1062F0000CE0002CCED10D206FA180010CF0E1FB51 -:10630000C8E772486CA17A300CF0DBFB002C0CD093 -:106310006078000709D5002F07D18420207020461F -:10632000582229460830F9F74FFF3046FEBDF7B531 -:10633000027A88B00C46054620460C30049006923E -:1063400016300027921E02903E460A31594813002B -:106350000CF0BCFC0ADF06E62AE62AE66A98C6E6E6 -:106360004288002A02D052270726DDE051271E2648 -:10637000002C7DD06A684F481288A2800122A27149 -:106380008079C0004019C089FFF705FE002877D149 -:1063900048488179C9004919C98921818079C0009B -:1063A0004019408AA083BFE0688A009006980728B9 -:1063B00017D1E889C00B14D000985127223086B23B -:1063C000002C55D0A8890499FFF7E5FD002857D186 -:1063D00068680088A0800220A071A889208101201F -:1063E00041E000985027203086B2002C40D0A88988 -:1063F000FFF7D1FD002843D168680088A080A889F4 -:10640000E080287A07280AD002202072288AA083F8 -:106410000098E083204669692030009A01E001205D -:10642000F3E70CF0B1F97FE0698A00910169002976 -:1064300002D0E989C90B22D00099512722318EB2AE -:1064400000218171A9898180002C5FD00088A08003 -:10645000A8890499FFF79FFD002811D10220A0719F -:10646000A88920810420A072288AE083009801E096 -:106470004CE005E020846969009A0298D1E7032086 -:106480000BB0F0BD007B400702D55127222601E06A -:1064900050272026002C39D06868502F0088A08013 -:1064A00016D00220A0712146287B0831FFF774FE28 -:1064B0003AE00000401300207372635C67617474FB -:1064C000735F636F72652E6300000000CB020000F3 -:1064D000287BA11DFFF760FE0020FFF747FE23E0A9 -:1064E000A9890089884207D154270626002C0DD09F -:1064F00068680088A08017E053270826002C05D084 -:1065000068680088A080A889E0800DE00A9806806D -:1065100010E055270726002CF8D00020A07103E0DA -:10652000FD49FE480CF0CDFA0A98002C068001D0F7 -:10653000278066800020A3E7F948002101722038F7 -:10654000418081718180027BF923520852001A40F8 -:10655000027301618182704770B5F14C86B0203CB6 -:10656000208000206080A071A0806946012007F093 -:10657000C9FA102608E00199088802461207D20FCE -:10658000B043120110430880684607F0C3FA0500C3 -:10659000F1D02069002804D0E048DF4931300CF008 -:1065A00090FA207B800704D5DC48DB4932300CF0C0 -:1065B00088FA822D04D02846FFF745FB06B070BD4F -:1065C0000020FBE7D64810B52038017B012211439B -:1065D0000173002141808171818006F05BFA10BD5A -:1065E00010B5CF4C0020C043203C20800020FFF796 -:1065F000BDFD207B40084000207310BD70B5C84D24 -:106600000446203D287B800704D5C448C249493050 -:106610000CF057FA287BC00706D12888C149884268 -:1066200002D02869002801D0082070BD002C08D0B5 -:10663000A088162801D2092070BD20682861A08892 -:10664000A882FFF74FFD70BD10B50C4607F04BFA5E -:10665000002803D0B049B4480CF033FA2046FFF7C5 -:10666000F2FA10BDF0B5AE4D0446203591B00020D1 -:10667000089068820E462882E8812946E8804039E1 -:106680000886694608830885088688838882A44826 -:106690000E90007A1746012808D0022806D0032859 -:1066A00004D0042802D0082011B0F0BD05239B03BC -:1066B0009C421CD3012080049C49221A8A4216D392 -:1066C0009B4A944213D29E4211D3331A8B420ED36B -:1066D00096420CD26268002A16D005239B039A4288 -:1066E00005D3101A884202D39148824201D3102068 -:1066F000DAE760892189884203D801225202914257 -:1067000001D90C20D0E7089010AA0CA93046FFF759 -:1067100098FB0028C8D106A92069FFF73CFB002898 -:10672000C2D1206900280CD0607880070028684614 -:10673000008B03DA8004800F56D002E08004800FC3 -:1067400052D105A96069FFF726FB0028ACD160692A -:10675000002808D06846808A0105890F012943D1A5 -:106760008004800F40D007A9A069FFF714FB002820 -:106770009AD16846008B800636D46846808A8006A7 -:1067800032D46846808B81062ED4A169002906D0B8 -:106790000105890F012927D18004800F24D0E068EA -:1067A000002804D0007800281ED01C281CD25C4A87 -:1067B000611C123220460992FFF781FB0321002061 -:1067C0008902884301218902411868460D9101859B -:1067D0000121817457490182514A0FA9153230684D -:1067E00008F0D7FF002801D007205DE708A8007F48 -:1067F0004B49C01CC2B26A7100201031FF320090B8 -:106800000190FF3203460291039003320AA904A8C3 -:1068100007F004F9002827D141482038008E0B905A -:106820003F4833893830326901461239029100936A -:106830000192039010A90A8873890CA9306807F0A7 -:10684000EDF801007AD13648E98811308170090AE3 -:10685000C1700026009631386A79008E3146099B56 -:1068600007F05BF8002802D0FFF7EDF91CE70E985F -:10687000807CC00928D068460D990185012181746A -:10688000292109020182AE81287B61784008C9076D -:106890004000C90F08432873FD2108406178204A51 -:1068A0008907C90F4900084328732A32901C022126 -:1068B000029200910190002303961F4A0AA904A89E -:1068C00007F0ACF80100BDD1606800283FD0206916 -:1068D00000280DD106A90CA8FFF73AFB60788007C5 -:1068E00006D46946088B0321090388436946088357 -:1068F0000120694688740F48FE3008820E492089BD -:10690000891E0BF0BBFF62680548089B2E3003967A -:1069100000930192029012E0B8640000220400008B -:1069200060130020FFFF0000260600000000FC1F8F -:1069300000400020032800000302000086E00A4611 -:10694000002306A904A807F069F801007ED1207889 -:10695000C10601D480062BD56846068460690028EC -:106960000DD105A90CA8FFF7F3FA6846818A032028 -:1069700080028143012080020918684681826946AD -:10698000888A482108436946888201208874F8482B -:106990000882F84908AA022001920291009000237F -:1069A0000396F54A05A904A807F038F8010062D15A -:1069B0002078C0072DD068460684A06900280DD134 -:1069C00007A90CA8FFF7C4FA6846808B0321890247 -:1069D0008843012189024118684681836846818B7A -:1069E000402001436846818301218174E04908AA5F -:1069F000491C0182DF480221801C01920091029013 -:106A000000230396DC4A07A904A807F007F8010051 -:106A100031D1E068002832D068460D990185012106 -:106A20008174D349891C0182E16808A80A78027040 -:106A300049784170E068418868464184E06801799E -:106A400008A80171E068C18808A800E013E041715E -:106A5000090A8171C7480722001D08A90092019107 -:106A60000290412200230396D2000AA904A806F04E -:106A7000D5FF010003D00B98FFF7E6FD14E60321D4 -:106A80000E98002F017207D0E8883880E889788056 -:106A9000288AB880688AF880002005E6F0B50124CD -:106AA0008BB016460F46012802D002281BD104E005 -:106AB000684605218474C90202E06846AF498474BF -:106AC0000182002F11D00321002089028843012177 -:106AD000890241186846018506AA05A9384608F0CA -:106AE00058FE002803D00720CAE41020C8E4A14DB6 -:106AF000B878303D287338882F46203F78856A461D -:106B0000127D0020294606AB00920E310193FF3220 -:106B1000029103900346FF3203320AA904A806F04B -:106B20007DFF002802D0FFF78EF8A9E4002E01D0E7 -:106B3000F88D30802C720020A2E470B592B0064629 -:106B4000012508A885708E496846018406F0DDFE9F -:106B5000002208A90120FFF7A1FF044606F0D9FE94 -:106B6000002C02D0204612B070BD0024002E3ED072 -:106B70001C2168460BF067FE68460178202001431F -:106B80006846017008A885707E49684601841194A2 -:106B90000794817FF9200140891C68468177002095 -:106BA0000146684601770020014668464177042186 -:106BB0008185C485018607A80A9011A80D9008A8B0 -:106BC000099006F0A2FE0EAA09A96846FFF74AFD41 -:106BD000054606F09EFE002D01D02846C3E7654815 -:106BE0006946098F503801816946898F4181614822 -:106BF000303804720020B6E7F7B55E4E9CB0002135 -:106C0000303E0091317A012904D0022902D00820B7 -:106C10001FB0F0BD57495039CA8D824201D00620BD -:106C2000F6E71D98824201D10720F1E75348012180 -:106C300010AA9176401C1083002003239B02024679 -:106C40009A438B02D31810AA93846A4691844E49C2 -:106C5000D18410AA9077908317AA0A926A469185E8 -:106C60000C9009A806F075FF00242546274604A9C4 -:106C700009A806F071FF002810D0822877D1002CD7 -:106C80006AD0002D68D010A80481458100240475C5 -:106C900018A8807812AD012860D077E06846807D22 -:106CA000002F1FD0012853D16846818A3348401CE9 -:106CB000814219D114A800906846408A0EAB102278 -:106CC000002106F0B1FF002874D110A8008A042822 -:106CD00001D0062849D16846018F1D98814237D1DD -:106CE0000F2095E7012833D16846808A0521C90223 -:106CF000884202D0491C88422AD11E485038C18D92 -:106D00006846408A814201D1012700E00027002C1B -:106D100001D0002D0DD01D99884219D114A90091E0 -:106D200004460EAB1022002106F07EFF002841D160 -:106D300001E0009D0CE010A8008A022801D0102874 -:106D400013D1C0B218AA0EA908F0FDFC00280CD17E -:106D50006846408A00908AE7052059E72A1D15A950 -:106D600018A808F016FD002810D0032050E721E0F5 -:106D700002290000901300200302000001280000F7 -:106D800001180000052A0000FFFF000010A8007D88 -:106D90000023001DC2B210A802751E98029019A906 -:106DA00001950394009216A806F038FE002801D140 -:106DB00002213172FEF747FF2AE73EB50B46401E1F -:106DC00084B201AA00211846FFF779F806F09DFD6C -:106DD00002A8009001AB01220021204606F09DFD93 -:106DE000044606F096FD68460089012803D0FE4956 -:106DF000FE480BF066FE2046FEF725FF3EBDF0B5CF -:106E0000FB4E0446307A89B00F46032804D004288C -:106E100002D0082009B0F0BD04AA06A92046FFF759 -:106E200010F80500F6D1F24823893830226901466E -:106E30001039029100930192039069460A8A63898E -:106E400006A9206806F0EAFD002802D0FEF7FBFE46 -:106E5000E0E7002F03D0E648203000893880042086 -:106E600030722846D6E738B50C00054608D0002217 -:106E7000694606F033FF002804D0FEF7E4FE38BD73 -:106E8000102038BD69462046FEF785FF0028F8D15E -:106E9000A0786946C207D20F284606F03AFFECE711 -:106EA0003EB50C0008D002AA694606F017FF00287C -:106EB00004D0FEF7C8FE3EBD10203EBD0321204693 -:106EC0000BF0BFFC6846008801A90005800FFEF7A3 -:106ED0004EFF00280BD16846007920706846008874 -:106EE00001A98004800FFEF742FF002801D0032093 -:106EF0003EBD684600796070A278EF200240684687 -:106F00000088C10B09010A43F7210A404104C90F57 -:106F1000C9000A43A270F9210A40800601D5012068 -:106F200000E00220400069460243097A5008400010 -:106F3000C907C90F0843A07000203EBDFEB51D461D -:106F400014000E46074615D0002D13D006F0DDFCC8 -:106F500001A8009022882B463146384606F0DDFC19 -:106F6000054668468088208006F0D3FC2846FEF758 -:106F70006AFEFEBD1020FEBDF0B50C46002199B0A2 -:106F80000746684681850D46002C11D0E068002830 -:106F900006D0A06800280BD002886B469A85018035 -:106FA000A078012806D0022804D0072019B0F0BD2F -:106FB0001020FBE72088002807D0401E80B201A9DE -:106FC00006F0A0FD002842D136E08A48EEE7694687 -:106FD0008A8921888A420BD26846007C00250128D4 -:106FE0002CD16846C0898449884227D1012525E0F3 -:106FF0008A4203D1002D2FD06D1C01E0022D02D05A -:10700000032D1BD31FE06946097C012916D169466F -:10701000794BCA895B1ED11A9A421DD005DC77488C -:10702000101A19D0012809D116E0012914D0FF390E -:10703000013903D1032506E00D26B60201A806F0AA -:1070400069FD0028C3D0822804D0002806D0FEF7AE -:10705000FAFDABE7022DFAD13046A7E7E068002839 -:1070600013D006F052FC0BA800906A46A188208835 -:10707000928DE36806F051FC054606F04AFC002DAF -:1070800019D16846A168808D088002980078C006F2 -:1070900001D55B488AE706F038FC0EA800906846E8 -:1070A00080890CAB0222002106F0BEFD054606F0E9 -:1070B00030FC002D01D02846C9E76846008F022821 -:1070C00001D0032072E7A078012808A8007C03D033 -:1070D00080070ED4082069E7C007FBD00820FEF720 -:1070E000EBFA072802D34348401C5FE7082502203B -:1070F00001E00225032069460876218868468183DD -:107100001721818611AA002302320DA906A806F0D4 -:10711000C5F8002802D0FEF7FEFD47E70FA8009053 -:107120006846838E042229463846FEF7DBFA3DE79F -:1071300070B5064615460C460846FEF741FD002888 -:107140000AD106F0E2FB2A4621463046FFF7A6FCAC -:10715000044606F0DEFB204670BD70B514460D46B1 -:10716000064606F0D2FB224629463046FFF744FD8C -:10717000044606F0CEFB204670BD70B51E46144690 -:107180000D001AD0002C18D06168002915D00121FB -:10719000FEF794FF00280FD12068FEF711FD0028AC -:1071A0000AD106F0B2FB324621462846FFF75AFACA -:1071B000044606F0AEFB204670BD102070BD70B5D1 -:1071C00015460C0023D00221FEF778FF00281DD1C0 -:1071D0002068FEF7F5FC002818D106F096FB29463A -:1071E0002046FFF70CFE0DE0B86400003C060000EE -:1071F0006013002002300000032800000028000077 -:1072000001340000044606F084FB204670BD1020C7 -:1072100070BDF8B51C4615460E46074600F01FFA2D -:10722000002805D123462A4631463846FFF786FE18 -:10723000F8BDFFB583B01E4615000F460FD006F00F -:1072400064FB01A800900023F74A3946039806F032 -:10725000EBFC044606F05DFB002C03D014E010208C -:1072600007B0F0BD002E0CD006F04FFB00200090C0 -:107270002A8833463946039806F0D6FC044606F0C1 -:1072800048FB6846808828802046FEF7DCFCE7E75C -:10729000002906D0E54B0A885B899A4201D8E44868 -:1072A000704769E610B586B004236C46A382DF4BB5 -:1072B0005C898C4201D2914202D9DD4806B010BDF2 -:1072C0006C462182628200210091019119892180FE -:1072D0000221A17005A9029104A903916946FFF753 -:1072E0004BFEEBE7F0B591B00D4681206946087181 -:1072F00005F002FC0646002D08D02878CB4C01286A -:1073000006D0022828D0072011B0F0BD1020FBE7DE -:10731000A98801AAFEF7CAFC0028F5D1B00734D528 -:1073200068460079002820D1A879C0071DD006F052 -:10733000ECFA002000906A892989A088EB6806F0A1 -:10734000ECFA6946087106F0E4FA69460879002803 -:107350000BD0FEF778FCD7E7A98801AAFEF7A6FCB8 -:107360000028D1D1342006420FD001216846017295 -:10737000017301794173F00609D5A188684601823D -:10738000A18A01832069059004E00820BCE7A08859 -:1073900069460882FAF72CFC05461720694688835F -:1073A0000AAA2B46023207A902A805F077FF074672 -:1073B0006878000701D5FAF737FC002F03D038466C -:1073C000FEF7A9FCA0E7F00603D5207B06210843C1 -:1073D0002073B00602D50020FEF7C8FE08A8009072 -:1073E00069468B8B208804220121FEF77BF98BE70D -:1073F000F0B5002695B014460D4600290FD0022C9A -:107400004FD3A71EBAB288480AF02EF929191039AD -:10741000CA7B8B7B11021943884242D1BCB201A9BD -:10742000012006F06FFB7AE0029F3888010776D5CD -:10743000002D41D0A9190691CA788B78361D11020A -:10744000B6B219438919A1422BD869468A8906998F -:107450004B7809781B020B439A4222D1C00623D5F0 -:1074600006F053FA07A800900698AB19C178807807 -:107470000A0206990243487809780002084300216D -:1074800006F04BFA009006F044FA009800283ED12E -:107490000698C178827808026946898B1043884231 -:1074A00002D00B2015B0F0BD0698C1788278080292 -:1074B0001043801986B22EE0C0062CD5002007AA02 -:1074C00001461154401C80B21028FAD306F01DFA70 -:1074D00006A800906846002380891022194606F00D -:1074E000A3FB0090002803D006F013FA00980EE0EA -:1074F0000BA86946009088890A8B07AB002106F02B -:107500000CFA009006F005FA0098002803D0FEF768 -:107510009AFBC7E703E0388810218843388001A828 -:1075200006F0F8FA002800D17EE7404D698800296E -:1075300021D0012268460276027700244477018434 -:10754000172181850EAA234602320BA906A805F051 -:10755000A5FE002802D0FEF7DEFBA3E70CA80090F2 -:1075600069468B8D288804220121FEF7BBF800288C -:1075700098D16C8096E7002094E7F0B5002487B09E -:1075800015460E46002A04D002A9012006F0BAFAD8 -:1075900040E0102064E60398007800073AD506F032 -:1075A000B4F901A8009068460023008A1E4A1946D3 -:1075B00006F03AFB074606F0ACF9002F23D1002E67 -:1075C00023D068468088298820183719001D8142F9 -:1075D00036D36946098A3970090A797069468988FB -:1075E000B970090AF97006F090F901A8694600908F -:1075F000088A8A883B1D002106F016FB074606F024 -:1076000088F9002F01D003202AE6684680882018D8 -:10761000001D84B202A806F07DFA0028BBD08228A3 -:1076200008D0FEF710FB1BE6FFFF00004013002010 -:1076300002300000002E0ED02988A01C814201D209 -:107640000C200DE62246314639480AF00DF8311972 -:107650000870000A4870A41C2C80002000E600B5C9 -:1076600085B06946FEF797FC00280AD16846007C81 -:1076700003000BF02BFB08052F2F2F2F08080531D7 -:10768000032005B000BD68468078012807D1684610 -:1076900000880321C902401A1CD001281AD068466C -:1076A0008079012806D16846808815214902401A50 -:1076B00005280FD96846807A012811D168460189CA -:1076C00029200002081A05D0022803D0032801D07F -:1076D000042805D10F20D4E7164917480BF0F1F91B -:1076E0000020CEE738B5154A0021518003791AE011 -:1076F000CC002418A46800946C462488250707D57C -:10770000E50605D5D90008182038C08B508006E062 -:10771000640406D59171C9000818C08890800120C2 -:1077200038BD491CC9B28B42E2D8002038BD0000E8 -:10773000FFFF0000B8640000330200004013002087 -:10774000F8B50125F84902260E603F27F7493F02A8 -:107750008F60F7490022CA63CD63F649C96A0907F9 -:107760000ED4F4494031CB6AF34A53620B6B9362F7 -:107770004B6BD3628B6B1363C96BD3051943516396 -:10778000EE49EF4CC969002829D001282BD0FF20F1 -:10779000ECA16E300BF095F9EE48A063FF200430A9 -:1077A00060632563EC49032008602061E44996206A -:1077B00040314860DD48E94940304163E649FC39E1 -:1077C0000163E649091FC163E349F0398163D74882 -:1077D0004760E34910204860E2480660F8BDE2488F -:1077E0006061E24804E0E148E0306061DF48801F0A -:1077F0000143A161D0E70120D0494006C86170472C -:1078000010B5CE4C0020A070214660702031487029 -:1078100008746061A072A06209F02AFBA061204692 -:10782000343009F038FF002804D0FF20C5A13A30D9 -:107830000BF047F901204006E0610020FFF780FFD0 -:1078400010BDBE49012008707047BC490020087077 -:10785000704770477047BA4940310028086802D025 -:107860000122104301E0400840000860704770B5F5 -:107870000C46B24D01460622E81C0AF085FF6C72E8 -:1078800070BDAE48203040787047AC4A917050705F -:10789000704770B50D460446082904D9FF20A9A1F8 -:1078A000CB300BF00EF90022B14809E0910063588B -:1078B00009180B6053001B191B8C0B62521CD2B2AF -:1078C000AA42F3D3206BAA494031086070BD0B2354 -:1078D000DB4310B5C21A9A4998421FD008DC1C320B -:1078E00022D00A2A20D0142A1CD0182A08D117E046 -:1078F000083011D004280DD0082809D00C2805D054 -:10790000FF2090A1F7300BF0DCF810BD04200CE054 -:1079100000200AE0FC2008E0F82006E0F42004E063 -:10792000F02002E0EC2000E0D820C86010BD8348C1 -:107930002030007B704710B5814CC17861620AF03D -:1079400084FF0002E06110BD252808D0262808D059 -:10795000272808D041000A2807D8091D06E002217F -:1079600005E01A2103E0502101E0891DC9B2744AE3 -:107970009160734940314861704770494861704770 -:1079800070B56E4DA87200F028FBA87AC0073CD0F5 -:10799000714C2068800703D46AA176480BF091F8F7 -:1079A000A87A010619D5800707D5724865A1801C01 -:1079B0000BF087F8A87A00060FD55C4E2878403681 -:1079C000012811D0002804D0A3205EA180000BF074 -:1079D00078F869487061A8693061A87A800714D581 -:1079E0002068C00708D102E06348001FF2E7A52025 -:1079F00054A180000BF065F8A87A4007206801D5F3 -:107A0000042100E008210843206070BD70B5012406 -:107A10004A4D002807D0012818D002281AD055480E -:107A200048A145380BE000F0D8FA53482978001FE8 -:107A3000012907D0002907D04E4842A158380BF041 -:107A400040F870BD046070BD446070BD8120FFF7D8 -:107A500097FF70BD00F0C1FA6869002804D145485D -:107A600038A150380BF02DF86969A86A40184349CD -:107A7000C8602E484249403001623F490C314162A2 -:107A80002A49001548603F4884602C48203004741F -:107A900070BDF8B50C2069460870314C6068C006AE -:107AA000C50F1026A66034480021FC300161324B1E -:107AB00001221B1F1A610BE000BF00BF00BF00BF07 -:107AC00000BF00BF00BF00BF6B461A78521E1A707D -:107AD0006A461278002A02D00269002AECD00161BD -:107AE00068460078002804D1224816A131380AF0EF -:107AF000E8FF002D00D06660F8BD10490020C86185 -:107B0000704710B50AF0A1FE00020D49000AC863D3 -:107B100010BD054902200860704703490220086033 -:107B2000104908607047000080E100E000F5014066 -:107B3000C01F004080000010001700409C13002070 -:107B4000001500407372635C68616C5F7263732E32 -:107B5000630000005B06000000120040448000400B -:107B60000013004080E200E006010200250003004F -:107B7000001600407B0200000410004040850040D9 -:107B80004C81004000050040FB4902200860C9E725 -:107B9000FA490870C6E710B5F94809F084FD0028D5 -:107BA00004D02B20F74900010AF08BFF10BD10B55F -:107BB000F34809F090FD10BDF3494860B2E7F04981 -:107BC00010B53439F14B0022C8605A60896A081830 -:107BD000EF49486000F008FA10BDE94810B5C2212D -:107BE0003438C160E94A00215160806AE849C230F6 -:107BF000486000F0F9F910BDE64900208861C861CD -:107C0000DF493439C860E24948608BE7DC4900202D -:107C10003439886286E73F20DE49000240398860B7 -:107C200080E7D748DA493438806AFE30886079E7DF -:107C3000D7490020886075E7D74801681022914332 -:107C40000160D649012088616CE7D5490020C861F0 -:107C5000D148016810221143016063E700B5FFF7C6 -:107C6000EBFFC74900203439087400BD00B5FFF7A9 -:107C7000ECFFC34901203439087400BDC849CA6902 -:107C8000012A01D000204DE7BF4A403292685206D7 -:107C9000520E524202700020C861012042E7F8B53E -:107CA000BF4C2069012806D00021B548343800783F -:107CB000012802D004E04021F7E7E268012A04D05D -:107CC00000220A43012802D004E02022F9E761687B -:107CD000012905D000211143B24A002802D007E053 -:107CE0001021F8E71368012B02D1E368012B04D0BF -:107CF00000230B43002802D007E00823F9E71168AE -:107D0000002902D1E168012905D000221A439F4EC3 -:107D1000002802D004E00422F8E77168012904D0A9 -:107D200000211143002802D004E00221F9E7606835 -:107D3000012829D000259C480D4301680906090E39 -:107D400002D06169012900D000218D4F143F3973A1 -:107D500000680006000E02D0A069012800D00020B3 -:107D600078738B488068002803D000F0ABFA0128B4 -:107D700000D00020B8730021E16021616160616181 -:107D8000A16171602846F8BD0125D4E77C48012136 -:107D90001438C173C6E6F8B5794E0127143E307C1D -:107DA0000025002827D07C4C206800902560FFF734 -:107DB00070FE009820607A48C560056145604561A5 -:107DC000856174490015403988607848856030467F -:107DD000203801787148012909D0002909D0694962 -:107DE00073480AF06EFE0AF06BFF3574F8BD076049 -:107DF000F9E74760F7E7FFF752FF04460020F0730A -:107E0000634842685E4D343D6A620068A862297822 -:107E1000002909D1A978002906D05B4B5B681B7843 -:107E20000B406978994309D000213170E10707D0F0 -:107E3000104602F031FC0121A86A08E03770F5E72E -:107E4000A10601D5022102E0A10702D5002102F01E -:107E500030FC4D4F796806220931E81C0AF067FCB6 -:107E6000002807D1687A79680978C909884201D160 -:107E7000012000E000207070204600F0BBF83F4871 -:107E8000C2270078002815D0012828D002283BD02E -:107E900003285AD03B4947480AF013FE287C0028A3 -:107EA00004D02878002865D0FFF7C6FE287800287F -:107EB00061D08BE0A00701D501F001FC200703D5BC -:107EC0000120EF6001F034FC600703D50020EF6073 -:107ED00001F02EFCA006E1D501F09EFBDEE7A00735 -:107EE00001D503F08BFE200703D50120EF6003F0DE -:107EF00005FE600703D50020EF6003F0FFFDA0063C -:107F0000CCD503F087FDC9E7A00703D5BF20044007 -:107F100009F07EFB200705D5BF2004400120EF605B -:107F200009F075FB600705D5BF2004400020EF6015 -:107F300009F06DFBA00603D5BF20044009F066FBE5 -:107F40006006ABD509F065FBA8E7A00701D509F0ED -:107F500063FB200703D50120EF6009F05CFB60079D -:107F600003D50020EF6009F056FBA00696D509F076 -:107F700051FB93E720E022E000E100E05400002004 -:107F8000D0130020447B00000015004040810040D9 -:107F90004085004040F501400012004000100040C4 -:107FA0000011004000140040401600400005004051 -:107FB0006F0300009F040000FFF747FE76E7E868C4 -:107FC000002803D0A96A091826484160F07B0028E0 -:107FD00000D10BE70AF074FEF8BD234903200860C6 -:107FE0002249002008619DE520482149C1612149BD -:107FF000816197E570B50546FFF7EFFF1E4CA17A4A -:10800000080701D568071CD41C4AC80605D5507B53 -:10801000002802D0907B002813D0880602D5107863 -:1080200000280ED1480602D55078002809D000203B -:108030008A070026002A07DA4A0704D5012222709F -:1080400002E00120F4E72670CA0709D0AA0705D488 -:10805000890705D5002803D0A80601D4FFF719FD2C -:10806000A67270BD408500400012004040F50140FE -:1080700010100040448100409C130020BC130020DD -:108080002E48002101704170704770B506461446B5 -:108090000D46012000F072F828490120284B087095 -:1080A0009E60DC601D6170BDF8B50446012000F0E3 -:1080B00065F822490120087021494C6021490026B9 -:1080C0004E601121204D8902A960204F002C0AD05A -:1080D000012C03D01EA140200AF0F3FC3E601120C9 -:1080E00080026860F8BD386001208002F9E710B5B1 -:1080F0001248017800290ED01121134A890291609B -:1081000010494A680021002A03D0154A12684270BB -:1081100000E041700170002000F030F810BD074809 -:108120000178002907D007484068002802D00C4891 -:108130000068C0B2704740787047000055000020CA -:1081400000F5004000F1004000F5014000F2004061 -:108150007372635C68616C5F63636D2E6300000023 -:1081600000F4004001202949C0030860284900208C -:1081700008701120274980028860704770B5244D2F -:1081800004462878A04207D0002C05D0002803D050 -:1081900021A14D200AF095FC2878A04210D00020A3 -:1081A00022492C70002C23D01A4A214D214B8032B9 -:1081B000012C06D0022C13D017A16A200AF081FCF2 -:1081C00070BD0860022008604D6112481A494030B5 -:1081D00001624362081D10601648001D506070BDAA -:1081E0000860032008604D6114481060536070BD42 -:1081F00008600860112007498002886070BD10B5D2 -:1082000005A173200AF05DFC10BD000080E100E0D4 -:108210005700002000F501407372635C68616C5F79 -:1082200063636D5F6161722E6300000000F50040C2 -:10823000D413002000F000400011004048810040AD -:10824000364800210170417010218170704770B56F -:10825000064614460D460220FFF790FF01202F49E5 -:108260002F4A0870E41E14619660556070BD10B509 -:108270000220FFF783FF29490120087029480021C7 -:1082800001604160816028490014486010BD10B54C -:10829000224C2078002811D00120234980038860D7 -:1082A00000F02EF80021002804D0012060701F4843 -:1082B000006801E061701020A07021700020FFF7BD -:1082C0005DFF10BD10B515480178002905D000F0FC -:1082D00017F8002800D0012010BD407810BD10B55F -:1082E0000E480178002909D000F00AF8002803D0D0 -:1082F0000E480068C0B210BD102010BD807810BDBF -:1083000008480168002905D04168002902D080682A -:10831000002801D00020704701207047580000203D -:1083200000F5004000F1004000F5014000F400407D -:1083300010B528210AF085FA10BD40788006800E1D -:10834000704740788006800EC01C70472820704718 -:1083500070B5054600780A0700090001120F1043A6 -:1083600028700B000AF0B2FC070507050705090590 -:108370000B00062408E00C2406E0222404E000247C -:10838000FEA158200AF09DFB6878800980012043F7 -:10839000687070BD00780007000F704710B50622A6 -:1083A000C01C0AF0F1F910BD0B4610B5C11C062225 -:1083B00018460AF0E9F910BD10B5062209300AF096 -:1083C000E3F910BD0B46014610B5062209311846E7 -:1083D0000AF0DAF910BD0278BF23C9071A40490E26 -:1083E0000A430270704700784006C00F7047027859 -:1083F0005206520EC9010A43027070470078C00944 -:10840000704770B50C460546C11C2046062209304F -:108410000AF0BAF920784006400E20702978490603 -:10842000C90FC9010843207070BD70B515460E46CE -:1084300004461F2A03D9D1A1A9200AF042FB2046F5 -:108440002A46314609300AF09FF96078AD1D80094F -:108450008001A906890E0843607070BD70B505469D -:1084600040780E468406A40E062C03D2C3A1B92080 -:108470000AF027FBA41FE4B21F2C00D91F242946B1 -:108480002246093130460AF07FF9204670BD70B5AA -:1084900015460E4604461F2A03D9B8A1CD200AF07E -:1084A00010FB20462A46314609300AF06DF9607803 -:1084B000AD1D80098001A906890E0843607070BD5A -:1084C00070B5044640780E468506AD0E062D03D2E3 -:1084D000AAA1DE200AF0F5FAAD1FEDB21F2D03D9D7 -:1084E000A6A1E2200AF0EDFA21462A4609313046DB -:1084F0000AF04AF9284670BD10B504220F300AF080 -:1085000043F910BD0B46014610B504220F31184641 -:108510000AF03AF910BD10B5032213300AF034F90D -:1085200010BD0B46014610B50322133118460AF060 -:108530002BF910BD4176090A81767047817E427E13 -:10854000080210437047C176090A01777047017F1E -:10855000C27E0802104370474177090A817770474D -:10856000817F427F080210437047C175090A017676 -:108570007047017EC27D08021043704781757047C5 -:10858000807D704720300279C90652095201C90E18 -:108590000A430271704720300079C006C00E704750 -:1085A00020300279D206D20E49010A430271704787 -:1085B000203000794009704710B505221F300AF0BD -:1085C000E3F810BD0B46014610B505221F311846D1 -:1085D0000AF0DAF810BD30B5411C837E0A46190254 -:1085E000D37D447E927D1B0221431343674D827DE0 -:1085F0008C1FAC4210D8002A0ED0082A0CD88A4210 -:108600000AD28B4208D8817F427F08021043A91DFD -:10861000884201D8012030BD002030BD00210A462B -:108620004254491C2229FBDB70474078C006C00E2B -:1086300070474078C006C00EC01C704722207047AB -:1086400010B502788B07920892009B0F1A430270B4 -:108650004278520952014270012908D0022906D0FD -:10866000032905D0FF2045A1A3300AF02AFA10BD46 -:1086700001210A43427010BD10B502788B079208A1 -:1086800092009B0F1A4302704278520952014270C5 -:10869000012908D0022906D0032905D0FF2037A1DF -:1086A000BD300AF00EFA10BD01210A43427010BD20 -:1086B00000788007800F70470278FB23C9071A40B3 -:1086C000490F0A430270704700784007C00F704797 -:1086D0000278F723C9071A40090F0A43027070474E -:1086E00000780007C00F70470278EF23C9071A40CF -:1086F000C90E0A43027070470078C006C00F704769 -:1087000070B50546C1700B000AF0E0FA0E080A0CBD -:108710000E1012120C14141212160C180C2413E062 -:10872000082411E002240FE017240DE00D240BE0D3 -:10873000012409E0092407E0062405E0452000247F -:108740000EA1C0000AF0BDF968784009400120433D -:10875000687070BDC078704770B5044640780E46AA -:10876000C506ED0E1B2D03D904A109480AF0A9F98D -:108770006019C01C042231460CE000007372635C77 -:10878000756C5F7064752E63000000007A0C000049 -:108790003A02000009F0F8FF70BD70B50446407859 -:1087A0000E46C506ED0E1B2D03D9A049A0480AF0C0 -:1087B00088F96119C91C0422304609F0E5FF70BD33 -:1087C000C171090A01727047017AC2790802104327 -:1087D00070474172090A81727047817A427A0802B1 -:1087E00010437047C172090A01737047017BC27A56 -:1087F0000802104370474171090A817170478179FD -:108800004279080210437047017170470079704740 -:108810004173090A81737047817B427B08021043D0 -:10882000704730B5411C037A0A46C47919022143C6 -:10883000537914791B0223437E4D00798C1FAC427F -:1088400010D800280ED008280CD888420AD28B42B3 -:1088500008D8D07A917A00020843A91D884201D82D -:10886000012030BD002030BD10B50522001D09F0EB -:108870008BFF10BD0B4610B5011D0522184609F0EF -:1088800083FF10BD4172090A81727047817A427A72 -:10889000080210437047017170470079704710B5A6 -:1088A0000822001D09F070FF10BD0B4610B5011D18 -:1088B0000822184609F068FF10BD0A78027349784B -:1088C00041737047027B0A70407B4870704710B557 -:1088D00008220E3009F058FF10BD0B46014610B5B6 -:1088E00008220E31184609F04FFF10BD10B50422C2 -:1088F000163009F049FF10BD0B46014610B50422A1 -:108900001631184609F040FF10BD10B50822001DB1 -:1089100009F03AFF10BD0B4610B5011D082218469C -:1089200009F032FF10BD10B504220C3009F02CFF05 -:1089300010BD0B46014610B504220C31184609F053 -:1089400023FF10BD017170474171090A81717047A1 -:10895000C171090A017270470079704781794279C3 -:10896000080210437047017AC27908021043704729 -:108970000171704700797047017170470079704745 -:1089800010B50822001D09F0FFFE10BD0B4610B502 -:10899000011D0822184609F0F7FE10BD10B5082287 -:1089A000001D09F0F1FE10BD0B4610B5011D082297 -:1089B000184609F0E9FE10BD70B515460E4604468E -:1089C0001B2A04D93720194900010AF07AF82A46EF -:1089D0003146E01C09F0D8FE6078E9064009400104 -:1089E000C90E0843607070BD70B5054640780E46EC -:1089F000C406E40E1B2C04D9DF200C4980000AF0C9 -:108A000060F82246E91C304609F0BEFE204670BDE3 -:108A10004078C006C00E1B2801D8012070470020F6 -:108A2000704710B5222209F0AFFE10BD7C87000010 -:108A3000430200007A0C0000FEB50F4601460646D0 -:108A40000546C031203640350446032F04D0002FA0 -:108A50002BD0012F29D049E000206080A080E08049 -:108A600020816081A082E082E873A074E074A07627 -:108A7000E076A073E0732074607430740123AB73EC -:108A80006882E88208762146A883603108702883CE -:108A90002873687320776077B072B0730872487279 -:108AA00088720A7488746883FEBD00206882E88238 -:108AB000012F50D0E08B0090608C0190C000009995 -:108AC00009F0DCFE401C80B2A882009919224143C3 -:108AD0009202914201DD401EA8827D200002009991 -:108AE00009F0CCFE401CE883002F01D0022FDBD11F -:108AF000307AC006C00E30720020E872221824219D -:108B00008B5C4032D9075B08DE07C90FF60F71187E -:108B10005B08DE07F60F71185B08DE07F60F7118A9 -:108B20005B08DE07F60F71185B08DE07F60F711899 -:108B30005B08DE07F60F71185B0859189171EA7A25 -:108B4000401C5118C0B2E9720528D7D3002FABD111 -:108B500000202874FEBD4A7F2046E030022A12D051 -:108B6000097F022913D050A1722009F0AAFF012029 -:108B700000900190E08B698B4843009909F08CFECE -:108B8000688301989AE7818800910089F1E7018A5A -:108B90000091808AEDE770B504464034E67A0546D8 -:108BA000002E68D0252E66D8002964D03C20405D78 -:108BB000227B48431018252109F060FE08462173E6 -:108BC0004207C908520F3C4B691820319A5C097959 -:108BD0008A4367D0314609F051FE491CCAB20020D1 -:108BE00006E0002804D0291840314979511ACAB248 -:108BF000291846235B5C93423AD320310979C94353 -:108C0000CB07DB17D21A521E1206120E34D08B0776 -:108C1000DB17D21A521E1206120E2FD04B07DB178B -:108C2000D21A521E1206120E2BD00B07DB17D21AC5 -:108C3000521E1206120E27D0CB06DB17D21A521E76 -:108C40001206120E23D08B06DB17D21A521E120602 -:108C5000120E1FD04B06DB17D21A521E1206120E2E -:108C60001BD00906C917511A491E0A06120E17D041 -:108C7000401C0528B5DB70BDC00013E0C000401CDF -:108C800010E0C000801C0DE0C000C01C0AE0C00065 -:108C9000001D07E0C000401D04E0C000801D01E091 -:108CA000C000C01D607370BD7372635C6C6C5F75D7 -:108CB00074696C2E63000000042D010010B5FF489C -:108CC0000021017041708170C17041718171C17169 -:108CD000083008F0E0FC002804D0FF20F8A1843020 -:108CE00009F0EFFE10BD10B5F44900204872081DD0 -:108CF00008F0D1FC002804D0FF20F1A1C33009F016 -:108D0000E0FEFFF7DBFFF148FFF788FC0021EF48AA -:108D1000FFF7EAFC0121ED48FFF792FC10BDE2E706 -:108D20001B207047E5494A7A002A01D0002070478D -:108D3000488101204872704710B5E0494A7A002AFC -:108D400002D04989814201D0002010BDDB48001DBE -:108D500008F0A9FC002804D0FF20D9A1B43009F004 -:108D6000B0FED648001D08F0B6FCFFF7A7FF0120B3 -:108D700010BD70B5D14C0025627A002A02D06289FC -:108D8000824201D00D700DE0227863789A4203D3BD -:108D900022786378D21A04E062782378D21A1023FA -:108DA0009A1A0A70FFF7C8FF002801D065720120E7 -:108DB00070BDC2494A7A002A04D04989814201D152 -:108DC0000120704700207047BC490A784B78521C3C -:108DD0001207120F9A4207D0097822225143BC4A47 -:108DE000891801600120704700207047B34801785E -:108DF0004278491C0907090F914206D00178491CA5 -:108E00000907090F01700120704700207047AB4926 -:108E10004A7A002A04D04989814201D10120704751 -:108E200000207047A5490A784B789A4207D04978C4 -:108E300022225143A64A8918016001207047002070 -:108E4000704710B59D4C20786178884216D06078C4 -:108E5000401C0007000F6070201D08F024FC002853 -:108E600004D0E078401CE070012010BDA078401CC8 -:108E7000A0709248001D08F02EFCF5E7002010BD00 -:108E80008E4801784078814201D10120704700204E -:108E900070478A4801784278914202D3017840783D -:108EA00003E041780078081A1021081AC0B2704710 -:108EB0000F20704770B5814C0D46617A002916D09D -:108EC0006189814213D100262E70201D08F0EBFB32 -:108ED000002805D1A0782870A670201D08F0FBFBA3 -:108EE0002878E17840182870E670012070BD0020D5 -:108EF00070BD76490160704770494A7A002A04D0F3 -:108F00004989814201D101207047002070476B4997 -:108F10004979002901D0002070476E490160012085 -:108F2000704766484179002901D00020704701212F -:108F300041710846704761494A7A002A04D049893C -:108F4000814201D101207047002070475B49497977 -:108F5000012901D0002070475E490160012070475F -:108F600056484179012901D0002070470021417104 -:108F70000120704751484079012801D001207047F5 -:108F8000002070474D494A7A002A04D0498981421D -:108F900001D1012070470020704770B5474C05464D -:108FA000A0790721401C09F069FCE079814208D0D2 -:108FB000A0792221484347492231401828600120E6 -:108FC00070BD002070BD10B53C4C0721A079401C3D -:108FD00009F054FCE079814207D0A0790721401CB8 -:108FE00009F04CFCA171012010BD002010BD3348D8 -:108FF0008179C079814201D10120704700207047FA -:109000002E494A7A002A04D04989814201D101209F -:1090100070470020704710B504462848083008F013 -:1090200042FB002815D125498879CA7990420CD095 -:10903000C8792221484327492231401820601F481F -:10904000083008F048FB012010BD1C48083008F02B -:1090500042FB002010BD10B504461848083008F047 -:1090600022FB002815D115498879CA7990420CD085 -:10907000C8792221484317492231401820600F48FF -:10908000083008F028FB012010BD0C48083008F01B -:1090900022FB002010BD094810B5083008F003FB82 -:1090A000002822D1054CA079E17988421AD0E079D4 -:1090B0000721401C09F0E2FBE1710DE05C0000209B -:1090C0007372635C646D5F712E6300002F17002064 -:1090D000FF1300201F1600202046083008F0FBFA7E -:1090E000012010BD0C4808F0F6FA002010BD0A4817 -:1090F00008388179C079814201D101207047002070 -:109100007047054808388179C079814201D1012032 -:1091100070470020704700006400002070477047CF -:10912000FF2070477047704700207047002070474D -:1091300000207047002070470020704700207047D3 -:1091400000207047002070470020704701207047C2 -:1091500000207047002070470020704700207047B3 -:10916000F8B5FA4D0446A87F002600280CD0002947 -:1091700023D1667010202070E87FA0702846203030 -:109180000078E070AE7718E0287A012801D000203E -:10919000F8BD002911D16670EC49687A01270A31BF -:1091A000002801D0132000E0052020701422A01C0C -:1091B00009F0EAFAA7716E722E720120F8BDF8B5B7 -:1091C000E3480078002802D00C273846F8BD002775 -:1091D000DE4D3C46203DAF74EF742F7528466F730B -:1091E0002038DA4E47737771687D002804D0FEF787 -:1091F0001FFDFFF74CF86C7534727472B477D34866 -:109200002430FFF795F8D1484C30FFF791F8D0485B -:109210004470DAE710B5CE4C00232370CB4C203CD1 -:109220006375CA4B01241C71603B583307C3FFF7B9 -:10923000C6FF002803D0C7A1FF2009F042FC10BDE3 -:10924000C2482038807C7047F8B5C04D0646407B48 -:10925000203DE873BD4837791346AF73B27B827106 -:109260000446603C217006221946601C09F08CFA05 -:10927000B07960730622F11DE01D09F085FA687B64 -:109280000126002800D0EE74B0484038407B00280A -:1092900000D02E75002F09D0012F09D0022F24D025 -:1092A000032F43D0FF20ABA14B3013E000211DE082 -:1092B000A64801212430FFF74BF8A448E11D2430D3 -:1092C000FFF77AF8607B002807D0012807D0FF203D -:1092D000A0A1413009F0F5FB0CE0002100E00121E4 -:1092E0009A482430FFF783F804E006219748243099 -:1092F000FFF72EF89548611C2430FFF74FF893488C -:1093000021782430FFF767F8904804214C30FFF7AC -:109310001FF88E48611C4C30FFF740F88B482178CD -:109320004C30FFF758F8AE740020F8BD0221DDE79D -:1093300070B50446854D0020203D287528462246FC -:10934000323809F021FA2846203844730120287564 -:1093500070BD7E490871704710B57C4C0022203CDE -:10936000E274607302462046123809F00DFA0120BB -:10937000E07410BDF8B500F02DFB744C0025203CC6 -:10938000607D002804D0FEF753FCFEF780FF657572 -:109390006F4E3570FEF70BFCA07B012804D0002136 -:1093A000084601F02DF9F8BD0021022001F028F94E -:1093B000664C207A0127002809D0A07F0028F2D12E -:1093C0000520E077204620300570A777F8BD70783B -:1093D0000028FBD05D4906226039487BE073C91D37 -:1093E0000846693009F0D0F93C20A07227727570E8 -:1093F000F8BD10B5554C203CE17B207CCA0701D05C -:10940000C2070BD08A070FD582070DD42620FEF79E -:109410009BFA207C02210843207410BD2520FEF712 -:1094200093FA207C0121F6E74907F6D54007F4D4EA -:109430002720FEF789FA207C0421ECE770B5444828 -:109440000078002861D1414C203CA07C00285CD0F1 -:10945000FEF7A1FB0026267466743046FEF798FBE3 -:109460000020FEF76DF93F48FEF765FA2546403DBE -:10947000296E8857FEF72BFA3A48C01EFEF741FBCB -:10948000FEF7BAFBFFF7B5FFFEF7DBF9FEF77CFB53 -:109490000120FEF7BBFA0F210520FEF7F6F9297827 -:1094A000681CFEF7E4F9A07B01280AD0E07C0028C4 -:1094B00007D0214612390846627B5630FEF7B5FFC9 -:1094C000E674207D002808D0204840380146427BC1 -:1094D00012398C30FEF7DBFF2675E86D0178002924 -:1094E00003D00178001DFEF7D4F9A86D017800299A -:1094F00007D00178154A401C7732FEF7A8FE0120FC -:109500006075FEF754FB002070BD0C2070BD104943 -:109510004860704770B50546FEF76EFB002D06D01B -:109520000020FEF72DFAFEF78CF9FFF762FF074CDB -:10953000203C607C002819D0A07B012803D105A124 -:10954000094809F0BEFAFFF715FF70BDB4170020F7 -:10955000680000207372635C6C6C5F6164762E63DC -:10956000000000000F2D0100CF0300000126002D98 -:1095700004D00220FEF74AFAFE484671FD48243026 -:10958000FEF71AFB012008F03CF8FEF762F9A07B19 -:1095900000280ED001280CD002280AD003280AD0B7 -:1095A000F549F64809F08DFAE07B217C884306D026 -:1095B00009E0032000E00120FEF7E2F9F4E7A07BD8 -:1095C000012803D06674EE480670BEE700202074C0 -:1095D000F9E710B5FEF7DFFAE948007800280ED168 -:1095E000E4482038807C002809D00020FFF792FF53 -:1095F000F6F7F9FEDF480079012806D007E000F011 -:10960000E9F9FEF7D4FA0C2010BD09F059FB00204F -:1096100010BDDB494870704770B500F0AFFE002800 -:1096200019D0FF202D30FEF7A8F9D54E3078D14C57 -:10963000012813D0022801D003282ED0CE49D148CA -:1096400009F03FFA3078002807D0F6F7CCFE2079F1 -:1096500001282CD030E0FFF78DFE76E7C54D203D88 -:10966000A87B032819D0FEF7B8FA687D002803D03C -:10967000FEF7FDFDFEF7D5FABE487430FEF79CFA02 -:10968000012007F0BFFFA87B01280BD0A1796F2034 -:10969000012906D0032904D004E00120FFF73AFF96 -:1096A000D0E77F20FEF76CF902203070CAE76079BE -:1096B000002801D1FEF76AFB0020607145E770B514 -:1096C000AC4C203C607D002803D0FEF7B1FAFEF7D9 -:1096D000DEFD00F053FE00281CD0A94D287802289A -:1096E00004D0A848A4492B3009F0EBF9A07B01284D -:1096F00013D0FF202D30FEF740F90120FFF70AFFBD -:109700002878002808D0F6F76EFE9A4C20790128B8 -:1097100006D00AE0FFF72EFE17E799208000EAE75F -:109720006079002801D1FEF731FB002060710CE761 -:10973000F8B50446FEF7FBF80546FEF7C3FD012821 -:1097400000D0002000908E480078022804D08D4878 -:109750008949673009F0B5F9864E203E707D0028B2 -:1097600003D0FEF765FAFEF792FDFEF745FA814851 -:109770007430FEF70FFE21007E4C07464DD0FEF7F9 -:1097800080F80028FAD03B0009F0A0FA06474747C6 -:1097900004471D47B07B0128F0D00098054304D151 -:1097A000A079002801D0022837D172484C30FEF74A -:1097B00003FA012007F025FF0120FEF7E1F87048C9 -:1097C00003210170F5E06B4F74373846D438F978CF -:1097D000C27991421BD13979027A914217D17979B4 -:1097E000427A914213D1B979827A91420FD1F979B3 -:1097F000C27A91420BD1397A027B914207D13978F2 -:10980000407B4906C90F814201D1012100E00021BE -:10981000B07B012802D0002803D0C3E0002908D182 -:10982000C0E00098054304D1A079002801D00128A8 -:109830007ED150487430FEF7CEFE002878D0504DCF -:109840004C49686804228331323008F09DFF387833 -:109850003E214006C20F68680A540622F91C3F30B8 -:1098600008F092FF4349686803228731363008F0D8 -:109870008BFF6868BA7D39210A543E4974310A7EEB -:10988000CB7D12021A4342878A7E4B7E12021A4314 -:10989000C2830A7FCB7E110219430184354974319A -:1098A0008A7F4B7F1102194341843249052293314B -:1098B000243008F069FF2F486D68943001792F46F5 -:1098C000C906C90E20373977007940097877207AA0 -:1098D000002810D0A07F002858D1607A002801D03D -:1098E000132000E005202349E07700202031087094 -:1098F0000120A0774AE01F48717D1030002925D053 -:109900000021A172A989A181B97FE17329460622AC -:109910003F3108F039FFE88BE082288C2083688C87 -:109920006083787F2077607F00994008400000E0E6 -:1099300038E008436077FEF7D2FC617F4000C9073A -:10994000C90F01436177012060721EE00021A172FE -:10995000A989A181B97FE173294606223F3108F028 -:1099600013FFE88BE082288C2083688C6083787FEB -:10997000207709E0B417002054950000ED030000A3 -:10998000680000206B02000001202072194D0020A9 -:10999000287000F01FF8FEF70AF90120696800F04E -:1099A0002FFE06E0FF202D30FDF7E7FF0120FFF737 -:1099B000B1FD1048007800280BD0F6F714FD20798F -:1099C000012804D16079002801D1FEF7DFF90020D9 -:1099D0006071F8BD10B5FEF719F9FEF70DF9FEF745 -:1099E00058F80020FDF7CCFFFEF715F9FEF795F8C3 -:1099F00010BD0000680000208107C90E002808DAA9 -:109A00000007000F08388008F94A80008018C069F4 -:109A100004E08008F74A800080180068C84000060B -:109A2000800F7047F448C07D7047F44800780028E4 -:109A300001D00020704701207047F048007870473F -:109A400010B5EE4A1378EC4CA47DA34202D007F087 -:109A500059F910BD1078032803D1E8490120891D68 -:109A6000887000F04AFE10BD38B5E44DE24CAD1DE3 -:109A7000687801281ED00121684606F041F8684642 -:109A80000078DF49000208F0F9FE68684118606854 -:109A900007F08FF86060DB48A060A18A00200029F1 -:109AA00010D06070032121702073A07ED249FFF78F -:109AB000C7FF38BD7D21C900606807F07AF8606093 -:109AC000D148E9E70121A18202216170EAE7FFB5EF -:109AD000C94C85B01C3461680191A1680391C749E4 -:109AE0001E46891E4A6807995388C91A89B202918D -:109AF000002E04D025463C3521464C3102E0BE4DB7 -:109B0000114664310091BC4F03213C372970002875 -:109B100018D0BA49891E4968403101287ED00228F0 -:109B20005CD003287BD0B9A1BC4808F0CAFF2878D4 -:109B3000002E75D0032804D0B848B4A1093008F02D -:109B4000C0FF35E1A068002804D1B448AFA1663851 -:109B500008F0B7FFA948B149801E40686031408FC6 -:109B600048434018069900F0CEFDE061A348AB4998 -:109B7000801E40686031C08B4843069900F0C3FDE9 -:109B80009E492062891E4B68A44A598FA0686032A2 -:109B9000514386464118E069A04A091A4C3A89188F -:109BA0008C462033E1629D4A597E60325143411810 -:109BB0000818FF3016306062A06261467046081ACD -:109BC000FF38974935388842B1D29649884204D245 -:109BD00092488EA1593808F074FFD0E0508F8F4A18 -:109BE0002169603250430818069900F08CFDE0614D -:109BF00082488A49801E40686031C08B484306997C -:109C000000F081FD2062A068002804D183487FA174 -:109C1000513808F056FF7948801E02E02FE05EE0E0 -:109C2000C1E040685621095A7F4B0029418F2269C3 -:109C30001DD059435118E269891AE1626269E168ED -:109C4000794B5143E26989183922125C5A438A18C8 -:109C50005118FF3114316162C08B216A5843411A97 -:109C600072480818A062A168E06A401A81E059436E -:109C70005118E269891A6268D3398918DDE7C88A00 -:109C8000002802D0A068002804D164485FA13938B8 -:109C900008F017FF59486449801E4068C28B4A4348 -:109CA000216A8E46511AE1628C4656226369125A25 -:109CB000E168D21A5943E3692030CB187146514309 -:109CC000407E594A5918504308184018FF30143044 -:109CD0006062564861466044A062A06848E0D08B4C -:109CE000514A5043226A801A029A5043E062C88A5D -:109CF000002805D0002E19D0B87D002816D0A1E08C -:109D0000002E02D0B87D0028F6D10198002802D09C -:109D10000398002804D141483CA1213808F0D1FE25 -:109D20000198E16AD3380818E06207E0019800283A -:109D300004D08D2035A1C00008F0C3FE2F48801E3E -:109D400042685620815A02980818216A4843400008 -:109D5000FF3014306062D08B334A5043411A33488D -:109D60000818A0622448C07D00280BD0E16A03983F -:109D7000081AFF382A492338884200D3D7E6022040 -:109D80002870D4E606F072FC01461B48006907F013 -:109D9000C7FBE16A081AFF3821491E388842EDD214 -:109DA000012009B0F0BD032802D1144907204870F2 -:109DB0001148E16A006906F0FCFE6860A16A606A09 -:109DC000884202D90098016001E00099086000987B -:109DD000174900680818A8600848801E40688188F4 -:109DE0000798081A00B2002824DD022023E00000B2 -:109DF00000ED00E000E400E05018002072000020B8 -:109E000010270000F82A0000B78913007372635C02 -:109E10006C6C5F6C6D2E73302E630000820400004A -:109E20004707000082020000E204000061FCFFFF1F -:109E3000EF160000002068702E73002E04D0B87D4D -:109E4000002801D00220ACE701204640BE76F7484A -:109E5000807E2946FFF7F4FD0020A2E7F8B5F3481D -:109E60003C30807EF14FF24D3C461C3400280CD033 -:109E70006968208F4988884207D17878002804D102 -:109E8000A920EC49C00008F01CFE06F0EFFB0146DB -:109E9000386907F045FB00F044FC6968228F4B8865 -:109EA0001E18B24202DB521C228702E0401C181826 -:109EB0002087208F0A89904201D1401C2087B88AD0 -:109EC000032802D2401CB88201E0208F8880084617 -:109ED0004030828A408A4988101A401E401886B253 -:109EE00017E028786B6841002033D3485B7F415AE4 -:109EF0005B00C05A081881B2207E0023FFF7E7FDFF -:109F0000002811D0012810D00B20CA49C00108F048 -:109F1000D8FD228FB01A00B20028E2DA6868082162 -:109F20002030417400F0A7FDF8BD208F401C208731 -:109F3000EFE770B5BD4C00261C3466600120A660BA -:109F400000F0C9FBBA481F21801C41700078B74D52 -:109F5000030008F0BBFE044545033745B3482670AF -:109F60003C30807EB24E002806D106F07FFB216C8B -:109F700007F0D6FA002811DC7068228F41888A42E7 -:109F800004D10289511A4181428003E0511A418172 -:109F9000218F41806868206428610BE0A18E706881 -:109FA0004288891A4181A18E4180216C69602961B2 -:109FB000E16C4166706801F0FFFB00280DD09D49FF -:109FC0009E4808E068682861FFF738FA002804D046 -:109FD0009A489849401D08F074FDF6F704FA70BDE0 -:109FE000964894490C30F6E7F8B505468F4A0120AB -:109FF0003C3290758D4C17466576213F00260B004C -:10A0000008F064FE09061D2E4E2B69691C64690068 -:10A0100020768748801C0078022807D0384607F051 -:10A0200042FB002803D1A07EA84200D12676207EE4 -:10A03000002803D1FFF77DFF00F0A0FBF8BD207ED4 -:10A04000002806D006F064FA6676384607F043FB2F -:10A0500001E000F075FB2676F8BDFDF79CFEF8BD2B -:10A060007348801C017802290ED0A17E0078A94295 -:10A070000DD0002804D0FF206E497B3008F021FD70 -:10A08000284606F0D8FAF8BDFFF7E8FEF8BD032829 -:10A0900003D0FF206749813015E0FFF7E5FCF8BDEC -:10A0A000A07EA84204D0FF206249873008F009FD55 -:10A0B0005F48801C01780229E6D000780328ECD0A4 -:10A0C000FF205C498E3008F0FCFCE6E7284606F0ED -:10A0D000B2FA6676F8BDFF2056499D3008F0F1FCD3 -:10A0E000F8BD524988755248801C00E020BF0278B4 -:10A0F0008B7D9A42FAD00078002803D000200022FD -:10A100008A7570470120FAE710B500280BD00128A6 -:10A1100005D04A484749853808F0D3FC09E00320B8 -:10A12000FFF7DFFF01E000F049FB002801D000202D -:10A1300010BD0C2010BDF8B5FF273D4D1F24D037B2 -:10A14000AD1C2E78330008F0C1FD040811030C117A -:10A150000220FFF7C6FF002801D000240FE00C24E6 -:10A160000AE00120FFF7D0FF044603E031493846FA -:10A1700008F0A7FC002C02D02878B042E1D1287862 -:10A18000002804D0FF202B49D53008F09AFC27493D -:10A1900000201C3108761C39887501226A70244A17 -:10A1A00008325070C87508612046F8BD70B5044685 -:10A1B0000120FFF721FCC5B20B20FFF71DFCC0B248 -:10A1C000854204D0FF201B49A73008F07AFC01200B -:10A1D000FFF712FCC5B21820FFF70EFCC0B2854293 -:10A1E00004D0FF201349A83008F06BFC0420C043C2 -:10A1F000FFF702FCC5B21920FFF7FEFBC0B2854293 -:10A2000004D0FF200B49A93008F05BFC08484470DB -:10A2100006481B3007F03FFA05490020891C0870EA -:10A2200002498875FFF787FF70BD000050180020B5 -:10A23000700000200C9E0000142D0100220300007D -:10A24000F74840787047F649891E08707047F3B5A3 -:10A2500081B006F0E9F9F349884200D20846FF30A0 -:10A260009930EF4D87B22878002801D00C20FEBD30 -:10A27000ED4806F08CF9ED4CA076E9490320087012 -:10A2800000268D1DAE70A07E002804D19720E849DD -:10A29000800008F016FC0298012827D0E5490198B3 -:10A2A00048436860012028700146684605F028FC94 -:10A2B00068460078E049000208F0E0FA0D4606F032 -:10A2C000D5F9791906F075FC6060DC48A0600320C0 -:10A2D0002070022060702673A07ED449FFF7B0FB87 -:10A2E000CF48A682072141700020FEBD06F0BEF9CE -:10A2F000394606F05EFC6060D148A0602E700120F7 -:10A300006870E4E7704770B5C5490A78002A01D043 -:10A310000C2089E702220A70C14CC44DA41E1C35D2 -:10A320006060287E002804D0C248C1494E3008F041 -:10A33000C8FB207800234100C248425A616820319E -:10A34000497F4900405A101881B21A461846FFF753 -:10A35000BEFB002804D0B748B549503008F0B1FB27 -:10A36000002068610121E8602976B049888262682E -:10A370005188491E51802887A88655E770B5A8489E -:10A380000124801D4078A94D002813D028461C3098 -:10A390008168AD48814202D8AA7D032A00D10024F9 -:10A3A000814207D9A87D032801D0012000E00020C8 -:10A3B000FFF72FF9A87D032800D10024204633E7BA -:10A3C0009A481C300178491C0170026B81689142E7 -:10A3D00004D8007E012801D001207047002070477A -:10A3E0000020704770B5914C1C34207E032849D161 -:10A3F0000021204620308175894DAD1E68684030AF -:10A40000007C00283ED106F031F988490A690146EE -:10A41000104607F085F8002834DD00F082F96968FD -:10A42000401C4A888018A0860889A28E904229D9AB -:10A430004888088140318A8A498A511A491E081879 -:10A4400086B21AE0287841007E48425A6968203175 -:10A45000497F4900405A1018A28E81B2207E012304 -:10A46000FFF735FB00280DD001280CD0022809D0B9 -:10A470006C486F49C43808F024FBA08E301A00B233 -:10A480000028DFDAD0E6A08E401CA086F5E7F8B5FC -:10A49000664C634F00251C34BF1E012819D00720CD -:10A4A000B91C487006F034F8604E304675761B30A3 -:10A4B00007F011F97878F8F7A5F8B5827868314691 -:10A4C0004088208701203C318875002000F003F986 -:10A4D000F8BD267E52495B48891E0A7853004A68B7 -:10A4E00011462031032E18D0267E022E21D0267E42 -:10A4F000012ED7D1497FC35A4900405A12891818F2 -:10A5000081B200230120FFF7E2FA0028CAD04548B3 -:10A510004749213808F0D5FAC4E76561E560497F0D -:10A52000C35A4900405A1289181881B200230320E7 -:10A53000E9E75626B65A6661497FC35A4900405A30 -:10A540001289181881B200230220FFF7C0FA0121F6 -:10A550002176DAE7F8B5324E0021B61D7078334C1B -:10A560000D46002801D075701AE03078002809D017 -:10A570000121684605F0C4FA684600782E490002B9 -:10A5800008F07CF970684118606806F012FB6060A2 -:10A59000257302206070607E2449FFF751FAA5827E -:10A5A00005F0B6FF214865761B3007F094F81C488B -:10A5B000801E4078F8F726F8002000F08CF8F8BDEF -:10A5C00010B5030008F082FB060A0E0406130916F4 -:10A5D000012000E0002000F037F910BD0120FFF756 -:10A5E00056FF10BD114903201C31087610BD00F044 -:10A5F0003DF910BD0B480E498E3008F062FA10BDCF -:10A6000070B50A4D002821D0054EB61D012828D06E -:10A61000022837D003480649AD3008F052FA03E665 -:10A6200072000020F6050000E99F0000501800208D -:10A630000C9E00007102000010270000F82A0000A4 -:10A64000B7891300142D01002E841300FFF782FF39 -:10A65000A97D9448002901D01F2100E00721417005 -:10A66000E2E5002490487470047600F046F8032078 -:10A67000F7F7C7F805F04CFF8B486C76401E07F0E3 -:10A680002AF8D1E5FFF766FF0120B07000F035F839 -:10A690000420F7F7B6F8C7E582490978022907D1FF -:10A6A00081490A78002A03D148600A6B10180863B0 -:10A6B000704710B57C4A00290BD0012906D0022929 -:10A6C00006D07A497A4808F0FCF910BD401E00E037 -:10A6D000401F906010BD744910B51C39C875002822 -:10A6E00005D0F5F781FE0220F5F778FE10BDF5F7ED -:10A6F0007CFE0120F5F77AFE10BD6A48002101704A -:10A7000001214170704710B504460020002907D090 -:10A71000684808F0B3F80146204608F0AFF8401C3E -:10A7200010BD10B500280AD05E49634A891E4968E9 -:10A73000C98B51435C4A126A891A08F09FF810BD10 -:10A7400010B558480078030008F0C0FA0414140348 -:10A750000A1401F035F900280BD05449574806E097 -:10A76000FEF737FF002804D054485049001D08F078 -:10A77000A8F910BD51484D490B30F8E710B505F068 -:10A7800053FF4849891E4968CA8B4B494A43464989 -:10A790000B6AD21AD33AFF2332330A63984202D2A9 -:10A7A0004748101802E0101A464A801808634648C5 -:10A7B0000A6B824200D81046086310BDF0B53A4CCF -:10A7C000032685B01C3CA67520461B30009001E096 -:10A7D00020BF009806F067FF0028F9D10025A57575 -:10A7E00030480178032903D0007800281DD021E0EB -:10A7F000A07E002803D12D49344808F062F9A77ED5 -:10A80000684606710221417105F030FF0290FF2079 -:10A81000F5300390012168460174A57601A93846F8 -:10A8200006F070FAFFF769FF0CE01E48801D817882 -:10A83000012906D00024009806F04DFF204605B0FF -:10A84000F0BD85700124F6E710B5002803D0002084 -:10A85000FFF71DFE04E01348801E4078F7F7D2FE94 -:10A86000FFF74BFF0020F6F7CCFF10BD10B50E4AE6 -:10A87000114B106AD0600B48801E4068C18B594351 -:10A8800011610146E0314B8843870C7839231C5411 -:10A890008B88C383CB880384098941840220107686 -:10A8A00010BD0000720000206C1800200C9E0000FB -:10A8B000C306000040420F00E20400004303000012 -:10A8C000A5F8FFFFD6F9FFFF1612000029020000CD -:10A8D000F8B5FEF7DEFA0646FEF74CFBF94D0746E3 -:10A8E0006879F94C002809D0012823D0022826D005 -:10A8F00003282ED0FF20F5A1BC3033E0F2481430FD -:10A90000FEF724FB002801D003200FE0EE481430AE -:10A91000FEF788FA002804D020696030007A002809 -:10A9200006D0E9481430FEF7E4FA012068711BE014 -:10A930000220FBE7E4481430FEF7DBFA14E0E248BB -:10A940001430FEF76FFA00280ED1FF20DFA1AE30E1 -:10A9500008E0DD481430FEF7F9FA002804D1FF20A2 -:10A96000DAA1B63008F0ADF86169F7220878104036 -:10A970000870AA79D207120F1043FB22104008700A -:10A98000EA79D207520F104308706B79EF22022B3D -:10A9900004D0012B07D0032B07D00CE0012E06D8E2 -:10A9A000002F04D007E07F1E3E43002E03D010404E -:10A9B0001022104300E010400870287C002811D0BD -:10A9C000687901280ED0BF484A38FDF7F5F8BD492F -:10A9D00020694A3978306269FDF757FB0020FDF79E -:10A9E00063FB04E00846FDF7E7F8FDF780FB6069CC -:10A9F0000078C00606D4A0690078C00602D4E079C9 -:10AA0000002802D0A079002801D0012000E0032016 -:10AA1000FCF7B6FF0320207001202071F8BDAA4882 -:10AA200010B51830FEF7B9FAA74C002802D0002064 -:10AA3000607004E001206070A2484A38A061A1481B -:10AA4000407C002802D06078002805D0A069FDF77E -:10AA5000B3F8FDF74CFB10BD9A484A38FDF7ACF847 -:10AA6000984A20694A3AA030A169FDF70EFB0120FF -:10AA7000FDF71AFB10BD10B5934900220869302379 -:10AA80008276C27601221A544030007C002803D01E -:10AA90000A700021022001E000210320FFF790FD51 -:10AAA00010BD70B5884C6079C20620460169084621 -:10AAB0004030002A01DA002202E0C28A4B89D21813 -:10AAC0000B46C282C0331A7E002A03D0428B4D89C6 -:10AAD00052194283627A002A03D03D2001F0A3F884 -:10AAE00052E08A7E032A4FD0227A002A13D05007E0 -:10AAF00001D4D00601D51E2036E0100701D53D2037 -:10AB000032E0D00705D1900703D470A1734807F055 -:10AB1000D8FF2A2028E060310978002905D0818BF0 -:10AB20004A1C8283C28B91420FD2597F062902D0E0 -:10AB3000197F062905D1018B4A1C0283C28B9142E1 -:10AB400003D2428B818A8A4201D322200CE0827B8D -:10AB5000408A002A0FD006280FD35A48C07B01280C -:10AB600001D03E2000E0082001F05DF82069807EE1 -:10AB7000032809D001E08842F5D20120207000218D -:10AB80000846FFF71DFD70BDFFF775FF70BD10B5DE -:10AB90004C494D48CA7B002A2BD0012A29D0022AD1 -:10ABA00027D0032A04D049A14D4807F08AFF10BDE1 -:10ABB000897B02290FD007291BD00069014640314B -:10ABC0008A8A498A511A891E89B2032900D303212E -:10ABD000028951180BE00069014640314A8A032A74 -:10ABE00001D2018903E04288898A5118491C818079 -:10ABF00010BD0069F5E700B5030008F067F806042A -:10AC0000070B0F12121700290ED00FE0491E022960 -:10AC10000AD90BE0491F012906D907E0072903D00B -:10AC200004E00A390C2901D8012000BD002000BD34 -:10AC3000FEB5054624481430FEF769F9002804D112 -:10AC40003D2022A1400107F03CFF1F4C6069FDF749 -:10AC5000E5FC03216069FDF70FFD6069EF220178D3 -:10AC6000114001702946FDF74BFD002601272B00FE -:10AC700008F02CF80E5D5D085D1D6161155D4D5D90 -:10AC8000613D385D20697121095C002901D00621F0 -:10AC900001E0C030417E6069FDF7FDFD4BE0A06939 -:10ACA000FDF758FD01466069FDF766FE43E0216946 -:10ACB0006069D031FDF729FE216960699531FDF7A2 -:10ACC00032FE38E006190020800000207372635CB9 -:10ACD0006C6C5F736C6176652E630000610200002E -:10ACE0006F08000006216069FDF742FE23E0E0687E -:10ACF00001786069FDF726FEE06881886069FDF7EC -:10AD000023FEE06841886069FDF722FE13E00096AB -:10AD1000019620696030007C002803D069460878DD -:10AD20003843087069466069FDF738FE03E0FA4968 -:10AD3000FA4807F0C6FEFEF7F4F8002804D1F748F9 -:10AD4000F549801D07F0BDFE0C2D07D0072D04D05E -:10AD500020695C210E5260300770FEBD20694030D2 -:10AD60000683FEBDF0B5EE4CDC2021698DB0405C61 -:10AD7000042809D0052834D16031487A002829D028 -:10AD800001204874022026E01022EA31684600F0D3 -:10AD90007AFF21691022C83104A800F074FF6846C8 -:10ADA00005F007F8216908AA6CCA0F46CB67783707 -:10ADB0008A670846FE608030BD60074620376CC752 -:10ADC0000023036343630120A0310876D54948740A -:10ADD000052000E00D20FFF72BFF21690020C03186 -:10ADE00008770DB0F0BDF8B5CD481430FEF78FF8F8 -:10ADF000002842D0CA4C207A00283ED12069002584 -:10AE0000C030007EC74E00280BD0B17B0120FFF779 -:10AE1000F2FE002805D1B17B0420FFF7ECFE0028EC -:10AE200006D020690127C030407F062807D00CE0FB -:10AE300020695A210D526030457402202FE0B17B09 -:10AE40000420FFF7D8FE002810D0B07B030007F0E5 -:10AE50003DFF173F3F3F3F1E3F3F3F3D3F203F3FAE -:10AE60003F292C3F3F3F3F3F3F2F3F0020696A2152 -:10AE7000095CC90702D0C0304577F8BD0C20FFF748 -:10AE8000D7FE20696030817A39438172F8BD07208E -:10AE900005E0FEF7ACF80028F8D075740B20FFF73A -:10AEA000C7FEF8BD00F0FEFEF8BDFFF75BFFF8BD82 -:10AEB0002069002180308160C160057437740620EC -:10AEC000FFF7B6FE206960300570F8BD0920E6E79F -:10AED00000F0B2FEF8BD70B5924DA87B072831D1C5 -:10AEE0008F4CDE2220694188125A491C914229D197 -:10AEF000217A002926D10146E0318B88C28B93420A -:10AF000007D1CA88068CB24203D10A89468CB24264 -:10AF10000AD0844A8689283A9680D380CB881381C8 -:10AF2000098951810121117001221146FDF784FD2B -:10AF300000210420FFF744FB21690020C03148773D -:10AF4000A873E87370BD70B5764CA07B162803D04B -:10AF50007149754807F0B5FD7148002102697148D3 -:10AF60006032117211702838067C0B250123002EE7 -:10AF700006D0027B002A12D14573817303730EE061 -:10AF8000567A002E06D051722288828281740C2259 -:10AF9000027404E022888282817483750574A1732F -:10AFA00070BDF8B55E4DA879800723D5287A0028B2 -:10AFB00020D15C4C0120A17BFFF71DFE002819D198 -:10AFC00068690026C0780127030007F07FFE0E594C -:10AFD0005908592E3B4F0A591459205245590220FD -:10AFE00021E0A07B042804D04F484B49333807F0B8 -:10AFF00068FDA673F8BDA07B082804D04A484649DE -:10B000002D3807F05EFD286960300670F1E7A07BFF -:10B010000A2804D015204049800107F052FD286914 -:10B02000603007720B20A073F8BDA07B0E2804D0FF -:10B030003D4839491F3807F044FD286960300772E0 -:10B040000F20F0E7A07B0F2804D03748324918388A -:10B0500007F037FD1120E6E7A07B0F2804D0324827 -:10B060002D49123807F02DFD1320DCE7FFF76BFFA9 -:10B07000F8BD2869C030417F0629F9D14677F8BD6F -:10B0800029482549813007F01CFDF8BD10B5254C35 -:10B090000020A17BFFF7AFFD002804D1204801224A -:10B0A000017A114301720420A07310BD10B51C4C2D -:10B0B000DD212069095C002903D0217A0122114396 -:10B0C00021726030807A800715D4A069FDF744FCB6 -:10B0D00021696031C872A069FDF740FC21696031C7 -:10B0E0008881A069FDF73FFC216902226031C88197 -:10B0F000887A10438872206900220146C0310B7F94 -:10B10000062B13D06A231B5CDB0703D106234B7786 -:10B110004030028310BD0000CCAC0000E40700000A -:10B120008000002006190020660500000A77F1E77C -:10B13000F8B5FE48817B0020FFF75DFDFC4C012641 -:10B14000002807D120696030407A002802D1207A97 -:10B1500030432072216900255C204552602046540E -:10B16000C831A069FDF7B9FB2169A0699131FDF7EC -:10B17000C3FB2169042208469131B93007F004FB72 -:10B18000EA482838017C0827002906D0017B0029DD -:10B1900012D14773857306730EE0216905468989CC -:10B1A0004182E249A0691439FDF77FFBDF49A069BC -:10B1B0000C39FDF787FB2F74DC480E218173F8BD35 -:10B1C00070B5DA4D0020A97BFFF715FDD84C00289B -:10B1D00003D1207A012108432072A069FDF721FBE9 -:10B1E00000280ED0A069FDF717FB2169DE2250521E -:10B1F000498800F0A2FD002806D0282000F013FDA9 -:10B2000070BDFFF743FF70BDA069FDF7FFFA21692C -:10B21000E0310870A069FDF7F2FA2169E031488059 -:10B22000A069FDF7D1FA2169E0318880A069FDF7B6 -:10B23000D4FA2169E031C880A069FDF7D7FA216905 -:10B24000E03108810720A87370BDF8B5B84CA0792B -:10B25000C0076ED0207A00286BD1B44D0120A97BA5 -:10B26000FFF7C9FC002853D1A0690027C17802224A -:10B2700001260B0007F02AFD0D161308354A4A383F -:10B280004C474A1929444A00FDF707FB2169DA2295 -:10B290005054AE735C20475260310E7038E000F0BD -:10B2A00057FD35E0FFF78CFF32E0A97B0020FFF768 -:10B2B000A2FC002802D1207A3043207220695C2150 -:10B2C0000F52603006700A2018E0A87B0B2802D0CD -:10B2D000207A104320722F742069603046720C204F -:10B2E0000CE0FFF725FF13E0A87B112802D0207A9D -:10B2F000104320722069603007701620A87307E0A1 -:10B30000FFF7D4FE04E000F0F0FC01E0FFF7BEFE22 -:10B31000FDF759FE002803D18649874807F0D1FB85 -:10B32000206900238030016B426B491C5A41426303 -:10B330000163F8BDF8B57D4F787C002802D1387CD8 -:10B34000002801D0FCF7D3FEFCF760FCFCF754FCAE -:10B350000020FCF715FBFCF79CFBFCF75CFCFCF702 -:10B36000DCFBFCF724FCF87B01260025704C002850 -:10B370000FD16079C10705D00220F87320694030F1 -:10B38000857302E0800717D5FE7300210120FFF7C7 -:10B3900017F9F87B012802D0022808D00CE0607968 -:10B3A000C00709D00220F8732069403085736079A6 -:10B3B000000701D50320F87300F0EEFCFFF713FD42 -:10B3C0002079002801D03D8102E03889401C388175 -:10B3D0006079C007206904D072210D544030458245 -:10B3E00003E04030418A491C4182E079002806D0C0 -:10B3F00021696031887C022806D8401C8874206945 -:10B400006030807C022804D93D817D8120696030D4 -:10B410008574B97B0020FFF7EEFB002802D1B87BD2 -:10B4200006284BD120690146C0310A7F062A45D043 -:10B43000497F062942D03D49C97B03293ED160306E -:10B44000807C00283AD1FDF71BFD002836D0FDF79F -:10B4500091FD002832D02169C88801282ED90A46DA -:10B460004032D673908A578A831E9F4201DB0120A7 -:10B4700002E0C01B401E80B22C4B0F8C1B89BB42CC -:10B4800001D3012302E0FB1A5B1C9BB2984200D956 -:10B490001846012800D1D5732A22525C002A11D007 -:10B4A000224A898D52898A4201D3012102E0891AF8 -:10B4B000491C89B2884205D9084603E02169012068 -:10B4C0004031CD7321694A8810180881FFF75FFB6E -:10B4D0002069122215490C3007F056F9FFF7E1FAFE -:10B4E000FEF77EFF002808D010482838817F002909 -:10B4F00003D121698989018486770D481830FDF7C9 -:10B50000AAFD00280FD0A06900788007800F0128CD -:10B5100009D0022807D0FDF7BEFD002803D1054958 -:10B52000064807F0CEFA2069403009E006190020ED -:10B5300080000020CCAC0000DF040000720300009B -:10B540000574F8BD70B5FE4C607900283DD0FD4D06 -:10B55000022811D1FDF775FC002804D17320FA49A7 -:10B56000000107F0AEFA2A69002380329068D168A2 -:10B57000401C5941D16090600026667120790128F5 -:10B5800004D12671A87910210843A871E078012818 -:10B5900016D1E670A87908210843A871FDF7E0FCF0 -:10B5A000002804D1E920E849C00007F08AFA296997 -:10B5B000002380318A68C868521C58418A60C8607C -:10B5C000A079012802D00120A07170BDA67170BDC4 -:10B5D000F8B5DC4CDA4DA269002710780421830706 -:10B5E0009B0FE8790126012B11D0022B0FD0032BE2 -:10B5F00001D0207A2FE06178002905D1AE70A179C1 -:10B600003143A17122E0EF71F8BDEE71F8BD5278BF -:10B61000D3061BD060780028F8D1D006C00E1B28B6 -:10B6200017D8607908436071FDF7CDFC002803D17D -:10B63000C549C64807F045FA206900238030026BEF -:10B64000416B521C594102634163E8790128DCD106 -:10B65000D9E7207A102108432072F8BD70B5B84DA3 -:10B660000446283D287B002600280AD0002976D1F0 -:10B67000667010202070687BA070A87BE0702E732D -:10B680006DE02878002810D0002968D16670072066 -:10B69000207005E02E700A22A91CA01C07F074F887 -:10B6A00028780028F6D1A67059E0287C002839D0E7 -:10B6B000002954D1297CA3480B0007F007FB0D2E6D -:10B6C0002E2E2E2E2E2E2E112E2E22082E0066709D -:10B6D0000C212170A97CA17000698089A0801AE0EA -:10B6E00008216670217000690A468089944960804B -:10B6F0001439201D07F048F891484A38C08FA081BE -:10B7000009E066700B212170A97CA1700069808915 -:10B71000A080A87DA0712E7421E08B498C4807F091 -:10B72000D0F91CE0AA7F86480838002A08D00029F2 -:10B7300015D166701121217000886080AE770EE00F -:10B740007F4A083A9378002B0BD0002907D1667006 -:10B750001221217081886180C088A08096700120AC -:10B7600070BD002070BD77480078012801D00C2002 -:10B770007047734900202839087008730874887767 -:10B78000704770B56F4C064620780D46002804D0EF -:10B790006F486D493F3007F094F90120E660E07290 -:10B7A000E5612070FFF7DFFF002804D09320664991 -:10B7B000000107F086F970BDF8B5624C21780129C7 -:10B7C00002D12178012901D00C20F8BD014605469F -:10B7D000206112220C315A4806F0D6FF012740356D -:10B7E0002F74574D2888FDF712FB002827D0288892 -:10B7F000FDF7C8FB002822D02888FDF77DFB002834 -:10B800001DD02888FDF797FB002818D0FCF7C3F956 -:10B8100020690026C088002824D04A481430FDF74B -:10B8200076FB00281ED02069C030007E002819D089 -:10B83000A97B0120FFF7DFF9002802D012E01220D7 -:10B84000F8BDA97B0420FFF7D6F900280AD12169A9 -:10B850005A20465260314E740220FFF7E9F9206900 -:10B860004030C67320694189491E8AB229898918E6 -:10B870002981297B002902D06E812E7302E069891B -:10B8800089186981014640314B8A9B184B82C388D5 -:10B89000012B01D85B1CC380002A01D072221654F0 -:10B8A000AA7B032A16D0C97B002915D02989008CD0 -:10B8B000814211D2FDF7E4FA00280DD020692A2137 -:10B8C000095C00290BD06989808D814207D3A6705D -:10B8D000E7700CE0A7700AE0A670E67007E06889E0 -:10B8E0000021401C6881A7700520FEF769FE2069D1 -:10B8F0004F210E54A178002930D12030807A0028C1 -:10B9000000D06E810120FBF71BFF20693630FCF769 -:10B91000F8F820693230FCF70EF8E169002008568B -:10B92000FBF7D5FF0120FCF733F9FBF78EFFFCF79F -:10B930002BF90120FCF76AF82069406E0AE000004C -:10B940000619002080000020CCAC00007B0700001E -:10B95000E7080000FCF733F9FFF761F8A87B05283A -:10B9600001D0062816D12069DE224188125A891A90 -:10B9700009B200290EDB01460522E0312430F4F73C -:10B9800023FC012202212069FDF756F82069C0300E -:10B990004677AE7320694189FDF7FDF82069403094 -:10B9A000407BFBF7D1FF6671E671A6712672A67225 -:10B9B0006672267102202070FCF7F9F80020F8BDAD -:10B9C00010B5FE4C2078022801D00C2010BDFCF7E9 -:10B9D000E2F8A078002802D0FFF7ACFC15E000F0F8 -:10B9E0001AF920692030807B012809D0FCF736F94C -:10B9F000FBF730FFF4F7F7FCE07A012803D004E00E -:10BA0000FCF734F9F4E707F05BF9002010BDEB49CF -:10BA1000C872704710B5E94C2078032803D0E84974 -:10BA2000E84807F04EF8E84801218278002A06D05D -:10BA3000002282700171A27904231A43A271626903 -:10BA40001378DB439B0707D1C378002B04D1C17067 -:10BA5000A07902210843A0711078C00606D4A0691D -:10BA60000078C00602D4E07900280CD06078002865 -:10BA700009D1A079002806D1FEF7A2FC002802D047 -:10BA8000207A002802D0FFF755FC03E0FEF7C7FF3D -:10BA900000F0C1F82078012806D0F4F7A4FCE07A81 -:10BAA000012801D1FCF772F910BD38B5C34C2069EB -:10BAB0002030807B012820D1A07A00281DD1684643 -:10BAC000FCF7DCF8002818D021692F20405C012801 -:10BAD00010D1BD4A0D236D460020D356285683420F -:10BAE00008D050738989283A918411462031887191 -:10BAF00001208870A07A401CA07238BD70B5AF4C90 -:10BB000006462078042804D0AE48AD49553006F0EA -:10BB1000D8FF607910210843AB4D6071002E47D0EB -:10BB2000FCF7FDFA61780126084300280ED1687CF5 -:10BB300000280BD0A0694178C90607D00078E979C0 -:10BB40000007C00F884201D1667247E0E078002804 -:10BB500009D0A0694178C90605D10078C00602D491 -:10BB6000FFF7A3FF3AE0FFF7A0FFA069A9790078EB -:10BB70004007C00F884205D0FFF7E4FC6079082138 -:10BB800008436071A069E97900780007C00F884216 -:10BB900001D1FFF71DFD6079304360710020E07135 -:10BBA000A079000702D5A87B022817D0207A13E0DD -:10BBB000022108436071E079401CC0B2E0710128A5 -:10BBC0000CD8687C00280CD07F484A384078C106E1 -:10BBD000C90E052905D2C006002802D0FFF7AAFB2E -:10BBE00001E0FEF775FE2078012806D0F4F7FBFB94 -:10BBF000E07A012801D1FCF7C9F870BD10B56F4893 -:10BC00000078042804D06F486D49B73006F059FF1A -:10BC1000FFF790FB10BD10B50720FBF7B1FE674999 -:10BC20000420087010BD6549312209695054664AE4 -:10BC3000032090738876704710B5604C2069C0303F -:10BC4000007F00281ED06048817B0020FEF7D3FFD4 -:10BC5000002817D02069DC21095C0B0007F036F8BA -:10BC6000071212121212120512006030807AC007F9 -:10BC700008D10C20FEF7DCFF206901226030817AB8 -:10BC80001143817210BD10B5002A0AD0002306E0CE -:10BC9000D41A6418203CE47FC4545B1CDBB293428A -:10BCA000F6D310BD10B503F02AFF0C281CD3434C6B -:10BCB00008212069D03003F023FF002806D0206936 -:10BCC0000421953003F01CFF002803D13C493F4874 -:10BCD00006F0F7FE2169042208469531BD3006F0D2 -:10BCE00053FD0420FEF7A4FF10BD7CB5364E0020A6 -:10BCF000B17BFEF780FF0125304C002802D1207A6D -:10BD0000284320726946A069FCF74EFE6846007819 -:10BD10000021C207D20F684602702069002A02D0B3 -:10BD20006030057401E06030017420695C221152BA -:10BD3000603005700820B0737CBD401A244900B201 -:10BD4000884201DC002801DC012070470020704798 -:10BD500070B51D4D0020A97BFEF74DFF174C002844 -:10BD600003D1207A012108432072A069FCF78EFDDF -:10BD70002169DE2250524988FFF7DFFF002803D0F7 -:10BD80002820FFF750FF70BD2169A069E031FCF762 -:10BD900071FD0520A87370BD70B500F054F8074C14 -:10BDA000094D6079400716D5A97B0520FEF723FFD2 -:10BDB000002810D0207A082108430BE080000020E2 -:10BDC000CCAC00001D0A000006190020640600002B -:10BDD000FE7F00002072FFF738FA00F012F8FFF73C -:10BDE000E0F8A079C00609D5A87B030006F06EFF35 -:10BDF00006060606060604060620A873FFF76BF87B -:10BE000070BD10B525488179490714D5017A0029FC -:10BE100011D12349897B0B0006F058FF080D050D51 -:10BE20000D0D0E0D100D0069002260210A54C03066 -:10BE3000807EFFF7F8FE10BD012100E002210069BD -:10BE4000C030417710BD10B51448817909071DD560 -:10BE5000017A00291AD1124A947B230006F036FF9A -:10BE60001416160B1616161616161616161616167F -:10BE7000161616161716006960300170407C0028EF -:10BE800001D0062000E01620FFF7CDFE10BD0069AE -:10BE9000603001720170917310BD000080000020BD -:10BEA0000619002010B5031D03600020521E04E097 -:10BEB0005C181C60401C2346C0B29042F8DB002096 -:10BEC000186010BD01460A680020002A02D0104602 -:10BED00012680A60704702680A60016070470000DB -:10BEE00000B51A2822D00ADC030006F0EFFE0D117F -:10BEF0001F131F1F191915171F1F1F1B1F002A288B -:10BF000014DD3A38030006F0E1FE030F11091100B9 -:10BF1000002000BD1E4800BD042000BD0D2000BD56 -:10BF20000F2000BD082000BD112000BD032000BD72 -:10BF300010B50C46F5F7C8FB00281AD02046F4F7D8 -:10BF400061FE002812D020780E280BD00F2809D0CF -:10BF5000022807D0032805D00EA1772006F0B1FDF6 -:10BF6000002010BDA078FFF7BBFF10BD09A17D2008 -:10BF7000F4E708A18320F1E710B5F4F7CBFD10BD7D -:10BF800010B5F4F73FFE10BD10B5F4F721FE10BD5B -:10BF9000013000007372635C686F73745F6863697B -:10BFA0002E630000F0B597B00021032004F0F7F8ED -:10BFB0000025FE4E022775807574347C12E0F0680F -:10BFC000E1004018818800290CD0858069460F70F7 -:10BFD0004D7001680291808869468880002168461A -:10BFE000F8F7F0FD2046641EE4B20028E7D117B050 -:10BFF000F0BDEE4BD86019741A80D3E7EB49EC4BD7 -:10C000004A8800201A4200D00120497C002901D032 -:10C01000082108437047F7B504460E460078012111 -:10C02000E34A8140521C114098B0E04A0091518887 -:10C03000E04B994205D0009B002B05D0DC4B194208 -:10C0400002D001201BB0F0BD009BD84A194351809B -:10C050001A9D002D11D00020287022781A980027F0 -:10C06000401C130006F032FE10EF0D152137555D10 -:10C070006A39AFAB85B3EEEDECEF0B28EDD00420C1 -:10C08000E0E702212970A1880170090A41700320AC -:10C0900093E004212970A1880170090A4170E188A8 -:10C0A0008170090AC170052087E006212970A188E6 -:10C0B0000170090A4170E1888170090AC170218903 -:10C0C0000171090A4171A289E81D216906F05CFB32 -:10C0D000A089C01D71E0082129702178082901D1AB -:10C0E00010212970A1880170090A4170E1888170CE -:10C0F000090AC1700520308020466A1D01A9083058 -:10C1000003F047FB00287DD1694630880979401843 -:10C1100053E00A212970A1880170090A41700320A7 -:10C120000AE00C212970A1880170090A4170E18898 -:10C130008170090AC170052030809DE0A088844686 -:10C140004000401C81B2308888425BD3052959D316 -:10C150000E202870002008E0A36842009B5A521964 -:10C1600053701B0A401C937080B26045F4D3318039 -:10C17000B6E08E49487C002873D0401E4874C868D9 -:10C1800021790822C9004518A9882868401808386C -:10C19000A16806F0F9FA0221684601710021417197 -:10C1A00028680390A98868460181002101A8F8F752 -:10C1B00009FD0020A880002E00D0308090E0297872 -:10C1C000802211432970297840221143297029784F -:10C1D0008909890112312970A1880170090A417009 -:10C1E000E288E81CA16806F0CFFAE088C01C308025 -:10C1F0002878410640D5C00972D0012168460171F6 -:10C20000002100E02BE041713188ED1C091D018106 -:10C210001A980390E08840190490001D634D059022 -:10C22000297C68460176002101A8F8F7CBFC074677 -:10C2300030880C303080022F06D0002F50D060E0C4 -:10C240003CE032E01CE059E06946097EE868CA003B -:10C2500080182A7C914202D28188002902D00427CA -:10C260004FE02EE0697C491C69741A99016031889D -:10C2700081800020308044E04C48A188C1802FE0BC -:10C2800029788909890116312970A1880170090A64 -:10C290004170E1888170090AC1702289681DE168D6 -:10C2A00006F072FA2089401D46E72878800980014F -:10C2B000183028702079687002207EE73B480A0415 -:10C2C00001D405271DE00289A3889A4201D00627E0 -:10C2D00017E01E222A70012249043280490C418055 -:10C2E000009800280DD0314D002228881146830087 -:10C2F000032003F0B2FE2078287107E00020308090 -:10C3000003272A48009942888A434280384699E6A2 -:10C31000F7B59AB002000C4606D0172A04D8234875 -:10C32000244B4088984202D107201DB0F0BD2378ED -:10C330005D0601D4DB0901D00820F6E700236D4635 -:10C340002B706B701D462378611C9F06931E1893FB -:10C35000531E19939BB2169302AB1793134BBF0E48 -:10C36000DE883B0006F0B2FC208511F15EF16BF136 -:10C37000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F127 -:10C38000EBF1EAF1E9F1E8F185F1052A71D1042236 -:10C3900069460A7005490A7969460A71E178A37805 -:10C3A0000A021A436946CA80227905E0181900205A -:10C3B000FE710000FFFF00004A7061788906890E57 -:10C3C0000C2923D009DC891E0B0006F07FFC091321 -:10C3D00052155219521B521D520012291CD004DC56 -:10C3E0000E2915D01029D1D114E0162916D01829FC -:10C3F000CCD115E0800700E04007002839DA2AE1B7 -:10C400000007FAE7C006F8E78006F6E74006F4E71B -:10C410000006F2E7C005F0E7C004EEE78004ECE7B1 -:10C420004004EAE7800724D5032AAFD105206A46F5 -:10C430001070487809780002084390800BE14007AB -:10C44000F1D5062A15D31898617880B2012902D057 -:10C4500002299BD101E0022700E01027062269464D -:10C460000A7000228A8001AEA11C0236BA1C179203 -:10C4700018E0B6E04A780B7812021A433280801E28 -:10C48000891C1890B21C1691384603F05CF9169975 -:10C4900018986B469A88C919C01BB61D521C9A8001 -:10C4A000179A80B28242E5D900289CD1D3E00007D8 -:10C4B000B9D51998694682B2072008700020888093 -:10C4C000601C891D11E0437806781B0233430B8002 -:10C4D000C37886781B0233434B806E46121FB388A5 -:10C4E000001D091D5B1C92B2B380042AEBD2002A06 -:10C4F00077D1B0E0C00674D5022A72D3189808210B -:10C5000082B2684601700021C18063780371A01C6B -:10C5100017990EE04678077836023E430E80861C57 -:10C520004E606F46D21AFE88C0180831761C92B24F -:10C53000FE809342EED9DAE76FE076E065E051E005 -:10C5400046E01EE014E00AE000E0A0E0800648D5E6 -:10C5500009206A46107096801698D0800FE0400639 -:10C560003FD50A22684602708680169AC28006E08D -:10C57000000636D50B206A461070169890800291FE -:10C5800069E0C0052DD5022A7FD318980C2182B20C -:10C59000684601700021C18063780371A01C17995F -:10C5A00013E04678077836023E430E80C6788778D7 -:10C5B00036023E434E80061D4E606F46D21AFE88FC -:10C5C000C0180831761C92B2FE809342E9D98EE7FA -:10C5D000C0045AD5012A58D10D21684601708680C1 -:10C5E00039E052E0800450D5052A4ED30E23684628 -:10C5F00003708680C8788B78010219436846C18031 -:10C60000521F0281601D039025E040043DD5012AA0 -:10C610003BD10F20694608701DE0030435D44B78E8 -:10C620000E781B023343244E3381032A2DD31B2F54 -:10C6300027D011236E46337001261F4BF60330437B -:10C64000588048780B780102194368468180D21ED1 -:10C65000C280E01C029020788006800E1B280AD041 -:10C660001D2808D00021032003F099FD12484188BD -:10C67000C90BC903418068461C99F8F7A3FA2846FC -:10C6800053E610206B461870DBE70725F7E708250F -:10C69000F5E700B50022D243074997B04A80032846 -:10C6A00007D1032268460270097901710021F8F769 -:10C6B00089FA17B000BD000018190020FFB589B035 -:10C6C0000020019009981027FE4C1E4615460828A8 -:10C6D00006D0E06901F05EF8002809D03770BEE0AE -:10C6E000288809213843108013980227017016E02A -:10C6F000E169012088710521E269C9029180E1693F -:10C700008872E169F0480881E1690020887328880F -:10C7100020210843288011211398042701701398C1 -:10C720000225801C0290307806900A203070E5487F -:10C730001830049001F00DFA0020059020462C30AE -:10C7400003906DE00998102808D1022D06D00199B8 -:10C750000298A28D401A8270110AC170E08D0A9968 -:10C76000884202D901F0D5F806E0884204D1069843 -:10C77000002801D030701CE00298E18D0170090A98 -:10C78000417012980088401BC01B82B2FF20C01B62 -:10C79000904200D2024607A8009002980021C319D7 -:10C7A000E08D01F041FA3070002805D0C0B2832836 -:10C7B00058D0E08D20833EE00598002804D0206CFE -:10C7C00000790A282CD336E06846808BC119C9B29B -:10C7D0000191022D0DD01399019A4978914202D10D -:10C7E000228F824208D00191206C0178032908D061 -:10C7F00023E0084613994870206C0178042906D07C -:10C8000007E000790A2818D20120059008E0E18DA0 -:10C81000818002990198081802900198281885B221 -:10C820000399049801F098F9002804D1129800881F -:10C83000401BB84286DA022D0DD00998102806D187 -:10C8400002990198A28D081A8270110AC17012987B -:10C85000058000203070206C0078032802D0002072 -:10C860000DB0F0BD0220FBE7F8B5964A0026126D28 -:10C87000002A2ED0401F934D84B24035E88A2346CB -:10C880000833AF8AC318BB4222D88B784F781B027B -:10C8900010183B4303701B0A43700B79CF781A02C0 -:10C8A0003A438270120AC2700471220A427122460F -:10C8B000491D801D05F068FFE88AA41D001980B29B -:10C8C0008049E882096D002208180270427000E079 -:10C8D00009263046F8BD30B57A4B028840339B8A32 -:10C8E000934213D9774B1C6DA3185C781D782402F2 -:10C8F0002C430BD05C791D7924022C436404640C16 -:10C90000A41D1219028000200B6030BD822030BDB2 -:10C91000F0B585B0074600266846068155E00198C7 -:10C92000417802780D0215434179027908021043DB -:10C9300000044AD43D8003A8002301220090520243 -:10C940001946284601F070F9040044D1684601896F -:10C9500001820198417902790902114343780278F2 -:10C960001C021443AC421CD10A041AD44A0401210B -:10C97000520C89030A430096C1788078090201436A -:10C980000023204600F0C9FF040010D10199487926 -:10C990000A79000210430122D20310430871000AF1 -:10C9A000487101A904A8FFF796FF0400D1D00199AE -:10C9B00000964878097800020843694600238A896E -:10C9C000194600F0AAFF822C05D101A902A8FFF7A1 -:10C9D00082FF0400A3D06846068109E001994879E6 -:10C9E0000A79000210434004400C0871000A4871A3 -:10C9F00001A902A8FFF76FFF0028EFD0822C02D018 -:10CA0000204605B0F0BD0020FBE7F7B584B0144622 -:10CA10000646002700F079FF2A480025006D00280F -:10CA20002FD0059801282CD12046FFF771FF070071 -:10CA300027D1002E29D06846058118E00199487851 -:10CA40000978000208432080019B009558791979E4 -:10CA50000202D8780A4301029F78587839431F7838 -:10CA600000029B1D384300F058FF002805D101A9A2 -:10CA700002A8FFF730FF0028E0D0822800D1002074 -:10CA80000746002E01D00F48056500F042FF3846EA -:10CA900007B0F0BDF0B597B00021042003F07FFB94 -:10CAA000084F00243D467C8040356C73AC73287B76 -:10CAB000B96CC00008380E18B08800280DD00120CD -:10CAC000694603E02C190020012800000870306836 -:10CAD000019000216846F9F77AFBB4803C65AC828E -:10CAE000EC8217B0F0BDFE4B9864184640300173DD -:10CAF0001A803838D861CDE7F949002049880A07FB -:10CB000000D501200A06120F01D002221043CA05E7 -:10CB100001D5042210438A0501D51022104349058E -:10CB200001D520210843EE494031497B002901D03D -:10CB3000082108437047FFB5A7B00400289816469F -:10CB40001B9022D00178E6484D0642882292024688 -:10CB500040320092002D14DB8A06920E1E2A0ED05F -:10CB6000229A5205520E10D13288172A0DD3009AFC -:10CB7000927B002A09D1DB4D229AAA4205D0CA092C -:10CB800006D08A06920E122A02D003202BB0F0BDE6 -:10CB9000D348826C0098007B2590C000083810189C -:10CBA0001F9048060CD40098407B002808D00099BC -:10CBB00088731F99289808601F9884800220E5E7F1 -:10CBC000002718A90F7069460F72C54902AA0A64A6 -:10CBD000309A4A6410A90F850F861B981D4600786D -:10CBE00020908106BE4B601F24901A462C32219261 -:10CBF0002898DA691833890E1E93401C0B0006F042 -:10CC000065F81FFDFD11FD1AFD90FDFCFDFBFDFA11 -:10CC1000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFD5B -:10CC2000FDF5FD00032C7BD10320287017226A70CC -:10CC30000022AA70E0E2052CF5D1417802780902C1 -:10CC40001143A74B10AA19831185C278807812026C -:10CC500002435A8300297DD091427BD80021184697 -:10CC600081720181491E01841E9800F072FF052027 -:10CC70002870A81C1D900220009021991E9800F099 -:10CC80006BFF002803D047E018A90870F0E2944831 -:10CC90002030807C012803D002206870102002E040 -:10CCA00001206870022022908D48303023900022AD -:10CCB00020A9239802F06DFD00282AD120A8007831 -:10CCC0002299814225D132880099801C511A8142D3 -:10CCD0001FDB83481D99C08D0870000A48701D989D -:10CCE00020A9801C1D9000981D9A801C00902398FC -:10CCF00002F04FFD20A909781D9840181D9000985A -:10CD0000401880B2009021991E9800F025FF00285D -:10CD1000CDD0009802288DD10A2018A908706CE2A5 -:10CD20006DE0072C6BD341780378090219436C4BF3 -:10CD30008446198310AB1985C37880781B02184389 -:10CD4000674B0029588305D0814203D8012118463A -:10CD5000817200E0A4E061464B7909791B020B4324 -:10CD6000038100218173104600F014FD00280FD1CB -:10CD70005B480121C26991710522C369D2029A8080 -:10CD8000C2699172C26958491181C06900218173D9 -:10CD90005349E01F08841B98C01D48621E9800F08C -:10CDA000D8FE07202870681C009001201D904C4878 -:10CDB0000021C18530E01D98012815D04848C1697F -:10CDC000897901292FD000981038C17B807B090216 -:10CDD000014300980170090A41700098801C00907E -:10CDE0001D98801C80B21D903D4809E013E2BEE111 -:10CDF0007AE1D8E00DE2A0E080E03BE01EE2B6E0A0 -:10CE0000C18D00980170090A41700098801C009043 -:10CE10001D98801C80B21D9021991E9800F09CFEE8 -:10CE2000002802D006E0818DD3E731881D98081ACA -:10CE30000428C0DA1D98012800D16DE72848C1698F -:10CE40008979012903D0828D26498A4205D1818DB5 -:10CE500000980170090A417009E000981038C17B00 -:10CE6000827B0802009910430870000A48701D98E0 -:10CE7000801CC1E1072C01D0152C78D141780378B2 -:10CE800009021943164B198310AB1985C3788078B2 -:10CE90001B02034312480029438301D0994201D960 -:10CEA0000120F1E60E480121817200210181817388 -:10CEB000052C07D024981B99C0B2491D02F043FCF1 -:10CEC0000028BAD100200649C04308841B98009668 -:10CED0000195007818AB8006800E1CAA002105E0A1 -:10CEE0002C190020FFFF000001280000FFF7E6FBDF -:10CEF0000746FE4810A9008B08857EE1032CBCD1B3 -:10CF0000402210A90A86417802780802F7491043A6 -:10CF1000088310A9088520A9009131886B1C491E3F -:10CF20008AB2002100F080FE18A90870002830D1D4 -:10CF30000B20287020A8008833E0052C9DD180218B -:10CF400010AB1986014640780B780202E7481A4375 -:10CF50000283CB7889781B021943E44B104619846D -:10CF600010AB1A85E24A914202D307208CE697E083 -:10CF70003F23DE4A9B021943118421AA0092328882 -:10CF80006B1C521E92B200F04FFE18A908700028C8 -:10CF900003D08328B1D102272FE10D20287020A8CB -:10CFA0008088401C28E120990C22C9095143C91CE2 -:10CFB0001E91A14204D92098400671D500201BE1A2 -:10CFC000417800780902014310A801851B98007878 -:10CFD00042062898C01C1D90002A62DA05206A4685 -:10CFE00010721B980078C00944D00822684602726B -:10CFF0008181A01A87B268468782289806901E9879 -:10D00000201A81B26846C1811D980490401805F02D -:10D010001CFC079006982599C0190890491E08A87D -:10D02000017102A83099F9F7D2F807460021684645 -:10D030000172002F1BD0022F18D1009808A9007B85 -:10D040000979401E884210DDA848289A836CC900DF -:10D050005A50816C08A80079C000001D0C5200983D -:10D060000099407B401C4873C7E00527EAE0062092 -:10D0700069460872002000901E980021201A209016 -:10D0800082B21B9B10A8DB1C008D00F046FC014601 -:10D0900018A80170002268460272832903D003E0B9 -:10D0A00093E00720E4E702271B98007840060ED59E -:10D0B0008E484188C90506D510AA018B128D914270 -:10D0C00001D100214162002018A9087094E0FF21DD -:10D0D000013110A80186018D8448018320990184C3 -:10D0E0001D994162132085E0052C6ED341780378A9 -:10D0F0000A021A4310A90A859446092269460A724F -:10D100000021009101222499D20311438AB2C178EF -:10D11000807809021B9B01435B1D604600F0FDFB0C -:10D1200018A90870002269460A720122520210A949 -:10D130000A86832802D0002805D099E06B48098D23 -:10D14000018302277EE06948006D002807D0204651 -:10D150001B99FFF789FB18A9087000284DD12B46B1 -:10D16000324620461B9900F024FB074645E01B98F9 -:10D17000022C4078009064D1002801D0012860D1B1 -:10D180000A2168460172009901731AAA00200099C9 -:10D19000FFF73BFC0146684641730021817302A8FA -:10D1A0003099F9F714F80746002168460172012109 -:10D1B000890210A80186022F08D04C48006C8079A3 -:10D1C000002807D018A9087020E04BE047490098D4 -:10D1D000088337E0002F03D0812018A9087031E0C0 -:10D1E0001AAA01200099FFF710FC18A9087000285E -:10D1F00003D119202870012030806846007A002869 -:10D2000004D002A83099F8F7E2FF0746002F2BD090 -:10D2100018E0062038E522993448090711D5012C79 -:10D220000FD10B2269460A72C08888810021042030 -:10D2300002F0B5FF082010A90886BFE62098400636 -:10D2400010D50327294810AA4188128E1143418026 -:10D250005005400E04D01F99289808601F988480BC -:10D26000384693E404200FE518A8007800280ED073 -:10D27000012028701B980078687010A8008DA87095 -:10D28000000AE87018A80078287105203080174837 -:10D2900010AA4188128E91434180E1E7FFB506460E -:10D2A0009FB000201B903178012088401149124A1C -:10D2B000084010A908860D494988914203D00028EA -:10D2C00004D0080702D5012023B0F0BD219D00271E -:10D2D0002F7020983C46018810A8018418A8077177 -:10D2E00000F013FB6846077202A907E02C19002022 -:10D2F0000102000009F80000FFFF0000FA48016485 -:10D3000001464031826C1A91097BC90008395718CF -:10D3100022994164307801282AD0022809D00328B4 -:10D3200079D12878800980011D302870EE48B188B5 -:10D33000C1803078022804D12878800980011B3010 -:10D34000287001A8009010A8008CEB1CC01E82B2AF -:10D35000B088002100F068FC0028E1D1B188697034 -:10D36000090AA9706946888810A9C01C08842DE1A3 -:10D37000717918A801713079012802D00228CFD123 -:10D38000E6E0D9487F2340881B010246184010ABD5 -:10D390001886802840D006DC102810D020280ED017 -:10D3A00040280AD120E0FF38013859D0FF38013831 -:10D3B0006AD0FF38FF3802387ED0052491E0D006CD -:10D3C00001D5082000E010201B9004206946087257 -:10D3D0000020888118A800900195318919AB1CAAFA -:10D3E0001B98FFF76BF977E0BF4B3289188B8242AD -:10D3F0004FD10A221B92002973D101A9009110A9D3 -:10D40000098C6B1C491E8AB2002100F00DFC18A982 -:10D4100008710B2017E0F6E0B34B3289188B82427B -:10D4200037D10C221B9200295BD101A9009110A9D0 -:10D43000098C491E8AB21946098C6B1C00F0F4FB5A -:10D4400018A908710D2028706946888810A9401C09 -:10D450000884042069460872A348008B888140E054 -:10D46000A14A3389108B834213D112231B930029C5 -:10D4700037D1536A002B05D00091128C00F04DFA81 -:10D4800018A9087113205EE097483289038B9A42ED -:10D4900001D00424E7E016221B92026D002A09D174 -:10D4A000F268002A06D002651A98328A82821A9A95 -:10D4B0000020D082002900E02FE012D1B88839681E -:10D4C000FFF7D2F918A9087100280AD1B8882B46AD -:10D4D00018AA396800F06DF90446022818D0042C07 -:10D4E00016D0B88800280FD06846007A002804D0EB -:10D4F00002A82299F8F76BFE0446012069460872DB -:10D50000386803900020B880002C5FD0052C7BD0B9 -:10D510006846007A032873D0A5E018201B900029E4 -:10D5200005D071483189018300210165D9E76E4832 -:10D530000246017E18320120FFF767FA18A9087128 -:10D540000028CED119202870012010A90884C8E72E -:10D550001A98407B002856D0307AC0001358001D1E -:10D560000193105A1D9000291AD100F0D2F906201B -:10D5700069460872002000901D980F3882B2019809 -:10D580008178437808021843019B0021DB1C00F0DE -:10D59000C4F918A90871002269460A72832830D09C -:10D5A000002118A8017110A80184012168460172A8 -:10D5B000019803901A981A99407B401E48731A9854 -:10D5C000807B002802D01A99401E887310A8008E14 -:10D5D0007F21090102468A431DD04348002200886A -:10D5E00011468300042002F038FD3F483178017174 -:10D5F00010A94088098E08433B4948800FE003E0AA -:10D600002BE002242FE00524374810AA4188128E0F -:10D610009143418027E034494A8882434A806846E2 -:10D62000007A002805D03048416C02A8F8F7CFFDF9 -:10D63000044618A80079002815D01B9868700120AE -:10D6400028702948008BA870000AE87018A8007993 -:10D650002871052110A8018405E02348416C02A827 -:10D66000F8F7B5FD044600F054F91F48408840051E -:10D67000400E20D11A98807B00281CD1B888002841 -:10D6800019D0209910AA098811842299009139682B -:10D6900018AA219BFFF74FFA044602280BD001205D -:10D6A000694608723868039002A82299F8F78FFD3E -:10D6B00004460020B88010A8018C209801802046E4 -:10D6C00002E600B50022D243074997B04A800428F9 -:10D6D00007D1022268460270097901710021F8F72A -:10D6E00076FD17B000BD00002C19002010B5394C94 -:10D6F00003780022216C012B02D0022B44D126E0BA -:10D700000B78002B01D0042B03D10A71226C03216A -:10D710001170216C83880A79D200921D8B52216C82 -:10D720000A79D20008328918C2880A80216C0389DC -:10D730000A79D2000A328B524289206C0179C900E1 -:10D740000C314252216C0879401C087120E00A74A7 -:10D75000226C81889180216CC288CA80226C0189E8 -:10D760001181226C41895181216CC068C860616C53 -:10D77000206CF8F72CFD0146022807D0206C007CB5 -:10D78000002802D1002903D0812010BD832010BDC4 -:10D79000002010BD8178012909D100880521C90226 -:10D7A000884202D0491C884201D1002070470520E0 -:10D7B000704710B51488844201D2052010BD17248B -:10D7C0001C701080421E491C581C04F0DDFF002014 -:10D7D00010BD00002C19002010B50446FEF759FFBB -:10D7E0002046FFF76EFF10BD10B58B78002B11D0CF -:10D7F00082789A4207D10B88002B0BD003E0091DD9 -:10D800008B78002B08D08B789A42F8D103880C884B -:10D81000A342F4D1002010BD812010BD10B5002915 -:10D8200002D001290DD102E00088000501E0008846 -:10D830008004800F07D001281CD0022809D00328BB -:10D8400010D0812010BD002901D0032010BD02207E -:10D8500010BDF6F754F803280CD004280AD000288D -:10D8600006D009E0F6F74BF8042803D0022803D0CD -:10D87000052010BD002010BD0F2010BDF3B5C81C41 -:10D8800080080E46800081B0B04201D08620FEBDE7 -:10D89000FE4C354626600198A08000202081E08063 -:10D8A00014E0B807A978800D0843F94904F0E6FFB1 -:10D8B000E088401CE080B80607D42089401880B278 -:10D8C00020810199081A8019A8600C352F887807E3 -:10D8D000E7D40020A072FEBDEC480C22C18800896C -:10D8E0005143081880B2704770B51346E74A45188F -:10D8F0009488AC4201D2842070BD126810180A4688 -:10D90000194604F041FF002070BDE04901208872F3 -:10D910007047DE49002088727047FFB589B09704D0 -:10D920000E460546BF0C029200F017FA040021D003 -:10D93000002069460873D548807A012812D0012159 -:10D940002046FFF76BFF002815D12078400609D547 -:10D950000221684601730582218841828682C7823E -:10D960000C9806900298000407D500273E46012532 -:10D9700001970CE001200DB0F0BD2078A178800760 -:10D98000800D0843C249019004F078FF0D460298CB -:10D9900040040AD50198A84207D12088E178800583 -:10D9A000800F00020843B04201D3AE4201D90720E4 -:10D9B000E1E7B81980B20290A84201D90D20DAE758 -:10D9C0006846007B002804D003A8F8F7FCFB002879 -:10D9D000D1D10198A8420BD12088032109028843A4 -:10D9E00002998905890F0902084320800298E07096 -:10D9F0001298002800D007800C9800280CD02078BE -:10DA0000000609D4A0683A4680190C9904F0BCFEBF -:10DA100020881021884320800020ACE7FFB59B4D73 -:10DA200081B00E46E8882F680C21009048433C18CE -:10DA30009749039804F022FF0A462889E11B84468F -:10DA40000C314018318880B28B0601D5002300E0EC -:10DA500013461818AB8880B2834202D8842005B0E0 -:10DA6000F0BD0098894D401C80B2E88021800D995E -:10DA7000002900D00C600399A170E2702188039DF9 -:10DA80008908AD058900AD0F294303252D02A9435F -:10DA90009505AD0F2D0229430425294321800C99BA -:10DAA000002900D0088001998978A171019909881D -:10DAB000A1803178890601D50B9905E0734962444C -:10DAC00092B20A81991AC919A16000212173327892 -:10DAD000920601D50020C2E700910B9B0A9A049997 -:10DAE000FFF71BFFBBE710B5044600F036F900282E -:10DAF00006D06649641ECC8000210170084610BD26 -:10DB0000012010BD002803D0401E0880002070476F -:10DB10000120704710B55D490288CB889A4201D335 -:10DB2000822010BD0B680C21514359180B88CC780A -:10DB30009B059B0F1B02234341608C7904738C88E7 -:10DB40004481C3818968521C0161028002810020E6 -:10DB500010BD012101827047FEB505460020C0437B -:10DB6000088068680F468178684681706868018817 -:10DB70006846018000218171288A2C88A04200D348 -:10DB800004462C8234E0288A401C2882301D6968B3 -:10DB9000FFF72AFE002829D139883E48814201D169 -:10DBA000601E38806888A04227D33088F1788005CD -:10DBB000800F0002084302906946301DFFF714FEF3 -:10DBC000002813D12989334881421AD000213046D8 -:10DBD000FFF724FE002809D12A890298824205D144 -:10DBE000E968B06804F0A3FD00280AD0641CA4B260 -:10DBF000204600F0B2F80600C5D1641E2C828220B7 -:10DC0000FEBD7C80B079B871B088B880308838812A -:10DC100030788007810DB078014379810298B8810E -:10DC2000B06838610020FEBDFFB585B014460F46D0 -:10DC3000059800F092F8050037D01448BE05807AA8 -:10DC4000B60D012815D000212846FFF7E7FD002872 -:10DC500029D1287840060CD5012168460170059924 -:10DC600081802988C18006814481F8F7ACFA0028B8 -:10DC700019D12888AA788107890D11438005800F62 -:10DC8000EA7800021043BE4211D005E0841900205A -:10DC900001020000FFFF0000374A914207D3611ED6 -:10DCA000814204DD0B2009B0F0BD0120FBE7864274 -:10DCB00001D90720F7E7801B82B2A24200D9224691 -:10DCC0000E98002800D002800898002804D0A86888 -:10DCD0008119089804F058FD0020E4E770B5144657 -:10DCE0000D4600F03AF800280DD001882980002C5C -:10DCF0000DD0017880788907890D01431E48814243 -:10DD000003D2012002E0012070BD0020207000201D -:10DD100070BD70B516460D4600F01FF804000DD01A -:10DD20002D882580FF2E16D0A807A178800D0843E6 -:10DD3000114904F0A3FD002E06D101E0012070BDC1 -:10DD4000FF31FF31033189B2A170A8088000890535 -:10DD5000890F08432080002070BD0849CA8882428C -:10DD600007D3002805D00C22096850430C38081846 -:10DD70007047002070470000010200008419002055 -:10DD8000F0B585B00E4605460020694608707078EB -:10DD9000FE49C00003900C58FD4F002D0ED0022DFF -:10DDA00073D0002C72D02078801E030004F08EFF08 -:10DDB00009837F7F7F83797F77727F00002C03D177 -:10DDC000F4A16B2004F07DFE2078801E030004F097 -:10DDD0007DFF09065E5E5E19365E50545E00307847 -:10DDE000062803D0EBA1762004F06BFEB8687168BA -:10DDF000806A032204F0C8FC0120694608700028EC -:10DE000035D1CEE730780C2803D0E2A1812004F090 -:10DE100058FEE0680078002806D0B8687168C06BCA -:10DE2000102204F0B1FC28E0B8681021406B04F027 -:10DE300008FDB868C16A406B0A787168F1E730780C -:10DE40000D2803D0D3A1942004F03BFE04206946A2 -:10DE5000087071684878097800020843B9684A6A0E -:10DE60005178127809021143484069468880084673 -:10DE700008E0C8A1AF2004F024FE6846007800281E -:10DE80008FD06846F5F740FD8BE727E01CE0C1A185 -:10DE9000B420F0E7B8686169406CFEF71CF8A1692E -:10DEA00000E0E168B868406CFEF715F803E0B9A13E -:10DEB000E32004F006FEB8682146406CFEF70BF83C -:10DEC000B24A039900205050022D07D0002D05D0F2 -:10DED000012D03D0AFA1EF2004F0F3FD05B0F0BD9C -:10DEE00010B501780124012902D0022910D112E0D5 -:10DEF0004268A748002182600170A4486C38C1665E -:10DF0000016741678167928902214C3001F083F9F2 -:10DF10000024204610BDFF209EA11C3004F0D1FD3E -:10DF2000F7E7F0B505469EA103C997B01491139089 -:10DF3000002108A8017595482A781030944C049067 -:10DF40002078012605903746A068130004F0BEFE35 -:10DF50000CEE073098EFF5EBEAE9E8E8E7EE217020 -:10DF60000124FF2655360D4610A80570457001F0B6 -:10DF700063F90746012803D086A1304604F0A1FDCD -:10DF800010A93846FFF7FCFE2046641EE4B20028C4 -:10DF9000EAD10A20694608706846029501F02AFA1B -:10DFA000002803D0FF207BA15E3066E00026E6E279 -:10DFB000006B0078C0072ED06846077001F01AFA8F -:10DFC000002804D0FF2073A1713004F07AFDA0680E -:10DFD000406CFDF777FF050004D1FF206DA1743080 -:10DFE00004F06FFD08984078C1006848455006204D -:10DFF0002870A068016869600069A8606448C01C56 -:10E00000E860284601F0F6F9022804D0FF2061A15B -:10E010007E3004F056FDA068006B00784007C5D53F -:10E020006846077001F0E6F9002804D0FF2059A1E6 -:10E03000863004F046FDA068406CFDF743FF050004 -:10E0400004D1FF2053A1893004F03BFD08984078AB -:10E05000C1004E48455006202870A06801686960DC -:10E060000069A8604A48401DE860284601F0C2F9EE -:10E0700002289BD0FF2047A1933004F022FD95E7B2 -:10E08000A8680028684632D001712879012833D069 -:10E09000022804D0FF203FA1AD3004F012FD3B4820 -:10E0A00010221030A96804F06FFB38481030014688 -:10E0B000103148602078C1062DD5EF21084020702E -:10E0C000032069460870314810300290684601F01C -:10E0D000B3F80446022808D0002C06D0012C04D046 -:10E0E000FF202CA1BE3004F0ECFC69462AE1077148 -:10E0F000264820304160DDE7244A04986C3AD16715 -:10E1000041608160C1600621A86803F087FA1F4959 -:10E1100010310860C9E720210843207046E758E124 -:10E1200014E1D6E0A3E046E007E000E031E2FF20A2 -:10E1300018A1E73004F0C5FC21E2172269460A72F3 -:10E140000F7089788A08297992008907890F0A4314 -:10E1500069468A70FB210A4029794907C90F89005D -:10E160000A4369468A70EA888A80826C02A96846F6 -:10E1700001F082F9002804D0FF2006A1F73004F056 -:10E18000A0FC052108A8017568460DE0FC190020D7 -:10E19000A00000207372635C736D2E6300000000AA -:10E1A00004411A8800A48000017A0187A068002633 -:10E1B000806C0F90E7E16846077001F01BF90028BA -:10E1C00003D0FD49FD4804F07CFCA068406CFDF7DD -:10E1D00079FE060004D18320F749800004F071FC29 -:10E1E000A068406CFDF76EFE070004D1F348F249C9 -:10E1F000801D04F066FCF2488068406CFDF762FE0A -:10E20000040004D1ED48EC49093004F05AFC0898A8 -:10E210004078C100EB4846500A203070287A3071AF -:10E220006868E74DB060A868806C30611720307373 -:10E2300077613046B46101F0DDF80446022808D069 -:10E24000002C06D0012C04D01120DB49400104F041 -:10E2500038FC2046316AFFF793FD297805220A40F1 -:10E26000042A00D0A2E6FB22114029702AE0059979 -:10E270004908490021708A071CD5FD2211402170F0 -:10E280000F216A46117017211171806C0290684647 -:10E2900000F0D2FF0546022808D0002D06D0012D3F -:10E2A00004D0C648C4493A3004F00BFC69462846FD -:10E2B000FFF766FD2078052101400429D2D1FB211A -:10E2C00008402070072008A90875BD4880780876A6 -:10E2D0006CE66846077001F08DF8002804D0B74856 -:10E2E000B549543004F0EDFBA068406CFDF7EAFD41 -:10E2F000060004D11320B049400104F0E2FBA068FD -:10E30000406CFDF7DFFD070004D1AC48AA495A3044 -:10E3100004F0D7FB08984078C100AA48465007206F -:10E320003070A068406870606868F760B060304620 -:10E3300001F060F8040004D0A0489F49653004F063 -:10E34000C0FB316A2046FFF71BFD2FE668460770C9 -:10E3500001F050F8002804D0984897497A3004F02A -:10E36000B0FB08984778A068406CFDF7ABFD06004D -:10E3700004D151209049C00004F0A3FBA068406C78 -:10E38000FDF7A0FD040004D18C488B49823004F0D5 -:10E3900098FB8C48F900465008182A694260092009 -:10E3A000307068687060A868B060A889B0818548DE -:10E3B0006C3830611030B4617061304601F01AF889 -:10E3C000022804D07D487C49903004F07AFB2F75F8 -:10E3D000ECE57C4B00212033197002216A46117054 -:10E3E00001932979002902D0184601709BE07449F5 -:10E3F00003220C314968FB230A708A7800259208B1 -:10E4000092001A408A70027A1207D20F4A706D4A3F -:10E4100020325560C37ACB70837A13724469537A81 -:10E4200024785B08E4075B00E40F2343537284699C -:10E43000D460FD242340C4692478E407A40F234357 -:10E440005372036A13614D710D71437A5C4A9C07E4 -:10E450000C32A40F1268012C04D19478A407A40FE5 -:10E46000012C1DD09B089B00437293785B0702D45C -:10E47000437A5B0728D5037A13AD5B075B0FDC009B -:10E480005B00E318147864001B19DBB2DC082C5D18 -:10E490005D076D0F06235B1BDC40A3079B0F14E099 -:10E4A000037A54795B065B0F1C404C711379062587 -:10E4B0002B400B71DB002343414C63708B789B082E -:10E4C0009B005B1C8B70D0E700238C78FB252C40D5 -:10E4D000457A6D07ED0FAD002C438C70047A64070C -:10E4E000640F0C705178012908D1017A090705D50C -:10E4F000032108A801750221017614E0022B1ED029 -:10E50000012B21D02F4B00216C3B049AD96751601D -:10E510009160D16019467C310A4610325160417ACF -:10E52000FB2211404172684600F086FE040021D0B3 -:10E53000012C20D02049244804F0C3FA1BE003201A -:10E5400008A908750F76EEE70598000704D5C320E3 -:10E550001949800004F0B5FA1A4C0D211034E01C62 -:10E5600004F06FF9204610304460022008A90875B5 -:10E570000E94D8E7002669462046FFF701FC08A85C -:10E58000007D002802D00DA8F5F7BEF9304617B07F -:10E59000F0BDCB2008498000CCE5F0B5054697B02A -:10E5A0000C460020694608700548064E2F78483E04 -:10E5B000017882680AE0000094E10000090200008E -:10E5C000A0000020FC1900201F0300003B0004F005 -:10E5D0007DFB0BA8820724394A6977778D9AA800BA -:10E5E0002B20694608730CA903A8FDF7A1FC00289D -:10E5F00003D05349534804F064FA53490D9804F08A -:10E600003DF952480160524869680160AA68426059 -:10E6100001910820694608708CE08A0610D5DF2237 -:10E620001140017003202070484810304168A160FB -:10E630004068002802D00020207177E00120FBE72D -:10E64000102256E02B2069460873404903A85C3924 -:10E65000FDF76EFC002804D03A483949293004F00F -:10E6600030FA04201BE02A206946087303A8102210 -:10E670000230696804F088F807A810220230A968FF -:10E6800004F082F8314903A85C39FDF751FC0028F9 -:10E6900004D02C482A493A3004F013FA052020709F -:10E6A000666043E02A79002A02D0012211430170FA -:10E6B00005206946087028798880A868029039E0AA -:10E6C000106B4023018819430180106C6968102287 -:10E6D00004F05AF82AE0FB22114001700620694636 -:10E6E0000870A96868680291019023E0CB0703D005 -:10E6F0000222114301704AE70F2020701720207179 -:10E70000906CA06012E0537A9B0706D0126B44789D -:10E710001388FF3401342343138004221143017012 -:10E7200004E0084806497C3004F0CBF968460078DC -:10E730000028E0D06846F5F7E7F828E701207047A1 -:10E7400094E100004D03000040420F000C1A00202D -:10E75000AC00002070B504780D460646230004F096 -:10E76000B5FA0B1C181C1C1C1C07181C1C181C00C0 -:10E770000021052001F013FDB068007805280CD0B9 -:10E78000FA480022008811468300052001F065FC4C -:10E7900003E00021052001F002FD002D0ED0002035 -:10E7A000287029463046FFF7F8FEF1482978005DC9 -:10E7B000884201D1032070BD022070BD0021304687 -:10E7C000FFF7EBFE002070BD30B5E8494B68497A91 -:10E7D0000A0111460C315C5C032C0CD00446002568 -:10E7E0002034257125725C5CA500AA18641C5C5459 -:10E7F0009850032030BD062030BDF0B504462646B3 -:10E8000020360D463279012008218FB0002A0CD025 -:10E81000012A21D0022A2BD0032A04D12A78052AE2 -:10E8200001D1297000200FB0F0BD01203071606867 -:10E8300000280AD0A0690170616841602169816087 -:10E840006169C160FFF7C0FFEDE70720287020690C -:10E8500068606069A86009E029780729E3D102208F -:10E86000307105202870C248203868600320DAE73C -:10E8700029780529D7D1A08910280AD9103880B263 -:10E88000A081A1681023091803A86A6800F033FE6C -:10E890002DE0102804D0C1B20BAA1020A76809E00F -:10E8A00010232269A16817E0491EC9B2401EC0B2F8 -:10E8B0007B5C13540029F7D100280AD0401EC0B257 -:10E8C00080211154002102E0401EC0B211540028E2 -:10E8D000FAD1626910230BA907A800F00CFE1023DF -:10E8E00007A903A86A6800F006FE0320307160687B -:10E8F000019003A8029005206946087029466846E1 -:10E90000FFF728FF8FE7F0B5044626460D46203670 -:10E91000317901208DB000290BD0012938D002298E -:10E9200005D12978052902D10920287000200DB0D1 -:10E93000F0BD217D6846CA07D20F02738807C10F58 -:10E9400068460174012203A905A800F0CCFD04A9C2 -:10E95000012205AF481D00F0C6FD0722B81CE16882 -:10E9600000F0C1FD07A807220130216900F0BBFDBE -:10E970006068019009A80290102305AAA16800F020 -:10E98000BAFD01203071052168460170294621E059 -:10E9900029780529CBD1062203A8E16900F0A3FD5F -:10E9A00004A806220230A16900F09DFD042106A8FA -:10E9B00000F091FD6068019007A80290102303AA5F -:10E9C000696800F098FD02203071052069460870E2 -:10E9D00029466846FFF7BEFEA9E7F0B5074685B0B1 -:10E9E0000C460020694608703E466248203632795F -:10E9F0008179133801250078130004F067F9180DA8 -:10EA0000FEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EF9E -:10EA1000EEEDECEBEAE9E8E7B968039100291BD0D9 -:10EA2000012269460A7003220A710A224A71396971 -:10EA30000291397900297DD0039A1278002A7AD080 -:10EA40000C2A78D2130004F041F90BF009F0354D8F -:10EA50008498B1F2EEEDF0000020BEE30021062024 -:10EA600001F09DFB3879072866D1424D133D287887 -:10EA7000022802D000287FD101E0002028700398EE -:10EA80000079C11F0A2901D30A249AE16870394824 -:10EA90000722C01F039900F026FD01203071287065 -:10EAA0000220694608703348801F01903869401C75 -:10EAB00002903BE211293DD12E4D133D0228DAD1BF -:10EAC00068686978007A884201D9062479E1039957 -:10EAD00026481022491C303800F005FD032028701C -:10EAE000022046E11129E6D1224C133C0428C2D170 -:10EAF0000520207003991D481022491C203800F081 -:10EB0000F2FC062030717869032101706268516857 -:10EB1000416016492039816021460C31C160C91D10 -:10EB20000161017D537A49084900DB07DB0F194376 -:10EB3000017502E064E34AE387E1D3688361FD2362 -:10EB40001940537A9B07DB0F5B001943017511696C -:10EB500079E10229AFD1002868D005206946087103 -:10EB60000398407848713869029045E3601A0020A4 -:10EB70004C2D0100C700002073E011299BD1F84CF7 -:10EB800006286ED1A0680399406B1022491C00F042 -:10EB9000AAFC0620694608703869029000200871B6 -:10EBA00001466846FFF7D6FD072058E00B299AD1A9 -:10EBB000EB4C07287ED1A0680399C06A0222491C49 -:10EBC00000F091FCA0680822006B17E00EE10AE358 -:10EBD000F3E2D3E2B9E2AEE28EE265E24FE248E26E -:10EBE00028E2FDE1E7E1D0E1C6E1BFE1ADE16DE1A1 -:10EBF0004AE12BE1DCE0BFE0B0E076E00399C91C1C -:10EC000000F071FC0621684601703869029000210D -:10EC100068460171FFF79EFD20461330417949088F -:10EC200049003EE041E01DE001E05CE0E2E2112944 -:10EC300090D1CB4C08283DD1A0680399806B10225D -:10EC4000491C00F050FC06206946087038690290A3 -:10EC50000020087101466846FFF77CFD09202070FE -:10EC6000BDE227E0082989D1BD49092822D10398AE -:10EC700042788868C16B0A700399006C0622891C6F -:10EC800000F031FC062168460170386902900021CD -:10EC900068460171FFF75EFDB14813304179FD22EE -:10ECA0001FE041714FE230717EE01129C0D1AC49C3 -:10ECB0000A2801D0082484E088680399406C102257 -:10ECC000491C00F010FC062168460170386902906A -:10ECD000002168460171FFF73DFDA14813304179DD -:10ECE000FB221140DDE707246BE0217802297DD16A -:10ECF0009B490128FBD162684A6014780846002CC1 -:10ED00005DD106216A46117039690291072111719E -:10ED1000029902240C70CA785207520FCA704B79BC -:10ED20005B075B0F4B718B795B075B0F8B71D207B6 -:10ED300001D18A714A7105460A794078824200D22F -:10ED40006A7087480722133000F0CDFB00202C703A -:10ED5000307101466846FFF7FDFC40E22178042946 -:10ED6000C5D1032871D108227E48616800F0BBFB41 -:10ED7000032030710420E3E121780429B7D1784FD2 -:10ED80000328B4D1774808220830616800F0ABFB53 -:10ED90000420307178684168002907D00321217070 -:10EDA000002121714068A060032531E20320C7E102 -:10EDB000207803289BD1207900281BD00446002C02 -:10EDC00014D0062168460170386902900221684615 -:10EDD0000171029805210170447000216846FFF717 -:10EDE000B9FC012168460170042100E0A2E1017133 -:10EDF000447105E25A49A06849680028486001D179 -:10EE000059484860052030717869032202704A68C9 -:10EE10004260544A8260524A0C32C260D21D026182 -:10EE2000027D4B7A5208DB075200DB0F1A43027552 -:10EE3000CB688361FD231A404B7A9B07DB0F5B0095 -:10EE40001A4302750969C16194E1F2E02178092948 -:10EE500086D14349032891D10420087006206946D1 -:10EE6000087038690290112008710298032101701E -:10EE7000401C1022616800F036FB00216846FFF755 -:10EE800069FC00203071AAE12178092992D1052876 -:10EE900090D13449626820391020401EC0B20B5C0A -:10EEA000145CA34203D000200424307189E70028B9 -:10EEB000F3D107203071786904210170284949682D -:10EEC0004968416027498160103952E120780A2859 -:10EED000BED106216846017038690290112168464A -:10EEE0000171029804210170401C10221D4900F09C -:10EEF000FAFA00216846FFF72DFC194810214078E6 -:10EF00006268091AC9B2101800F0E5FA6068019049 -:10EF100013481330C178C9070FD08179002902D175 -:10EF20004079002809D00820307109E1214668465F -:10EF3000DFE0054601287CD06AE1072069460870B9 -:10EF400000216846FFF706FC4BE120780E289DD192 -:10EF50000348616881604969407808700920A2E629 -:10EF6000B4000020501A00202C2D0100C80701D049 -:10EF70000A20E3E00F2096E620780F2859D1A068F8 -:10EF80003861207938730B20F3E620780428F5D116 -:10EF90006168F84C0822A068C06900F0A4FA0C204F -:10EFA000307178690722B9690270A268D36843603A -:10EFB000D2698260DDE020780D28DFD1ED4D6168F7 -:10EFC000A86802230269806900F095FA0D2030716B -:10EFD000786906210170A9688A68426009695FE062 -:10EFE00020780C28CAD1E34D6168A8686A78006A65 -:10EFF00000F079FA6878AA681021091A126AC9B271 -:10F00000101800F068FA062168460170386902900D -:10F01000112268460271029810220170A968401CF2 -:10F02000096A00F060FA00216846FFF793FB0E20A2 -:10F030005AE0A2E020780F287CD1062069460870AB -:10F04000386902900B200871029C0720C94D20707E -:10F05000A86802228169601C00F045FAA8680822AD -:10F06000C169E01C00F03FFA00216846FFF772FB1F -:10F0700080E7880701D5102060E0132013E6207890 -:10F080000F287AD1A0683861207938731120307147 -:10F09000786906210170B7498968C9684160B64935 -:10F0A0008160B549091D64E020780C2865D1B14D17 -:10F0B0006168A8681022406A00F015FA06216846C7 -:10F0C0000170386902901121684601710298082187 -:10F0D0000170A968401C496A102200F004FA00215E -:10F0E0006846FFF737FB122030710921684601702E -:10F0F0002146FFF72FFB1CE720780F281AD10621A5 -:10F1000068460170386902900821684601710298CA -:10F1100009210170974989680A78D207D20F427095 -:10F1200049680622801C00F0DEF900216846FFF7DE -:10F1300011FBA2E769E0480705D5142030710920CA -:10F1400069460870F2E61620ADE520780F2853D105 -:10F15000A0683861207938731520307178690621EC -:10F160000170844989688A684260096981608249BE -:10F17000891DC160FFF728FBDBE63DE020780C2805 -:10F1800043D161687B4C1022A068806A00F0ABF923 -:10F1900006206946087038690290112008710298AB -:10F1A0000A210170A168401C896A102200F09BF9B5 -:10F1B00000216846FFF7CEFAC5E76E481330407964 -:10F1C00000280ED0C10703D06A480621017006E06E -:10F1D000800701D5082000E00A2066490870002554 -:10F1E00016E017205FE56349002805D00020307144 -:10F1F00008700A206946087068460078002804D024 -:10F2000000216846FFF7A6FA00255A480021017040 -:10F21000284605B0F0BD10B5584BFF245C7258600D -:10F2200019721A80002204E0491EC9B20B010C3386 -:10F23000C2540029F8D110BDF0B5504E0546717A80 -:10F2400001208DB0FF2971D00127727A73681101F6 -:10F250005C180C31595C8900091F64586A70217868 -:10F260000B0003F033FD0B960709272C59818D4ABB -:10F270004F5492002F7075E0214620310A91097990 -:10F280000120002902D001296DD10EE060680190B3 -:10F2900005A802900D21C01C00F01DF9032205A84D -:10F2A000A16800F020F90A984EE02978052974D168 -:10F2B000062156E029462046FFF725FB69E0214656 -:10F2C0002031069109790120002902D0012964D159 -:10F2D0000EE06068019007A802900822E16800F043 -:10F2E00002F9082209A8A16800F0FDF806982BE0B1 -:10F2F0002978052951D10A2133E02946204600F01A -:10F3000005F946E029462046FFF777FA41E029460D -:10F310002046FFF762FB3CE0214620310591097948 -:10F320000120002903D0012937D116E056E060689A -:10F33000019007A802900822A16800F0D4F80821E3 -:10F3400009A800F0C8F805986946077105200870FB -:10F3500029466846FFF7FEF91BE0297805291CD1EC -:10F360000B212970002018E02946204600F014F9EE -:10F370000FE00000B4000020242D0100601A0020DE -:10F380002946204600F038F903E029462046FFF7D9 -:10F39000D5F9002801D001280CD12562717A736853 -:10F3A00009010C315A5C521E1206120E5A5401D039 -:10F3B00003204AE70328FCD0737A726819011D0103 -:10F3C0000D312C46515C7172FF270D3417550C35E9 -:10F3D000545D002C02D0FF2903D173720DB0F0BD33 -:10F3E00021460C010D34145DFF2CF9D109010D31BA -:10F3F0005354F3E770B5A24C0546607A21460346A4 -:10F400004A6811E0010108460C30105C08E0401E1B -:10F41000C0B286008E199659AE4201D1042070BD4B -:10F420000028F4D10D31505CFF28EBD19448002125 -:10F43000007A01E0491CC9B2884204D90E010C3699 -:10F44000965D002EF6D1884201D8052070BD0801D6 -:10F450000D30135461722846FFF7B6F9032806D021 -:10F46000617A626809010D31515C617270BD284694 -:10F470002830FFF7E1FE70BD10B504780123012CA0 -:10F4800014D10C78022C11D30B23137083785B07F3 -:10F490005B0F537002220A708088002805D0830019 -:10F4A00000221146062000F0D8FD0023184610BDAA -:10F4B0000EB50022012105280AD0062807D168468A -:10F4C00001700221017142710021FFF766F80EBD43 -:10F4D00068460170F6E7002202E0491EC9B24254B4 -:10F4E0000029FAD1704703E0521ED2B28B5C8354DC -:10F4F000002AF9D1704730B505E05B1EDBB2CC5C69 -:10F50000D55C6C40C454002BF7D130BD3EB50446E9 -:10F5100020300D4602790121002A02D0012A39D17A -:10F520000EE06168019157490291012101710520A6 -:10F530006946087029466846FFF70CF9014629E03C -:10F540002878052826D169681022A06800F087F87D -:10F550006868C07B000606D54A4AA06810231032AE -:10F560000146FFF7C8FF1022A168E06800F077F8B5 -:10F57000A068C07B000606D5424AE068102310321E -:10F580000146FFF7B8FF07202870A0686860E068B0 -:10F590000021A86008463EBDF0B5044626460F4649 -:10F5A00020363179012089B0002909D0012905D1FF -:10F5B0003978052902D10C203870002009B0F0BD3F -:10F5C000606803AD01900295022203A8A168FFF7CD -:10F5D0008AFF0222A81CE168FFF785FF0C21281D85 -:10F5E000FFF779FF01203071052069460870394620 -:10F5F0006846FFF7AFF8E1E710B5034620331C7902 -:10F600000122002C04D0012C10D0022C25D11EE0A8 -:10F6100001211971C16806220A70406848601948C2 -:10F62000801F8860801CC86008460CE00C780C2C99 -:10F6300013D102221A71C268052313704968516000 -:10F64000806890601046FFF7BFF8024605E0087832 -:10F650000B2802D10D2008700022104610BD10B5F5 -:10F66000002409E00B78521E5B0023430370401C0A -:10F670000B78491CD2B2DC09002AF3D110BD00007E -:10F68000601A00202C2D010070B50D46040012D028 -:10F69000002D10D02101284603F0D3F81022544940 -:10F6A000284603F071F8524801210838018044804F -:10F6B0004560002070BD012070BD70B54C4E002427 -:10F6C0000546083E11E0716820014018817BAA7B45 -:10F6D000914209D1C17BEA7B914205D10C22294696 -:10F6E00003F025F8002806D0641C30888442EADB49 -:10F6F0000020C04370BD204670BD70B50D460600A9 -:10F700000AD0002D08D03A4C083C20886188401C63 -:10F71000884203D9042070BD102070BD3046FFF729 -:10F72000CCFF002801DB0F2070BD2088616800013C -:10F7300040181022314603F027F82088401C208012 -:10F740002870002070BD70B514460D001FD0002C2D -:10F750001DD00021A170022802D0102817D108E086 -:10F76000687829780002084311D00121A170108027 -:10F770000BE02846FFF7A1FF002808DB401CA07023 -:10F78000687B297B000208432080002070BD012097 -:10F7900070BD70B5054614460E000AD000203070CA -:10F7A000A878012807D004D9114908390A8890425D -:10F7B0000BD9012070BD002C04D028782070288837 -:10F7C000000A50700220087010E0002C0CD049682C -:10F7D0000001411810391022204602F0D5FF287888 -:10F7E00020732888000A607310203070002070BDDC -:10F7F000D8000020734909680160002070477149F2 -:10F8000008600020704701216F4A704B002803D028 -:10F81000012805D06E48704791630020187001E000 -:10F82000D1631970002070476A4901200860684858 -:10F83000801C70470422684B6649002805D05A6036 -:10F84000086901221043086108E008694008400087 -:10F8500008619A605C490020C031886000207047D0 -:10F860005C490622002808D0012809D002280DD0C2 -:10F8700003280FD05648401C70470869904302E0A7 -:10F8800008699043801C0861002070470869904314 -:10F89000001DF8E708691043F5E74E494A6A02433C -:10F8A0004A62002070474B494A6A82434A620020FC -:10F8B00070474849496A0160002070474549CA6954 -:10F8C0000243CA61002070474249CA698243CA6143 -:10F8D000002070473F49C96901600020704730B57A -:10F8E0000546002072B601463A4A384C4032002D97 -:10F8F00011D00123012D0CD0022D02D0072062B6B9 -:10F9000030BDA3706478002C01D09363F7E7916356 -:10F91000F5E7A170F9E7A170F9E72F4904208860A5 -:10F9200029490020C03188602849012008702B49EE -:10F930000A688023120A12021A430A6028490860E2 -:10F94000704722480078704770B5EFF31080C50704 -:10F95000ED0F72B61D4C6078401C0006000E607002 -:10F9600003D120A1CC2003F0ACF86078012806D1A7 -:10F97000A078002803D01749012040318863002D6A -:10F9800000D162B670BD70B5EFF31080C507ED0F02 -:10F9900072B60E4C6078002803D112A1DC2003F06F -:10F9A00090F86078401E0006000E607006D1A078C6 -:10F9B000002803D00749002040318863002D00D182 -:10F9C00062B670BD0004004040000040E800002026 -:10F9D00004200000000500400003004000E400E0B7 -:10F9E00000E100E07372635C736F635F706F776553 -:10F9F000722E63008107C90E002808DA0007000F85 -:10FA000008388008B94A80008018C06904E080087E -:10FA1000B74A800080180068C8400006800F704711 -:10FA2000B44948788978884201D3401A02E02122FB -:10FA3000511A0818C0B27047AE4923314878897806 -:10FA4000884201D3401A02E02122511A0818C0B29C -:10FA50007047A849463148788978884201D3401ACE -:10FA600002E02122511A0818C0B27047A04810B510 -:10FA70000C300168FF22120291430122D20311438C -:10FA800001609C49002023314870887023394870F8 -:10FA90008870463148708870974801F0FCFD9648A0 -:10FAA000401C01F0F8FDF2F723FE00F015F910BD3F -:10FAB00020207047B4E770B50C4605460026FFF7D6 -:10FAC000AFFF8C49A04214D30A46203A00232046B7 -:10FAD000641EE4B200280BD08878105C2870887807 -:10FAE0006D1C401CC0B288702128F0D18B70EEE7ED -:10FAF000012600F0F1F8304670BD202070479BE7EA -:10FB000070B50C4605460026FFF796FF794923316C -:10FB1000A04214D30A46203A00232046641EE4B2D1 -:10FB200000280BD08878105C287088786D1C401CE9 -:10FB3000C0B288702128F0D18B70EEE7012600F06A -:10FB4000CBF8304670BD202101700020704710B501 -:10FB50000446FFF77EFF2070002010BD70B50C46F4 -:10FB60000546FFF776FF63494631A04215D30A46A2 -:10FB7000203A00232046641EE4B200280BD0887887 -:10FB8000105C287088786D1C401CC0B288702128D9 -:10FB9000F0D18B70EEE7002400E0584C00F09CF8A8 -:10FBA000204670BD70B50C460546212904D9FF20BA -:10FBB00053A1473002F085FF4C484068103840B2EE -:10FBC000FFF718FFC6B20D20FFF714FFC0B2864240 -:10FBD00007D2FF204AA14D3002F073FF01E0F2F797 -:10FBE000C7FD21462846FFF766FF0028F7D070BD05 -:10FBF000F8B5404E07462336B1787078212200F0E0 -:10FC000060F8354623353B4C00280ED0A17860784B -:10FC1000212200F056F8002814D0A9786878212213 -:10FC200000F04FF800281AD025E032497078C91C3E -:10FC30000F547078401CC0B2707021281BD1002076 -:10FC4000707018E02B49607820390F546078401CA0 -:10FC5000C0B2607021280ED1002060700BE02549F1 -:10FC6000687826310F546878401CC0B2687021282B -:10FC700001D100206870B1787078212200F021F85D -:10FC800000281DD0A1786078212200F01AF8002801 -:10FC900016D0A9786878212200F013F800280FD038 -:10FCA000F2F748FD144801F0FEFC012149038842A7 -:10FCB00003D013A1C12002F004FF0F4801F00BFD97 -:10FCC000F8BD401C884205D0904201D1002901D0E6 -:10FCD000002070470120704710B5074801F0E3FC91 -:10FCE000002801D1F2F715FD10BD000000ED00E085 -:10FCF00000E400E08C1A0020EB0000200720000048 -:10FD00007372635C736F635F72616E642E63000075 -:10FD100010B5284801F0BFFC002803D026A11D2003 -:10FD200002F0CFFE2348401C01F0B5FC002803D0B0 -:10FD300021A1212002F0C5FE10BDF1B5224D6F6852 -:10FD400001261C4801F0AFFC1A4C002803D1002604 -:10FD5000601C01F0C0FC1D4A1D490120506000BF1D -:10FD600000BF00BF00BF00BF00230B604B60009BC3 -:10FD70006B60106000BF00BF00BF00BF00BF08681D -:10FD8000002802D148680028F9D048680028E4D14A -:10FD9000002E04D06F60601C01F085FC07E0601C41 -:10FDA00001F081FC0028D3D1024801F094FC00202E -:10FDB000F8BDC2E7ED0000207372635C736F635F90 -:10FDC0006563622E6300000000E5004000E0004033 -:10FDD00000E1004030B5EFF31081CC07E40F72B6BC -:10FDE0001D4A116910230D461D431561002C00D1D9 -:10FDF00062B61A4DC406E40E0120A0402C680442ED -:10FE00000DD0C8060AD4EFF31080C007C00F72B639 -:10FE1000116999431161002800D162B630BD20BF3D -:10FE200040BF20BFEAE70E4908784A78401CC0B2BC -:10FE3000904200D008707047084A094820BF40BF70 -:10FE400020BF4178037843701368002B02D10378F8 -:10FE50008B42F3D00020704700ED00E000E200E0AC -:10FE6000EF000020FEB5F44C07466068FF213E011C -:10FE700081552178FF2913D00901083141583246B4 -:10FE8000491E083209020192090A805800F0CBF994 -:10FE9000002802D02478254615E06168207888552E -:10FEA0002770FEBDE448426801981158280100906F -:10FEB0000830105800F0B7F9002806D1DE482C466B -:10FEC000416800980D5CFF2DECD1DB4821014068B2 -:10FED00085554754FEBD70B5D74A04460020157AB3 -:10FEE00053680AE00201561C9E5DA64203D10C3203 -:10FEF0009A588A4204D0401CC0B28542F2D8FF20F2 -:10FF000070BDF8B5CC4F3E7801F042FB0146FF2EA4 -:10FF100071D03401254678680835405900F083F9DE -:10FF200002280CD97868405901F025FB01F030FB1C -:10FF300001467868405900F076F902285BD8BE493E -:10FF40004868025D0A70A11C425C002A0CD0521E57 -:10FF5000425441590122D20589180902090A415126 -:10FF60003046FFF77FFF30E0631CC25C0092221D29 -:10FF700094468258002A10D001239B029A420FD93E -:10FF80009205920D43595703DB191B021B0A43517B -:10FF90006346C3589A1A920A09E0FF21C1540AE045 -:10FFA000435952039A181202120A42510022425433 -:10FFB0003046FFF757FFA0480C344168C2680098EC -:10FFC000095980001258009890479B4C2078FF28D0 -:10FFD00011D0000161680830085801F0CCFA01F036 -:10FFE000D7FA01462078626800010830105800F006 -:10FFF0001AF9022886D3F8BDF8B51C4615460E46F8 -:020000040001F9 -:100000000746FF2B03D38DA1D12002F05AFD8A4869 -:10001000FF21C760456004720674017000224270BF -:10002000104604E00201521C401CA954C0B2A04278 -:10003000F8D3F8BD70B5804C06466578207C8542C3 -:1000400003D37EA1E42002F03CFDE068A900465005 -:100050006078401C6070284670BDFFB581B01D46B9 -:10006000FF2401F095FA744F064679780198814291 -:1000700003D872A1F22002F024FD6F480021037A18 -:10008000406810E00A019446521C825CFF2A25D089 -:10009000019FBA4205D162460C328758029A9742B4 -:1000A0001ED0491CC9B28B42ECD8FF2C18D02101BC -:1000B0004A1C019B83540B460C33029AC250039B8B -:1000C0005D4F0022012B0ED00B1DC25001239B025D -:1000D0009D4216D9AA05920D08D008E00C46E0E72B -:1000E000FF2005B0F0BD0B1DC550EFE71A465303C6 -:1000F0009B190E461B0208361B0AAA1A8351920A44 -:1001000009E0002D00D101256B039B191D022D0A6A -:100110000B460833C550891C42543D463E78204664 -:10012000FFF7A0FE2878B04214D0000169680830BB -:10013000085801F020FA01F02BFA29786A680901C1 -:10014000083152580146104600F06DF8022801D2DD -:10015000FFF7D7FE0198C4E770B50C46054601F0DD -:1001600017FA064621462846FFF7B5FEFF2814D0A9 -:10017000314D04012046696808300858314600F0C6 -:1001800052F80121090340186968A41C095D400B5D -:10019000002901D08902081870BD002070BDF3B598 -:1001A00081B00F460198FFF796FEFF282AD0224E15 -:1001B0003578726829460C4604E0844205D025460D -:1001C0002301D45CFF2CF8D11CE0FF2C1AD0A542EF -:1001D0001CD10801105C3070FF2815D000010830D8 -:1001E000105801F0C8F901F0D3F90146307872686F -:1001F00000010830105800F016F8022806D2FFF768 -:1002000080FE03E00020FEBD01F0BDF939460198F3 -:10021000FFF7A2FF22017168FF23541C0B558A5C73 -:100220002B01CA54FEBD401A00020121000AC90573 -:10023000884200D900207047D81A00207372635C8E -:10024000736F635F74696D65722E6300F0B500248F -:100250001C4A01211C4B0803546018601B4B1C6096 -:100260001B4C20601B480469E443E406E61704695C -:10027000761C10252C430461174C6160174D2960D2 -:1002800000E020BF1F68002FFBD0002E03D10769BC -:100290001026B743076190688005906801D5104A21 -:1002A00010436960A160002119600121084A090317 -:1002B0001160F0BD10B50446FFF7C8FF20600020B4 -:1002C00010BD000000C5004080E100E000C100401A -:1002D00080E200E000ED00E000C3004000C000400C -:1002E00000FCFFFF70B51F490A68002A17D00023E1 -:1002F0001D4601244A68521C4A60092A00D34D60F9 -:100300000E792246B2400E6816420AD072B60B68C9 -:1003100093430B6062B649680160002070BD052000 -:1003200070BD5B1C092BE5D30FA1362002F0C9FB81 -:10033000F5E701201049800508607047EFF3108150 -:10034000CA07D20F72B601218140064803681943DB -:100350000160002A00D162B6EBE70248002101608B -:1003600041607047F40000207372635C736F635FD9 -:100370006576742E6300000000E200E00120810732 -:100380000860704701208107486070471048C068C6 -:10039000C00700D0012070470D488068C00700D01A -:1003A000012070470A484069C00700D0012070470B -:1003B0000748C069704706498A69D20306D589692A -:1003C0008907890F814201D10120704700207047C1 -:1003D00000040040F8B5FE4C607A217A88421BD0B8 -:1003E0000126FC4D0027207A215C14200A46424356 -:1003F0005019037C052B10D0062B19D0072B23D0C6 -:10040000437C012B2BD02120F3A1400102F059FBAA -:10041000617A207A8142E6D1F8BD0674207A401CC8 -:100420004007400F2072491CC8B2AA58022109E0B7 -:100430000674207A401C4007400F2072491CC8B245 -:10044000AA5803219047E3E70674207A401C40072E -:10045000400F2072491CC8B2AA580821F2E747741D -:10046000207A401C4007400F2072491CC8B2AA588D -:100470000721E7E770B5DB4D05202871DA48002435 -:1004800044700470183044720472D84801F003F9C3 -:10049000D7480474AC71D748611E41606C70847792 -:1004A000C4772C704477D448022104704470D34838 -:1004B000047528300470491EFAD10120F2F7DAF9E8 -:1004C0000020F2F7D7F90120A870F2F765F8CC48C0 -:1004D000F2F774F8CB4C2070CB48F2F76FF86070ED -:1004E000F2F76CF970BD10B5F2F793F9C54C2078AE -:1004F000F2F782F86078F2F77FF8BA4CE0780028DB -:1005000005D0FFF740FAF1F7A8FE0020E07010BD1B -:1005100070B5B44CA078002805D0FF20AEA1B23051 -:1005200002F0CFFA70BDA079002804D1FF20AAA163 -:10053000953002F0C6FA0125A5700026A671207933 -:10054000042114225043A34AAA4C80180174606805 -:10055000401C04D0481F60600120F2F78BF9002096 -:10056000F2F788F9F2F76CF9F2F773FAF2F7F8FAA2 -:10057000A1480078022804D0032804D1E07F002895 -:1005800001D0A57700E0A677F2F74FFA70BD0346D9 -:1005900090490420142242435218203A127F002A24 -:1005A00004D0401E0006000EF4D1704714224243CE -:1005B00051180A46403AD362012220390A7770471F -:1005C000012805D0032805D1002903D10020704758 -:1005D0000029FBD010B4874C00236377864A00289B -:1005E00090700CD002280AD007291AD20B007B4445 -:1005F0001B79DB189F441505070D0F111300D370ED -:1006000003E01B2000E03A20D0700120607710BC8E -:1006100070475820F8E77720F6E79620F4E7B520F2 -:10062000F2E710BC0020704710B573484078F2F72D -:1006300014FA80B210BD411E1422504310B5654A11 -:100640008418203C032902D8207F002803D162A10E -:100650006E4802F036FA207F012804D001205EA106 -:10066000400202F02EFA0020207710BD70B55E4CDB -:1006700060782178884201D1012500E00025F2F759 -:1006800088F9F2F7EAF961782278914201D10121E3 -:1006900000E00021A942EBD170BDF7B58CB0064651 -:1006A0000D98401EC1B20090029114204143494868 -:1006B0000D1828460195007C2D1D07282BD1444F8D -:1006C00000203C7A797AA14222D03A5D02998A428E -:1006D00007D1002803D040A14D4802F0F2F90120D3 -:1006E00001E0002804D0611C4907490F795C3955A5 -:1006F000641C6407797A640FA142E6D1002807D010 -:10070000787A002802D0787A401E00E007207872BC -:100710000199012008740099324C0D9803290FD8D3 -:10072000142148432B4940182038007F002807D067 -:100730000198007C012807D00E98C07A012807D0C4 -:1007400025A1344802F0BDF90E98C07A012839D1AC -:100750000198204B007C02280FD01D4C607A217A32 -:10076000401C4007400F884203D11BA12A4802F0D9 -:10077000A8F901990120487434E12079029A0146D0 -:10078000904206D0014614277843C018807C9042DE -:10079000F8D12279824208D1217914225143C91813 -:1007A000897C21710121617107E014224243D21832 -:1007B00014277943927CC9188A7414220521504366 -:1007C000C01881740E98007A06283BD226E00000FB -:1007D000D41B0020EC1A00207372635C72656D2ECE -:1007E00063000000001C0020BC1B0020071C002030 -:1007F000C01B0020E01B0020FE000020E81A0020A3 -:1008000003FF0000FC000020D5030100FF010000F1 -:10081000450200004E0200005B02000003007B4422 -:100820001B79DB189F44020C0A08060400200FE025 -:10083000B4200DE073200BE0322009E00A2007E02D -:10084000062005E0FF20F749443002F03AF9002085 -:1008500003900E98C07A02280E9824D0807A2872CD -:100860000E9803990068401A28600E99097A0029A9 -:1008700061D00221401A0002000A28600E98016827 -:10088000406808186860C01D0002000A68600E9881 -:100890000627407AA8720E98007A6872FFF776FDF4 -:1008A00000284AD053E04168007A00282DD0022069 -:1008B00009180398C01D09182079052827D0DA489F -:1008C000039A4078904200D81046801A4218D748C0 -:1008D000921D8446207914235843D54BC018436891 -:1008E00080689B1B801B1B0200021B0A000A9A42A5 -:1008F00004D8CE4A934201D8604508D92079142201 -:100900005043CB4A801880680CE00420D0E7C648EA -:10091000039A4078904200D81046801A8019801DB2 -:100920000002000A286040180002000A68600020E7 -:1009300028726868A7E704219CE7687A032806D232 -:10094000002804D0039838210F1A32200390B649AA -:100950000878012801D003280AD1487803998842F1 -:1009600006D9B449C97F002902D10399401AC71991 -:100970002968AE488B1B69681A02891B0591090218 -:10098000120A090A97421ED8074682421BD8B9426A -:1009900019D82079012205282FD0002001210491A7 -:1009A00021799C46059B14225143A14A89184A6823 -:1009B000921B9A4203D28A68921B62452BD800226E -:1009C0000AAF3A5430E0019905209B4C0874607AD4 -:1009D000217A401C4007400F884203D197A19A48D2 -:1009E00002F06FF8617A02986054607A401C400708 -:1009F000400F607200200FB0F0BD019802230299F1 -:100A000003742379052B00D02379837421716271DB -:100A100001200FB0F0BD01220AAF3A548A7BAF7AB1 -:100A2000BA4201D800220492897C401CC0B2052938 -:100A300003D0049A002AB6D1A1E00498002877D008 -:100A400025790520002704900AA8C05D012827D039 -:100A500004951420454376487F1C2818857CFFB2F6 -:100A6000052DF1D1019802230374714F20790528D7 -:100A700053D025790520049001984068811B1420EB -:100A80006843C0194268921B8A4262D92079A84201 -:100A90004FD1019902980B742279052A42D142E084 -:100AA0002079A8420BD121791420414360480818CD -:100AB000807C2071012060710020207011E004987A -:100AC000052803D15DA1614801F0FBFF28461421F0 -:100AD0004843574914234018827C049858434018CF -:100AE0008274284614214843514906224018027452 -:100AF0005148417A007A491C4907490F814203D184 -:100B00004EA1534801F0DDFF4B48417A4554417AEC -:100B1000491C4907490F41729BE7227901990298C4 -:100B2000052A00D022798A7420710120607123E0A7 -:100B300025E00498052803D140A1464801F0C1FFF3 -:100B4000049814225043C019029981740198857445 -:100B500012E0807C052807D0049505468FD137A187 -:100B60003D4801F0AEFF21E014214D43E919029800 -:100B7000887401990520887401200FB0F0BD019898 -:100B800005212D4C0174607A217A401C4007400FEA -:100B9000884203D129A1314801F093FF617A02987C -:100BA0006054607A401C4007400F607200200FB014 -:100BB000F0BD70B50D460646294900242046891B24 -:100BC000A04103D21DA1274801F07BFF2649002048 -:100BD000491BA04103D219A1244801F072FF244A05 -:100BE00070190021821A8C4101D32249401870BD2E -:100BF000F8B5401EC0B2142148430D494518687B22 -:100C000006283DD203007B441B79DB189F44023643 -:100C100034080604002067E0B4203AE0732038E08E -:100C2000322036E0D8070100FE000020FFFF3F0021 -:100C3000EC1A0020E01B0020D41B00207372635CC0 -:100C400072656D2E63000000A3020000DE0200004A -:100C5000E302000007030000170300001D0300006B -:100C6000FF7F841E290300000020A1072A03000043 -:100C70000080841E00807BE10A200AE0062008E054 -:100C8000FF20FE49443001F01CFF697B0020002951 -:100C90002AD0022140186968002440180C21000263 -:100CA0006956000A002921DBF1F7D7FEF44A06460F -:100CB0000C27EF570021101AA14103D2EF49F14848 -:100CC00001F0FFFEF0490020C91BA04103D2EB490F -:100CD000EE4801F0F6FEEE4AF0190021821A8C412E -:100CE00001D3EC494018F8BD0421D3E7F1F7B5FE74 -:100CF0000C21695600224018E149091AA241F2D29A -:100D00004042F8BDF0B5074683B0E3480E46029076 -:100D100000F0C9FCE14C00282ED0E14D287C0028D1 -:100D200003D0E0A1E24801F0CCFE012028742F732B -:100D3000DB4D30782872707868722A460A3229466C -:100D40007068F1F794FE0A2028560F2804DD1F383A -:100D5000A8722868401C28600021B0686A4600918B -:100D6000117101AA6946F1F782FE6A460420105605 -:100D70000F2846DD012045E060782178401C4007BF -:100D8000400F884203D1C7A1CA4801F09AFE60789B -:100D90000101C94809180F73617809010D183078ED -:100DA0002872707868722A460A3229467068F1F70C -:100DB0005EFE0A2028560F2804DD1F38A872286816 -:100DC000401C28600021B0686A460091117101AA98 -:100DD0006946F1F74CFE6A46042010560F2801DDE3 -:100DE000012000E00020009940186860307BE87224 -:100DF0006078401C4007400F6070029800F06BFC68 -:100E000005E00020009940186860307BE872607847 -:100E10002178884224D0A9480579052D22D0F1F700 -:100E2000B8FD14214D43A64969180A7C042A17D03D -:100E3000032A15D04B6889681B1A091A180209027F -:100E4000A04A000A090A06280AD31346904207D886 -:100E5000994205D860782178884201D0F1F7E5FD04 -:100E600003B0F0BD607821788842F7D103B0F0BDBF -:100E700010B50020F1F7EBFC10BD10B50120F1F723 -:100E8000E6FC10BDF8B5074602281ED08B4C207931 -:100E9000052803D183A18C4801F013FE0020A07027 -:100EA0000125A571207903211422854E5043801914 -:100EB0000174F1F7BFFD3800844F0BD001281FD01B -:100EC00003286FD077A1824838E082480078F1F794 -:100ED00099FBF8BD65700020F1F7CCFC7968481CDF -:100EE00004D0012300221846F1F7FAFC2079217979 -:100EF000401CC0B214225143725801219047F8BDE2 -:100F00000120F1F7B7FC607800280CD07868401C0D -:100F100009D020792179401CC0B214225143725863 -:100F200006219047F8BD387E01280AD0022812D049 -:100F3000032824D0042836D05AA1674801F0C1FD07 -:100F4000F8BD2078002804D000202070F1F777FD4C -:100F5000FD77002024E0E078002804D1FEF7F4FCBF -:100F6000F1F752F9E57020792179401CC0B21422C2 -:100F7000514372580021904700203876F8BD397AE5 -:100F800038680123411A00221846F1F7A9FC20789D -:100F9000002804D000202070F1F751FDFD770220D9 -:100FA0003876F8BD1AE0397F38680123411A0022EB -:100FB0001846F1F795FCE078002804D1FEF7C4FC50 -:100FC000F1F722F9E57020792179401CC0B2142292 -:100FD00051437258002190473D76F8BD2079217920 -:100FE000401CC0B214225143725805219047F8BDED -:100FF00010B5324C2079052803D12AA1374801F0D9 -:1010000060FD20792179401CC0B2142251432C4A42 -:1010100052580421904710BDF0B583B00526F1F772 -:10102000B8FC054629484068401C03D01DA12C4847 -:1010300001F047FD214C21792A480190052956D01D -:101040002179142041431E480918097C04294ED0F7 -:101050002179142251430818007C03287ED001987E -:10106000184902684068521B401B12020002120A13 -:10107000000A062A72D30B468A4235E03C0C010076 -:10108000FF7F841E290300000020A1072A0300001F -:101090000080841E00807BE1071C0020BC1B002018 -:1010A000C01B00207372635C72656D2E63000000CC -:1010B0006E0300005F0300003C1B0020001C0020AA -:1010C000EC1A0020FFFF3F00A2030000E01B0020FD -:1010D000F3030000FC000020E7030000FA03000017 -:1010E0002B040000EC1B002038D8984236D8002092 -:1010F00060702079052808D1F648407F002804D088 -:10110000F548C1784170817801702079052814D0A4 -:10111000207914214843F1494018007C04280CD15F -:1011200026792279012014235A4352181074227907 -:101130005A435118897C21716071E94F7878397868 -:10114000884215D038780101E6480A183978090133 -:101150000818017B2846FFF7A0FA00E071E1387813 -:10116000401C4007400F3870787839788842E9D1C0 -:10117000DD4F387C002806D0397B3A462846FFF7F9 -:101180008CFA00203874052E1BD0142031464143C0 -:10119000D2480818017C012913D10721D34F0174CB -:1011A000787A401C0840397A884203D1D0A1D348CC -:1011B00001F087FC787A3E54787A401C4007400F53 -:1011C0007872207905287DD0607900287BD00020B6 -:1011D0006071217914204143C048BE4F0E18C849A0 -:1011E000B3687268F6688E604B600A60797D00298A -:1011F00010D0022621791422B84851430818407BA8 -:10120000062815D203007B441B79DB189F44040E8B -:101210000C0A08060426EDE700200FE0B4200DE0DC -:1012200073200BE0322009E00A2007E0062005E0E9 -:10123000FF20AFA1443001F044FC00203872797DDA -:10124000022901D001290FD1F96809184A1B12029D -:10125000120A382A08D90320787532390802000AA0 -:10126000F860322038720AE0322808D2E07800288C -:101270000ED1FEF769FBF0F7C7FF012007E0E07829 -:10128000002805D0FEF77FFBF0F7E7FF0020E070B5 -:10129000914A0621507838771278012A01D0032A22 -:1012A00006D1012222703A7A904201D9811A891D11 -:1012B000BA7F002A00D0891C2378002B01D1002A94 -:1012C00061D001E088E098E08C468E490091019958 -:1012D0000B6849685B1B491B09021B02090A1B0AB0 -:1012E00001919C451CD8874DAB4219D8019B0099B0 -:1012F0008B4215D8397A884223D9FB68421A9A1A48 -:101300001202120A101880190002000AFA603860EE -:10131000002914D0032038760006000E3ED144E0A8 -:1013200000202070B877397A002925D0F868401855 -:1013300080190002000A3860022038762EE0012071 -:10134000E9E781420BD9FA68511889190902090A9B -:101350003960002801D00420DDE70220DBE7002A05 -:1013600003D163A1684801F0ACFBF8688019000262 -:10137000000A3860002004E0F96889190902090AA6 -:101380003960387611E0387A00281DD0F9680818DD -:1013900080190002000A386002203876F8680123BC -:1013A000811900221846F1F79BFA2079142148434D -:1013B0004A490C2240188256012300203968F1F76F -:1013C0008FFAF1F7C1FB18E0F86880190002000AF3 -:1013D000386000203876E8E70120F1F74BFA00206A -:1013E000F1F748FAF1F72CFAE078002805D0FEF77B -:1013F000CAFAF0F732FF0020E070364DA87F0028CF -:1014000004D0F1F71CFB0020E877A877687F00285C -:1014100004D03148C178417081780170207800286B -:1014200006D000202C49E8770978002900D12070E7 -:101430002E48417A007A814203D034484078F1F74F -:10144000E1F803B0F0BDF0B5314C0746207983B028 -:10145000052803D126A12F4801F033FB2079142160 -:101460001E4E48438019007C032803D020A12A483F -:1014700001F027FB174D6868401C03D01CA12748CA -:1014800001F01FFB20791421484381190C200856D4 -:1014900000216A4600911171C01901AA6946F1F74D -:1014A000E6FA6A46042010560F2801DD012000E00C -:1014B000002000994018296840180102090A696053 -:1014C0006078002804D0012300221846F1F708FABA -:1014D00003B0F0BDE01B0020FE000020EC1A00204D -:1014E000BC1B00203C1B0020C01B0020D41B002084 -:1014F0007372635C72656D2E630000005C04000013 -:10150000EC1B0020FFFF3F00AE040000FC000020A9 -:10151000001C00200B0500000C0500000D0500005C -:10152000F8B51D4D0A1A00242346551BA34106D3C6 -:10153000194E431A254600279E1BBD4101D2104675 -:10154000F8BD164E0025B21AA54103D2721C101A1E -:101550004018F8BD114D0022EB1AA24104D26A1CBA -:10156000511A08184042F8BD53200DA1000101F0A6 -:10157000A8FA0020F8BD10B5014601230022022080 -:10158000F1F7AEF910BD10B50220F1F773F910BDF7 -:1015900010B5F1F7FEF910BD0020A107FF7F841EF2 -:1015A0007372635C72656D2E6300000010B50146B6 -:1015B00020220A4801F0E8F808490020C8770846C8 -:1015C00010BD0749012048610648074A0168914259 -:1015D00001D100210160704770477047081C00204E -:1015E0000005004004010020EFBEADDE064A107089 -:1015F0005170704704481C2201784171427001709B -:101600007047704770477047080100207047704767 -:1016100070477047704770477047704730B5034652 -:10162000002002460DE09C5C2546303D0A2D02D389 -:101630000020C04330BD0A25684330382018521CB2 -:10164000D2B28A42EFD330BD70B50D46144608E0E1 -:101650000A2101F013F92A193031203A641ED1779A -:10166000E4B2002CF4D170BD10B5002310E0040AE0 -:1016700000020443A0B2CC5C44402006000F60404E -:101680000407240C44402006C00C60405B1C9BB245 -:101690009342ECD310BD002101700846704701460B -:1016A000002008707047EFF31081C907C90F72B6A8 -:1016B0000278012A01D0012200E0002201230370F8 -:1016C000002900D162B6002A01D000207047012015 -:1016D00040037047E7E7EFF31081C907C90F72B6FF -:1016E00000220270002900D162B600207047F2E7A4 -:1016F0000348004703480449024A034B704700006F -:10170000312B0100481C0020481C002010B5203857 -:101710000C46030001F0DAFA331B1F23272C313764 -:101720003C41474D5054585C606D71656974787CDC -:101730008084888C9094989C9FA2A6AAAEB2B8BCD4 -:10174000C0C5CACFE9F0F3D3D7E0DBE4F8002068E6 -:10175000FFF7A1FFD6E02068FFF7A5FFD2E02068E1 -:10176000FFF7B9FFCEE0207840B200F0F3F9C9E00E -:10177000207840B200F011FAC4E02078616840B2ED -:1017800000F024FABEE0207840B200F034FAB9E06C -:10179000207840B200F03FFAB4E02078217940B2DE -:1017A00000F04AFAAEE02078616840B200F074FAC6 -:1017B000A8E000F080FAA5E0206800F084FAA1E03B -:1017C000207800F099FA9DE02068FEF7BCF999E0D6 -:1017D0002068FEF7BCF995E021792068FEF7BEF994 -:1017E00090E02068FEF706F88CE02068FEF707F826 -:1017F00088E02078FEF707F884E0FEF715F881E02E -:101800002078FEF717F87DE02078FEF729F879E0D8 -:101810002068FEF742F875E02068FEF744F871E0B2 -:101820002068FEF746F86DE02068FEF747F869E0AB -:101830002068FEF749F865E02068FEF74BF861E0A4 -:101840002068FEF74CF85DE00846EEF77FFC59E0B3 -:10185000F0F7EDFC56E0F0F71AFD53E02068F0F7E2 -:1018600022FD4FE0206800F079FA4BE0206800F09C -:101870007BFA47E0206800F07CFA43E02078A26819 -:10188000616800F07BFA3DE0207800F083FA39E0EF -:10189000207800F08BFA35E02078616800F093FA48 -:1018A00030E02078616800F09AFA2BE02179207806 -:1018B00000F0ACFB26E02068FEF73FFA22E020684B -:1018C000FEF710FD1EE02068FEF7F4FC1AE020464B -:1018D00007C800F078FC15E0206800F0C0FC11E0BB -:1018E0006168206800F0E2FC0CE0206800F04EFE29 -:1018F00008E009E003E0FFE700F061FE02E0206895 -:1019000000F079FE206010BD0120086010BD0000CD -:1019100010B572B600F0E4F800280BD0EEF7C0FC6A -:10192000FEF7E1FD00F039FB72490020C8628862D1 -:101930007149086062B6002010BDF3B50025012092 -:101940000007C06A81B0C0430006000E0AD16B4890 -:101950000168491C05D000686949884202D069487D -:10196000FEBD012572B600F0BBF8002801D062B6BA -:1019700088E0EEF701FCEEF797FC634C634A002128 -:101980002368CB40DB0720D00346CB40DB0718D1D0 -:101990004BB2002B07DA1E07360F083EB608B6001A -:1019A000B618F66904E09E08594FB600F619366875 -:1019B0009B07DB0EDE4033069B0F012B05D0032B6C -:1019C00003D062B64F48401EFEBD491C2029D7D324 -:1019D000019C01204F49230001F078F914222424AE -:1019E0002424242424240B0D1012142016181A1C4D -:1019F0001E2F002400E00124C86314E00224FBE74A -:101A00000324F9E70424F7E70824F5E70924F3E7BA -:101A10000A24F1E70B24EFE70C24EDE70524EBE7BC -:101A2000072400E00624D06901210002000AC9074A -:101A30000843D061002D04D009E062B60120000304 -:101A4000FEBD2C4D3448E862EEF72EFCA8622A4910 -:101A500032480860324902980860EEF725FC2146BA -:101A600000F082FAFEF706FD00F04CFC00F0FEFAF2 -:101A70000198EEF7E3FB040062B603D0FFF748FFDE -:101A80002046FEBD0020FEBD10B5044600F028F83B -:101A9000002800D001202070002010BD21491848E6 -:101AA00008600020704710B50C46102808D0112897 -:101AB0000BD012280CD013280ED00120086010BDC6 -:101AC00061682068FFF739FF08E0FFF721FF05E0B4 -:101AD0002068FFF7D9FF01E0FFF7E0FF206010BDAD -:101AE00005480E490068884201D101207047002056 -:101AF00070470000000500400401002000100010A5 -:101B0000004001000210000000E100E000ED00E0F4 -:101B100000E400E04000004000200000EFBEADDE29 -:101B200010010020000000208107C90E002808DAFB -:101B30000007000F08388008814A80008018C069BB -:101B400004E080087F4A800080180068C8400006D2 -:101B5000800F704710B5044600F0DBF8002813D062 -:101B60002046FFF7E1FFC0B200F0E1F800280DD0F9 -:101B70007549E2060B78D20E01209040002B08D068 -:101B80004A681043486006E0704810BD6F48401C2A -:101B900010BD6F490860002010BD10B5044600F06C -:101BA000B8F800280BD06849E2060B78D20E012065 -:101BB0009040002B05D04A6882434A6004E06348A5 -:101BC00010BD634980310860002010BD70B50D461E -:101BD000044600F09EF800280BD05E480068E2063C -:101BE000D20E01219140084000D001202860002041 -:101BF00070BD564870BD10B5044600F08AF8002844 -:101C000007D0E106C90E0120884052490860002033 -:101C100010BD4E4810BD10B5044600F07AF80028FB -:101C200008D0E106C90E012088404A498031086089 -:101C3000002010BD454810BD70B50D46044600F0AB -:101C400068F8002819D0284600F071F8002816D04E -:101C5000A007C20EFF209040A907090E9140002C5A -:101C600010DA2207120F083A9308354A9B009B1896 -:101C7000DA6982430A43DA610CE0344870BD3348C4 -:101C8000401C70BDA3082F4A9B009B181A68824312 -:101C90000A431A60002070BD70B50C46054600F07E -:101CA00038F8002805D02846FFF73EFF20700020B6 -:101CB00070BD264870BDBFF34F8F21492648C860CC -:101CC000BFF34F8FFEE770B51F4C0546217801200A -:101CD00000290ED1207072B600F06EF91C4E8036CD -:101CE00031688143616000F067F9C043306062B6DB -:101CF00000202870002070BD13490A78002A06D001 -:101D0000002804D1124A48681060002008700020A2 -:101D1000704710B50446202805DA00F04DF901217E -:101D2000A140084201D0002010BD012010BD0128B3 -:101D300003D0032801D00020704701207047000025 -:101D400000ED00E000E400E01401002001200000AC -:101D500000E100E000E200E00400FA05364909680D -:101D6000C9B20160002070473349C0B2486000200A -:101D700070473149C0B2886000207047082801D3FD -:101D80002E4870472C4BC0001033C01801604260D1 -:101D900000207047022802D32848401C7047284979 -:101DA000C00040180121016000207047022802D3C2 -:101DB0002248401C70472249C000091D40180121DB -:101DC000016000207047022802D31C48401C704765 -:101DD0001C4A80008018C9B20160002070470228A8 -:101DE00002D31648401C7047164A800080180068CD -:101DF000C0B208600020704710B5FF200E49C043F4 -:101E000088600D4B082210330021D000C0180160FB -:101E10004160521C102AF8D30A4B00208200D218CD -:101E2000022801D3116002E01468E4B21460401C7F -:101E30000428F3D310BD000000F501400820000085 -:101E400000F0014000F80140F8B504468007002585 -:101E50000126002804DA5A48C563C6630220844379 -:101E6000E00404D55748C563C6638014844360000A -:101E700003D55548456080058443E00504D55348A3 -:101E8000C563C66380158443A00404D55048C56368 -:101E9000C6634014844360042704C00FF90F8842CE -:101EA00003D04CA1612000F00CFEB80F0AD04E49BF -:101EB000CD634E48C563C563CE63C663C663032066 -:101EC0008003844320050AD5494FFD632F20EEF798 -:101ED0006BF9FE632F20EEF767F9F8148443002CAA -:101EE00003DAFFF789FF640064084248044203D024 -:101EF00038A1902000F0E5FDF8BDF0B500210A46BC -:101F0000FF230446CC40E4072AD04CB2E606F60E86 -:101F10000125B540384E3560384E3560002C11DA59 -:101F200025072D0F083DAE08354DB6007619F56929 -:101F3000A407E70E1C46BC40A5431446BC402543FD -:101F4000F5610DE0A6082F4DB60076193568A40797 -:101F5000E70E1C46BC40A5431446BC4025433560F3 -:101F6000491C2029CDD3F0BD70B5274C0D4620600B -:101F7000FFF76AFF2068FFF7C0FF2846F0F720FA56 -:101F8000FDF7C6FEFDF772FDFFF736FFFDF7C5FC56 -:101F9000F0F702FB00F06AF870BD10B51A4C20682B -:101FA000FFF752FF2068FFF7A8FFFFF725FFF0F7C4 -:101FB0008CFA0020206010BD1348006870470000B4 -:101FC000C01F0040C0CF004000E50140C08F00406E -:101FD000C0DF00407372635C736F635F636F6E6634 -:101FE00069672E6300000000C0EF0040C0FF0040A2 -:101FF000C0BF0040FEFF0FFC80E100E080E200E097 -:1020000000ED00E000E400E01C01002070B50024B9 -:1020100002460D4620462146002A1ED0012A04D041 -:10202000022A04D0032A1ED103E0012002E002208C -:1020300013E003202B0000F049FE07160507090BEB -:102040000D0F1600012108E0022106E0032104E043 -:10205000042102E0052100E00621FEF7B1FA002884 -:1020600001D0204670BD0724FBE700009B490020FB -:10207000087088709A490870704770B5974C0E4682 -:102080006178884203D097A15A2000F01AFD0325F9 -:10209000330000F01BFE0953063030535353534AAC -:1020A00053002078022803D08EA15E2000F009FDA5 -:1020B0002570A078022802D0012804D014E0A0687E -:1020C00000F004FB10E000250BE0E0680168A06868 -:1020D00000F00DFBA068001DA060E068001D6D1CF5 -:1020E000E06020698542F0D30020A070FEF710FA6E -:1020F0000420207070BD2078022803D079A17620BA -:1021000000F0DFFC60687649401C6060032801D85D -:102110004D7003E0062806D80220487070496078A8 -:10212000FEF7F0FD70BD032003E0A0780028FAD18F -:102130000220FEF703F900F0C7F870BD69A19E20E8 -:1021400000F0BFFC70BD70B50546644C00206060B7 -:102150002078012803D063A1A52000F0B2FC6049DB -:10216000022008738D6003224A7020706078FEF7A9 -:10217000C9FD70BD10B5594CA078002802D1207857 -:10218000002801D0112010BD5A48FEF700FA6070F7 -:102190006078002803D001202070002010BD0320AB -:1021A00010BD10B50124020B64040121524BA04262 -:1021B00002D29140186802E0203A586891400840E5 -:1021C00000D0012010BDF8B50E46910005464F190C -:1021D00014463F1F009100F09CFA00998002891973 -:1021E000091FB14201D2012200E00022002C03D0DD -:1021F000FF2101318C4201D90920F8BD3F498D42B0 -:1022000019D3AF4217D3854205D2874203D228465D -:102210003043800701D01020F8BD8E420BD3002A36 -:1022200009D12846FFF7BDFF002804D13846FFF743 -:10223000B8FF002801D00F20F8BDFFF79BFF002852 -:10224000FAD126480121C66085600461817020466C -:10225000312148431430FFF776FF0020F8BD10B558 -:1022600004462648800A84420BD300F052FAA0426A -:1022700001D8102010BDA0020446FFF792FF0028ED -:1022800001D00F2010BDFFF775FF0028FAD11348C9 -:102290000221846081701A48FFF755FF002010BDAD -:1022A0001648010B01208840401E704700B50B46C0 -:1022B0000246FFF7F5FF104201D00F2000BD0E4887 -:1022C00002604360002000BD10B5044C6078FEF74A -:1022D000B2F900202070A07010BD00002001002085 -:1022E000281C00207372635C736F635F666C61739C -:1022F000682E63007B2001000006004000400100C2 -:1023000010540000E349002048700870887048604D -:10231000E1490873704710B5E048826A81158A4325 -:10232000DC498B691A438262826A0223C9699A4333 -:102330000A438262FEF7ECF810BD002814D0417801 -:10234000002901D001290ED18168D54A6439914212 -:1023500009D24068D349884205D8CE494978012935 -:1023600003D1002801D0002070470120704770B5CC -:102370000446FEF782FD0068002803D0CAA1802031 -:1023800000F09FFB0126C34D002C06D020780028CA -:102390002BD0012827D0022801D0EE7023E0287826 -:1023A000002820D16068FFF7C8FF0028F5D06068DA -:1023B0000078002800D00220B74E30706068806836 -:1023C0009630B06060684168E868FEF7F2FB7060C4 -:1023D000606803244078002808D07470AE49A8785B -:1023E000FEF790FC6C70FFF796FF70BD02207070D6 -:1023F000F4E7F8B5A74C0D46A178884203D0AAA10E -:10240000BF2000F05EFB284600270526A24D0300F2 -:1024100000F05CFC09061135587F8997B8A2B80016 -:102420006078032806D06078022803D09EA1C320DC -:1024300000F047FBF8BD6078032806D060780228DA -:1024400003D099A1C72000F03CFB04206070E77026 -:102450002078002802D0FEF75BF8F8BDA86896380F -:10246000FEF7F1FF6868E0608C48816A82151140D0 -:10247000A161806A02210840E06100205CE0607890 -:10248000032806D06078022803D087A1E22000F05C -:1024900018FB2078002802D000F0EFF8F8BD607833 -:1024A000032802D02069410020E004202DE07A4971 -:1024B000A078FEF727FCF8BD0420FDF73FFF0120C0 -:1024C0006070F8BD6078032807D06078022804D0D7 -:1024D000FF2075A1043000F0F4FA20780028DBD149 -:1024E0006078032810D06868A06076492161A068F0 -:1024F000FEF75FFB686069686069FFF711F868497B -:1025000063318842D8DCD2E70520FDF717FF6670FB -:10251000F8BD6078042804D0FF2063A1263000F0C5 -:10252000D0FA022008E06078042804D0FF205EA1E1 -:102530002B3000F0C6FA012061688847FFF717FFCB -:10254000F8BD6078042804D0FF2057A1303000F097 -:10255000B8FAFFF7E0FEF8BD6078042804D0FF2049 -:1025600051A1353000F0ADFA2078002894D1E07800 -:10257000002805D00620FDF7E1FE6670E770F8BD83 -:102580000720C2E7FF2048A14B3051E770B5050096 -:1025900005D0404C6078002803D0112070BD102079 -:1025A00070BD4948FDF7F3FFA070A078002804D063 -:1025B000656001206070002070BD032070BD10B503 -:1025C00034480178002901D0112010BD417800293C -:1025D0000BD0417805290AD04178012907D0012183 -:1025E00001704078052802D003E00F2010BD00F0F4 -:1025F00044F8002010BD70B5264C064660780528CA -:1026000004D06078012801D00F2070BD002E25D0A5 -:102610003046FFF792FE002822D060781E4D012838 -:1026200020D07168E068FEF7C4FA6860B068963040 -:10263000A8603078002800D0032028707078002827 -:1026400017D0032068706078052814D002206070CD -:102650001149A078FEF756FB002070BD102070BD18 -:10266000072070BDFEF702F86061A0601549216186 -:10267000D9E70220E6E70320E9E710B5054CA0788A -:10268000FDF7D9FF0820FDF759FE0020607020708B -:1026900010BD000034010020381C0020000500405F -:1026A0003D860100FF1FA1077372635C736F635F58 -:1026B000726164696F5F74696D65736C6F742E63AA -:1026C0000000000024080000F3230100134A022147 -:1026D000516013490B68002BFCD0906008680028FB -:1026E000FCD00020506008680028FCD0704710B56E -:1026F0000A4B01225A600A4A1468002CFCD001607F -:1027000010680028FCD00020586010680028FCD019 -:1027100010BD0120000740697047000000E501403E -:1027200000E40140704770477047704770470346A8 -:1027300010B50B439B070FD1042A0DD308C810C94D -:10274000121FA342F8D018BA21BA884201D9012039 -:1027500010BD0020C04310BD002A03D0D30703D012 -:10276000521C07E0002010BD03780C78401C491C67 -:102770001B1B07D103780C78401C491C1B1B01D183 -:10278000921EF1D1184610BDF8B5042A2CD3830748 -:1027900012D00B78491C0370401C521E83070BD0CB -:1027A0000B78491C0370401C521E830704D00B7821 -:1027B000491C0370401C521E8B079B0F05D0C91A81 -:1027C000DF002023DE1B08C90AE0EDF7FDFCF8BDA1 -:1027D0001D4608C9FD401C46B4402C4310C0121FC2 -:1027E000042AF5D2F308C91A521EF0D40B78491CFA -:1027F0000370401C521EEAD40B78491C0370401C25 -:10280000521EE4D409780170F8BD01E004C0091F2C -:102810000429FBD28B0701D50280801CC90700D098 -:102820000270704700290BD0C30702D00270401C11 -:10283000491E022904D3830702D50280801C891E09 -:10284000E3E70022EEE70022DFE70378C2781946CB -:10285000437812061B0219438378C0781B0419437E -:1028600011430902090A000608437047020A08706A -:102870004A70020C8A70020ECA7070470022030967 -:102880008B4273D3030A8B4258D3030B8B423CD346 -:10289000030C8B4221D312E003460B437FD400226A -:1028A00043088B4274D303098B425FD3030A8B42E4 -:1028B00044D3030B8B4228D3030C8B420DD3FF224E -:1028C000090212BA030C8B4202D31212090265D01C -:1028D000030B8B4219D300E0090AC30B8B4201D3CF -:1028E000CB03C01A5241830B8B4201D38B03C01A16 -:1028F0005241430B8B4201D34B03C01A5241030B8D -:102900008B4201D30B03C01A5241C30A8B4201D33D -:10291000CB02C01A5241830A8B4201D38B02C01AE8 -:102920005241430A8B4201D34B02C01A5241030A5F -:102930008B4201D30B02C01A5241CDD2C3098B4244 -:1029400001D3CB01C01A524183098B4201D38B01C1 -:10295000C01A524143098B4201D34B01C01A524164 -:1029600003098B4201D30B01C01A5241C3088B42A9 -:1029700001D3CB00C01A524183088B4201D38B0094 -:10298000C01A524143088B4201D34B00C01A524136 -:10299000411A00D201465241104670475DE0CA0F0D -:1029A00000D04942031000D34042534000229C46CD -:1029B00003098B422DD3030A8B4212D3FC228901D7 -:1029C00012BA030A8B420CD3890192118B4208D3AD -:1029D000890192118B4204D389013AD0921100E00F -:1029E0008909C3098B4201D3CB01C01A5241830923 -:1029F0008B4201D38B01C01A524143098B4201D350 -:102A00004B01C01A524103098B4201D30B01C01A7A -:102A10005241C3088B4201D3CB00C01A52418308F4 -:102A20008B4201D38B00C01A5241D9D243088B424A -:102A300001D34B00C01A5241411A00D201466346ED -:102A400052415B10104601D34042002B00D5494251 -:102A5000704763465B1000D3404201B50020C0467A -:102A6000C04602BD704770477047704710B500F010 -:102A700077F810BD30B58C180278401C13071B0F77 -:102A800001D10378401C120906D10278401C03E0F2 -:102A90000578401C0D70491C5B1EF9D101E00B70DC -:102AA000491C521EFBD1A142E6D3002030BD0000DC -:102AB00001231B68134B1860134B1960134B1A60EA -:102AC0007047134A134B13607246053AF0E7114AF8 -:102AD0000F4B1B689A420ED10D4B002018600198D5 -:102AE0000D4B04B598470CBC9E46024602980099CF -:102AF0000A4B1B68184706980599094B1B68DB6849 -:102B0000184700005C0100206001002064010020E3 -:102B100054010020EFBEADDEAD1501001001002014 -:102B2000000000200B4A12680B4B9A420AD1004762 -:102B3000084A1268084B9A4204D101B5FDF773F9AF -:102B400003BC8E4605490968EFF305808000014407 -:102B50000968084704010020EFBEADDE0000002038 -:102B60001C481D497047FFF7FBFFEDF7E7FA00BD72 -:102B700001200007C06AC0B2FF2804D117481849D5 -:102B80000968884202D0174817490160174A136044 -:102B90005B68184720BFFDE7154B1B680F4999423A -:102BA00002D018688842F5D004D1124B18680B493E -:102BB0008842EFD080F308880F49884204DD0F482F -:102BC000026802210A4302600D4880470D48804791 -:102BD0000D480047481C0020481C0020FFFFFFFF55 -:102BE000001000102C050040040000000000002030 -:102BF00014100010004001000020002024050040B7 -:102C0000C3150100712B0100B12A01001248704563 -:102C100002D1EFF3098101E0EFF3088188690238FE -:102C20000078102812DB20280EDB0C4A12680C4BAF -:102C30009A4203D1602804DB0A4A10470220086048 -:102C40007047094A10470000084A1047084A1268AE -:102C50002C32126810470000FDFFFFFF0401002026 -:102C6000EFBEADDEAD0200000D170100A71A010096 -:102C7000000000200A480B4908470B48094908474B -:102C80000A48084908470A480649084709480549C3 -:102C9000084709480349084708480249084700000F -:102CA000E1230000252B0100412B0000EB2900004F -:102CB000992900004D270000A72A000043260000A4 -:102CC00003B40148019001BD0500002030B47446F2 -:102CD000641E2578641CAB4200D21D46635D5B0018 -:102CE000E31830BC1847000002490020C8612039B1 -:102CF00008727047A003002000020206FFFFFFFFDA -:102D00000000FFFF0102040810204080555555D6F1 -:102D1000BE898E00F401FA00960064004B00320078 -:102D20001E0014000100030000000100000000006C -:102D3000000000000000000000000000870000000C -:102D4000000000000000000000000000000002037E -:102D5000040500000E0F0000882D01000400002073 -:102D60001000000004010000982D01001400002054 -:102D700054010000742A0100C02D010068010020E8 -:102D8000E01A0000200100000249022208681042F7 -:102D9000FCD0704700E200E0A1074E56FF9900CD3D -:102DA00029023501022B013601000100D83720FB32 -:102DB000349B5F8074800010027001E4B52A01002A -:020000041000EA -:1010000000400100FFFFFFFFFFFFFFFFFFFFFFFFAB -:041010004900FFFF95 -:04000005000000C136 -:00000001FF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/doc/ble_api.dox Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,1177 @@ +/** + * @addtogroup BLE_COMMON + * @{ + * @defgroup BLE_COMMON_MSC Message Sequence Charts + * @{ + * @defgroup BLE_COMMON_IRQ_EVT_MSC Interrupt-driven Event Retrieval + * @msc + * hscale = "1.5"; + * APP,SD; + * |||; + * APP=>SD [label = "sd_softdevice_enable(clock, assertion_handler);"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_nvic_EnableIRQ(SD_EVENT_IRQn)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * APP rbox SD [label="Application runs and uses SD API"]; + * |||; + * SD rbox SD [label="Event Available for the App"]; + * |||; + * APP<-SD [label = "SD_EVENT_IRQn", textcolor="#800080", linecolor="#800080"]; + * APP=>APP [label = "SD_EVENT_IRQHandler()"]; + * APP=>SD [label = "sd_ble_evt_get(buffer);"]; + * APP<<SD [label = "{NRF_SUCCESS, event}"]; + * |||; + * @endmsc + * + * @defgroup BLE_COMMON_THREAD_EVT_MSC Thread Mode Event Retrieval + * @msc + * hscale = "1.5"; + * APP,SD; + * |||; + * APP=>SD [label = "sd_softdevice_enable(clock, assertion_handler);"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * APP=>SD [label = "sd_app_evt_wait(void);"]; + * APP rbox APP [label="App Thread Mode blocked, CPU in low power mode"]; + * |||; + * ...; + * |||; + * SD rbox SD [label="Event Available for the App"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_ble_evt_get(buffer);"]; + * APP<<SD [label = "{NRF_SUCCESS, event}"]; + * APP=>SD [label = "sd_app_evt_wait(void);"]; + * APP rbox APP [label="App Thread Mode blocked, CPU in low power mode"]; + * |||; + * ...; + * |||; + * SD rbox SD [label="Event Available for the App"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_ble_evt_get(buffer);"]; + * APP<<SD [label = "{NRF_SUCCESS, event}"]; + * APP=>SD [label = "sd_app_evt_wait(void);"]; + * APP rbox APP [label="App Thread Mode blocked, CPU in low power mode"]; + * |||; + * ...; + * |||; + * @endmsc + * + * @defgroup BLE_COMMON_APP_BUFF_MSC App Buffer Management + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP=>SD [label = "sd_ble_tx_buffer_count_get();"]; + * APP<<SD [label = "{NRF_SUCCESS, N}"]; + * APP rbox APP [label="available = N"]; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gattc_write(handle, value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP rbox APP [label="available--"]; + * SD:>PEER [label = "ATT Write Command", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_TX_COMPLETE {1}"]; + * APP rbox APP [label="available += 1"]; + * |||; + * ...; + * |||; + * APP=>SD [label = "sd_ble_gatts_hvx(NOTIFICATION, app_value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP rbox APP [label="available--"]; + * SD:>PEER [label = "ATT Handle Value Notification", textcolor="#000080", linecolor="#000080"]; + * APP=>SD [label = "sd_ble_gatts_hvx(NOTIFICATION, app_value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP rbox APP [label="available--"]; + * SD:>PEER [label = "ATT Handle Value Notification", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_TX_COMPLETE {2}"]; + * APP rbox APP [label="available += 2"]; + * |||; + * ...; + * |||; + * APP rbox PEER [label="Terminate Connection"]; + * |||; + * APP rbox APP [label="available = N"]; + * |||; + * @endmsc + * @} + * @} + */ + +/** + * @addtogroup BLE_GAP + * @{ + * @defgroup BLE_GAP_MSC Message Sequence Charts + * @{ + * @defgroup BLE_GAP_ADV_MSC GAP Advertisement + * @msc + * hscale = "1.5"; + * APP,SD,SCANNERS; + * |||; + * APP=>SD [label = "sd_ble_gap_address_set(addr)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_ble_gap_adv_data_set(adv, sr)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_ble_gap_adv_start(params)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; + * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; + * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; + * ...; + * SD->SCANNERS [label = "ADV packet", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #1 App Stops Advertisement "]; + * APP=>SD [label = "sd_ble_gap_adv_stop()"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * --- [label = " Variant #2 Advertisement Timeout "]; + * APP<<=SD [label = "BLE_GAP_EVT_TIMEOUT"]; + * @endmsc + * + * @defgroup BLE_GAP_CONN_MSC GAP Connection Establishment and Termination + * @msc + * hscale = "1.5"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Start Advertising"]; + * |||; + * SD<:>CENTRAL [label = "Connection Establishment", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONNECTED"]; + * |||; + * --- [label = " Variant #1 Local Disconnection "]; + * APP=>SD [label = "sd_ble_gap_disconnect(reason)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "Connection Termination", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_DISCONNECTED {reason}"]; + * |||; + * --- [label = " Variant #2 Remote Disconnection "]; + * SD<:CENTRAL [label = "Connection Termination", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_DISCONNECTED {reason}"]; + * @endmsc + * + * @defgroup BLE_GAP_CPU_MSC GAP Connection Parameter Update + * @msc + * hscale = "1.5"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established with conn. params. CP#1"]; + * |||; + * APP=>SD [label = "sd_ble_gap_conn_param_update(CP#2)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "L2CAP CPU Request", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #1 Central Accepts "]; + * |||; + * SD<:CENTRAL [label = "L2CAP CPU Response: Accepted", textcolor="#000080", linecolor="#000080"]; + * |||; + * SD<:CENTRAL [label = "Connection Update", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_PARAM_UPDATE {CP#2}"]; + * |||; + * --- [label = " Variant #2 Central Rejects "]; + * |||; + * SD<:CENTRAL [label = "L2CAP CPU Response: Rejected", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_PARAM_UPDATE {CP#1}"]; + * --- [label = " Variant #3 Central Ignores "]; + * |||; + * ...; + * |||; + * SD box SD [label="Timeout"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_PARAM_UPDATE {CP#1}"]; + * @endmsc + * + * @defgroup BLE_GAP_RSSI_MSC GAP RSSI + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gap_rssi_start()"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * SD<-PEER [label = "RSSI Sample", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_RSSI_CHANGED {RSSI#1}"]; + * |||; + * SD<-PEER [label = "RSSI Sample", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_RSSI_CHANGED {RSSI#2}"]; + * |||; + * SD<-PEER [label = "RSSI Sample", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_RSSI_CHANGED {RSSI#3}"]; + * |||; + * APP=>SD [label = "sd_ble_gap_rssi_stop()"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * @endmsc + * + * @defgroup BLE_GAP_PAIRING_JW_MSC GAP Pairing: Just Works + * @msc + * hscale = "2"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established"]; + * |||; + * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: no_bond, no_mitm, no_io_caps}"]; + * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: no_bond, no_mitm, no_io_caps)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; + * |||; + * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS}"]; + * APP rbox CENTRAL [label = "Encrypted with STK"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_NO_MITM}"]; + * @endmsc + * + * @defgroup BLE_GAP_BONDING_JW_MSC GAP Bonding: Just Works + * @msc + * hscale = "2"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established"]; + * |||; + * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: bond, no_mitm, no_io_caps}"]; + * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: bond, no_mitm, no_io_caps)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; + * |||; + * APP rbox CENTRAL [label = "Encrypted with STK"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_NO_MITM}"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 3", textbgcolor="#7f7fff"]; + * |||; + * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS, periph_keys}"]; + * APP rbox APP [label = "Store Peripheral Keys"]; + * @endmsc + * + * @defgroup BLE_GAP_BONDING_PK_PERIPH_MSC GAP Bonding: Passkey Entry, Peripheral displays + * @msc + * hscale = "2"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established"]; + * |||; + * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: bond, mitm, keyboard}"]; + * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: bond, mitm, display)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_PASSKEY_DISPLAY {passkey}"]; + * APP rbox APP [label="Passkey displayed to the user"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; + * |||; + * APP rbox CENTRAL [label = "Encrypted with STK"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_MITM}"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 3", textbgcolor="#7f7fff"]; + * |||; + * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS, periph_keys}"]; + * APP rbox APP [label = "Store Peripheral Keys"]; + * @endmsc + * + * @defgroup BLE_GAP_BONDING_PK_CENTRAL_OOB_MSC GAP Bonding: Passkey Entry (Central display) or OOB MSC + * @msc + * hscale = "2"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established"]; + * |||; + * SD<:CENTRAL [label = "SMP Pairing Request", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_SEC_PARAMS_REQUEST {central_params: bond, mitm, display}"]; + * APP=>SD [label = "sd_ble_gap_sec_params_reply(SUCCESS, periph_params: bond, mitm, keyboard)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "SMP Pairing Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_AUTH_KEY_REQUEST {type}"]; + * APP rbox APP [label="User enters Passkey or data received Out Of Band"]; + * APP=>SD [label = "sd_ble_gap_auth_key_reply(passkey or OOB)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 2", textbgcolor="#7f7fff"]; + * |||; + * APP rbox CENTRAL [label = "Encrypted with STK"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE {ENC_MITM}"]; + * |||; + * SD abox CENTRAL [label="SMP Pairing Phase 3", textbgcolor="#7f7fff"]; + * |||; + * APP<<=SD [label = "BLE_GAP_EVT_AUTH_STATUS {SUCCESS, periph_keys}"]; + * APP rbox APP [label = "Store Peripheral Keys"]; + * @endmsc + * + * @defgroup BLE_GAP_SEC_MSC GAP Security Establishment using stored keys + * @msc + * hscale = "1.5"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established"]; + * |||; + * SD<:CENTRAL [label = "LL Encryption Request", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GAP_EVT_SEC_INFO_REQUEST {addr, div}"]; + * |||; + * --- [label = " Variant #1 App Replies with Keys "]; + * |||; + * APP rbox APP [label = "Load Peripheral Keys"]; + * APP=>SD [label = "sd_ble_gap_sec_info_reply(div, LTK)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "LL Encryption Response", textcolor="#000080", linecolor="#000080"]; + * APP rbox CENTRAL [label = "Encrypted with LTK"]; + * APP<<=SD [label = "BLE_GAP_EVT_CONN_SEC_UPDATE"]; + * |||; + * --- [label = " Variant #2 App Replies without Keys "]; + * |||; + * APP=>SD [label = "sd_ble_gap_sec_info_reply(NULL)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "LL Reject Ind: Pin or Key Missing", textcolor="#000080", linecolor="#000080"]; + * APP rbox CENTRAL [label = "Link Not Encrypted"]; + * @endmsc + * + * @defgroup BLE_GAP_PERIPH_SEC_MSC GAP Peripheral Initiated Security Establishment + * @msc + * hscale = "1.5"; + * APP,SD,CENTRAL; + * |||; + * APP rbox CENTRAL [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gap_authenticate(params)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>CENTRAL [label = "SMP Security Request", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #1 Central initiates Security Establishment "]; + * |||; + * APP rbox CENTRAL [label="Encryption or Pairing/Bonding initiated by Central"]; + * |||; + * --- [label = " Variant #2 Central ignores "]; + * |||; + * ...; + * |||; + * APP<<=SD [label = "BLE_GAP_EVT_TIMEOUT"]; + * |||; + * @endmsc + * @} + * @} + */ + +/** + * @addtogroup BLE_GATTC + * @{ + * @defgroup BLE_GATTC_MSC Message Sequence Charts + * @{ + * @defgroup BLE_GATTC_PRIM_SRVC_DISC_MSC GATTC Primary Service Discovery + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * --- [label = " Variant #1 Discover All Services "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle, NULL)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Group Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Group Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; + * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N, NULL)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Group Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Group Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; + * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N + M, NULL)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Group Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; + * |||; + * --- [label = " Variant #2 Discover a Specific Service "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle, uuid)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Find By Type Value Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Find By Type Value Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; + * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N, uuid)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Find By Type Value Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Find By Type Value Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP {SUCCESS, services}"]; + * APP=>SD [label = "sd_ble_gattc_primary_services_discover(handle + N + M, uuid)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Find By Type Value Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; + * @endmsc + * + * @defgroup BLE_GATTC_REL_DISC_MSC GATTC Relationship Discovery + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gattc_relationships_discover(handle_range)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_REL_DISC_RSP {SUCCESS, includes}"]; + * APP=>SD [label = "sd_ble_gattc_relationships_discover(handle_range + N)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_REL_DISC_RSP {SUCCESS, includes}"]; + * APP=>SD [label = "sd_ble_gattc_relationships_discover(handle_range + N + M)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; + * @endmsc + * + * @defgroup BLE_GATTC_CHAR_DISC_MSC GATTC Characteristic Discovery + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gattc_characteristics_discover(handle_range)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_DISC_RSP {SUCCESS, chars}"]; + * APP=>SD [label = "sd_ble_gattc_characteristics_discover(handle_range + N)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_DISC_RSP {SUCCESS, chars}"]; + * APP=>SD [label = "sd_ble_gattc_characteristics_discover(handle_range + N + M)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; + * @endmsc + * + * @defgroup BLE_GATTC_DESC_DISC_MSC GATTC Descriptor Discovery + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gattc_descriptors_discover(handle_range)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Find Information Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Find Information Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_DESC_DISC_RSP {SUCCESS, descs}"]; + * APP=>SD [label = "sd_ble_gattc_descriptors_discover(handle_range + N)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Find Information Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Find Information Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_DESC_DISC_RSP {SUCCESS, descs}"]; + * APP=>SD [label = "sd_ble_gattc_descriptors_discover(handle_range + N + M)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Find Information Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; + * @endmsc + * + * @defgroup BLE_GATTC_READ_UUID_MSC GATTC Read Characteristic Value by UUID + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_gattc_char_value_by_uuid_read(uuid, handle_range)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP {SUCCESS, char_values}"]; + * APP=>SD [label = "sd_ble_gattc_char_value_by_uuid_read(uuid, handle_range + N)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read By Type Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP {SUCCESS, char_values}"]; + * APP=>SD [label = "sd_ble_gattc_char_value_by_uuid_read(uuid, handle_range + N + M)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read By Type Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Attribute Not Found", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {ATTRIBUTE_NOT_FOUND}"]; + * @endmsc + * + * @defgroup BLE_GATTC_VALUE_READ_MSC GATTC Characteristic or Descriptor Value Read + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * --- [label = " Variant #1 offset == 0 "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_read(handle, 0)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_READ_RSP {SUCCESS, value}"]; + * |||; + * --- [label = " Variant #2 offset != 0 "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_read(handle, offset)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Blob Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read Blob Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_READ_RSP {SUCCESS, value}"]; + * APP=>SD [label = "sd_ble_gattc_read(handle, offset + N)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Blob Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read Blob Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_READ_RSP {SUCCESS, value}"]; + * APP=>SD [label = "sd_ble_gattc_read(handle, offset + N + M + 1)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Blob Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Invalid Offset", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {INVALID_OFFSET}"]; + * @endmsc + * + * @defgroup BLE_GATTC_READ_MULT_MSC GATTC Read Multiple Characteristic Values + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * --- [label = " Variant #1 Successful request "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_char_values_read(handles)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Multiple Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Read Multiple Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_CHAR_VALS_READ_RSP {SUCCESS, char_values}"]; + * |||; + * --- [label = " Variant #2 Failing request (invalid handle) "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_char_values_read(handles)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Multiple Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Error Response: Invalid Handle", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT {INVALID_HANDLE, error_handle=<invalid handle>}"]; + * @endmsc + * + * @defgroup BLE_GATTC_VALUE_WRITE_MSC GATTC Characteristic or Descriptor Value Write + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * --- [label = " Variant #1 write_op == BLE_GATT_OP_WRITE_CMD "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_write(handle, value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Write Command", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_TX_COMPLETE"]; + * |||; + * --- [label = " Variant #2 write_op == BLE_GATT_OP_WRITE_REQ "]; + * |||; + * APP=>SD [label = "sd_ble_gattc_write(handle, value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Write Request", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_WRITE_RSP {SUCCESS}"]; + * @endmsc + * + * @defgroup BLE_GATTC_HVI_MSC GATTC Handle Value Indication + * <b> GATTC Handle Value Indication MSC </b> + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD<:PEER [label = "ATT Handle Value Indication", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_HVX {INDICATION, data}"]; + * APP=>SD [label = "sd_ble_gattc_hv_confirm(handle)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Handle Value Confirmation", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTC_HVN_MSC GATTC Handle Value Notification + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD<:PEER [label = "ATT Handle Value Notification", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTC_EVT_HVX {NOTIFICATION, data}"]; + * @endmsc + * + * @defgroup BLE_GATTC_TIMEOUT_MSC GATTC Timeout + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox PEER [label="Any GATTC API used"]; + * SD:>PEER [label = "ATT Packet", textcolor="#000080", linecolor="#000080"]; + * APP note PEER [label = "No Response from Peer"]; + * |||; + * ...; + * |||; + * SD box SD [label="Timeout"]; + * APP<<=SD [label = "BLE_GATTC_EVT_TIMEOUT {source}"]; + * APP rbox PEER [label="No additional ATT Traffic Allowed", textbgcolour="#ff7f7f"]; + * APP=>SD [label = "Any API call"]; + * APP<<SD [label = "NRF_ERROR_BUSY"]; + * @endmsc + * @} + * @} + */ + +/** + * @addtogroup BLE_GATTS + * @{ + * @defgroup BLE_GATTS_MSC Message Sequence Charts + * @{ + * @defgroup BLE_GATTS_ATT_TABLE_POP_MSC GATTS ATT Table Population + * @msc + * hscale = "1.5"; + * APP,SD; + * |||; + * APP=>SD [label = "sd_ble_gatts_service_add(uuid#1)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_srvc#1}"]; + * APP=>SD [label = "sd_ble_gatts_characteristic_add(handle_srvc#1, char_md, value)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_char#1, ...}"]; + * APP=>SD [label = "sd_ble_gatts_descriptor_add(handle_char#1, value)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_desc#1}"]; + * APP=>SD [label = "sd_ble_gatts_descriptor_add(handle_char#1, value)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_desc#2}"]; + * APP=>SD [label = "sd_ble_gatts_characteristic_add(handle_srvc#1, char_md, value)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_char#2, ...}"]; + * APP=>SD [label = "sd_ble_gatts_descriptor_add(handle_char#2, value)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_desc#3}"]; + * APP=>SD [label = "sd_ble_gatts_service_add(uuid#2)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_srvc#2}"]; + * APP=>SD [label = "sd_ble_gatts_include_add(handle_srvc#2, handle_srvc#1)"]; + * APP<<SD [label = "{NRF_SUCCESS, handle_inc#1}"]; + * |||; + * ...; + * |||; + * @endmsc + * + * @defgroup BLE_GATTS_READ_REQ_NO_AUTH_MSC Read Request without Authorization + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD<:PEER [label = "ATT Read Request", textcolor="#000080", linecolor="#000080"]; + * SD:>PEER [label = "ATT Read Response", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTS_WRITE_REQ_NO_AUTH_MSC GATTS Write Request without Authorization + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD<:PEER [label = "ATT Write Request", textcolor="#000080", linecolor="#000080"]; + * SD:>PEER [label = "ATT Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {WRITE_REQ, data}"]; + * @endmsc + * + * @defgroup BLE_GATTS_WRITE_CMD_NO_AUTH_MSC GATTS Write Command with or without Authorization + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD<:PEER [label = "ATT Write Command", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {WRITE_CMD, data}"]; + * @endmsc + * + * @defgroup BLE_GATTS_READ_REQ_AUTH_MSC GATTS Read Request with Authorization + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * SD<:PEER [label = "ATT Read Request", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {READ, current_value}"]; + * --- [label = " Variant #1 App Authorizes "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(SUCCESS, app_value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD rbox SD [label="Value in ATT Table: app_value"]; + * SD:>PEER [label = "ATT Read Response {app_value}", textcolor="#000080", linecolor="#000080"]; + * --- [label = " Variant #2 App Disallows "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(READ_NOT_PERMITTED)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Error Response", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTS_WRITE_REQ_AUTH_MSC GATTS Write Request with Authorization + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * SD<:PEER [label = "ATT Write Request {peer_data}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, peer_value}"]; + * --- [label = " Variant #1 App Authorizes "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(SUCCESS)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD rbox SD [label="Value in ATT Table: peer_data"]; + * SD:>PEER [label = "ATT Write Response", textcolor="#000080", linecolor="#000080"]; + * --- [label = " Variant #2 App Disallows "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE_NOT_PERMITTED)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Error Response", textcolor="#000080", linecolor="#000080"]; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * @endmsc + * + * @defgroup BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC GATTS Queued Writes: Stack handled, no attributes require authorization + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; + * APP=>SD [label = "sd_ble_user_mem_reply {user_mem_block}"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #1 Attribute Values validation passed "]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; + * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="App parses the memory it provided"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * |||; + * --- [label = " Variant #2 Attribute Values validation failed "]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Error Response {Invalid Value Length / Offset}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * |||; + * --- [label = " Variant #3 Peer cancels operation "]; + * SD<:PEER [label = "ATT Execute Write Request {CANCEL}", textcolor="#000080", linecolor="#000080"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * |||; + * @endmsc + * + * @defgroup BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC GATTS Queued Writes: Stack handled, one or more attributes require authorization + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; + * APP=>SD [label = "sd_ble_user_mem_reply {user_mem_block}"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; + * |||; + * --- [label = " Variant #1 App Authorizes both Prepare Write and Execute Write"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="App parses the memory it provided"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * |||; + * --- [label = " Variant #2 App Disallows Prepare Write and Authorizes Execute Write "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, INSUF_AUTHORIZATION)"]; + * SD:>PEER [label = "ATT Error Response {Insufficient Authorization}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="App parses the memory it provided"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * |||; + * --- [label = " Variant #3 App Authorizes Prepare Write and Disallows Execute Write "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="App parses the memory it provided"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, APP_ERROR_CODE)"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Error Response {APP_ERROR_CODE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * @endmsc + * + * @defgroup BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC GATTS Queued Writes: App handled, no attributes require authorization + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; + * APP=>SD [label = "sd_ble_user_mem_reply {NULL}"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_1, offset_1, peer_value_1}"]; + * APP rbox APP [label="App queues {handle_1, offset_1, peer_value_1}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; + * APP rbox APP [label="App queues {handle_2, offset_2, peer_value_2}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * |||; + * --- [label = " Variant #1 Attribute values in stack memory (VLOC_STACK), attribute values validation passed "]; + * APP=>SD [label = "sd_ble_gatts_value_set {handle_1, offset_1, peer_value_1}"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_ble_gatts_value_set {handle_2, offset_2, peer_value_2}"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #2 Attribute values in user memory (VLOC_USER), attribute values validation passed "]; + * APP rbox APP [label="Application traverses its queue and executes the write operations (memcpy)"]; + * APP rbox APP [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #3 Attribute values validation failed "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, INVALID_OFFSET)"]; + * APP rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Error Response {Invalid Offset}", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC GATTS Queued Writes: App handled, one or more attributes require authorization + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox APP [label="Values in ATT Table (in user memory):\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; + * APP=>SD [label = "sd_ble_user_mem_reply {NULL}"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_1, offset_1, peer_value_1}"]; + * APP rbox APP [label="App queues {handle_1, offset_1, peer_value_1}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; + * |||; + * --- [label = " Variant #1 App Authorizes both Prepare Write and Execute Write"]; + * APP rbox APP [label="App queues {handle_2, offset_2, peer_value_2}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="Application traverses its queue and executes the write operations (memcpy)"]; + * APP rbox APP [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: peer_value_2"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #2 App Disallows Prepare Write and Authorizes Execute Write "]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, INSUF_AUTHORIZATION)"]; + * SD:>PEER [label = "ATT Error Response {Insufficient Authorization}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="Application traverses its queue and executes the write operations (memcpy)"]; + * APP rbox APP [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * |||; + * --- [label = " Variant #3 App Authorizes Prepare Write and Disallows Execute Write "]; + * APP rbox APP [label="App queues {handle_2, offset_2, peer_value_2}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, APP_ERROR_CODE)"]; + * APP rbox APP [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Error Response {APP_ERROR_CODE}", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC GATTS Queued Writes: Prepare Queue Full + * @msc + * hscale = "2"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: current_value_1\nhandle_2: current_value_2"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_REQUEST {BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES}"]; + * |||; + * --- [label = " Variant #1 Stack handled "]; + * APP=>SD [label = "sd_ble_user_mem_reply {user_mem_block}"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * SD:>PEER [label = "ATT Error Response {Prepare Queue Full}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; + * APP<<=SD [label = "BLE_GATTS_EVT_WRITE {EXEC_WRITE_REQ_NOW}"]; + * APP rbox APP [label="App parses the memory it provided"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_USER_MEM_RELEASE {user_mem_block}"]; + * |||; + * --- [label = " Variant #2 App handled "]; + * APP=>SD [label = "sd_ble_user_mem_reply {NULL}"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_1, offset_1, peer_value_1}"]; + * APP rbox APP [label="App queues {handle_1, offset_1, peer_value_1}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD:>PEER [label = "ATT Prepare Write Response {handle_1, offset_1, peer_value_1}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Prepare Write Request {handle_2, offset_2, peer_value_2}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, PREP_WRITE_REQ, handle_2, offset_2, peer_value_2}"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, PREPARE_QUEUE_FULL)"]; + * SD:>PEER [label = "ATT Error Response {Prepare Queue Full}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Execute Write Request {WRITE}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST {WRITE, EXEC_WRITE_REQ_NOW}"]; + * APP=>SD [label = "sd_ble_gatts_value_set {handle_1, offset_1, peer_value_1}"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * APP=>SD [label = "sd_ble_gatts_rw_authorize_reply(WRITE, SUCCESS)"]; + * SD rbox SD [label="Values in ATT Table:\nhandle_1: peer_value_1\nhandle_2: current_value_2"]; + * SD:>PEER [label = "ATT Execute Write Response", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTS_HVI_MSC GATTS Handle Value Indication + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox PEER [label="Indications Enabled in CCCD"]; + * |||; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * APP=>SD [label = "sd_ble_gatts_hvx(INDICATION, app_value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD rbox SD [label="Value in ATT Table: app_value"]; + * SD:>PEER [label = "ATT Handle Value Indication {app_value}", textcolor="#000080", linecolor="#000080"]; + * --- [label = " Variant #1 Peer Confirms "]; + * SD<:PEER [label = "ATT Handle Value Confirmation", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_HVC"]; + * --- [label = " Variant #2 Peer Ignores "]; + * |||; + * ...; + * |||; + * SD box SD [label="Timeout"]; + * APP<<=SD [label = "BLE_GATTS_EVT_TIMEOUT"]; + * @endmsc + * + * @defgroup BLE_GATTS_HVN_MSC GATTS Handle Value Notification + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox PEER [label="Notifications Enabled in CCCD"]; + * |||; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * APP=>SD [label = "sd_ble_gatts_hvx(NOTIFICATION, app_value)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD rbox SD [label="Value in ATT Table: app_value"]; + * SD:>PEER [label = "ATT Handle Value Notification {app_value}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_TX_COMPLETE"]; + * @endmsc + * + * @defgroup BLE_GATTS_HVX_DISABLED_MSC GATTS Handle Value Indication or Notification disabled + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox PEER [label="Indications and Notifications Disabled in CCCD"]; + * |||; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * APP=>SD [label = "sd_ble_gatts_hvx(INDICATION or NOTIFICATION, app_value)"]; + * APP<<SD [label = "NRF_ERROR_INVALID_STATE"]; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * @endmsc + * + * @defgroup BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC GATTS Handle Value Indication or Notification with System Attributes Missing + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP rbox PEER [label="System Attributes Uninitialized"]; + * |||; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * APP=>SD [label = "sd_ble_gatts_hvx(INDICATION or NOTIFICATION, app_value)"]; + * APP<<SD [label = "BLE_ERROR_GATTS_SYS_ATTR_MISSING"]; + * SD rbox SD [label="Value in ATT Table: current_value"]; + * APP=>SD [label = "sd_ble_gatts_sys_attr_set()"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * ...; + * @endmsc + * + * @defgroup BLE_GATTS_SC_MSC GATTS Service Changed + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox SD [label="Entries added to the ATT Table between handles N and M"]; + * |||; + * APP rbox PEER [label="Connection Established with a Bonded Peer"]; + * |||; + * APP=>SD [label = "sd_ble_gatts_service_changed(N, M)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Handle Value Indication {N, M}", textcolor="#000080", linecolor="#000080"]; + * SD<:PEER [label = "ATT Handle Value Confirmation", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_SC_CONFIRM"]; + * |||; + * SD rbox PEER [label="Service Discovery"]; + * @endmsc + * + * @defgroup BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC GATTS System Attributes Handling: Unknown Peer + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established with an Unknown Peer"]; + * |||; + * SD<:PEER [label = "ATT Read Request {sys_attr_handle}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_SYS_ATTR_MISSING"]; + * APP=>SD [label = "sd_ble_gatts_sys_attr_set(NULL)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Response {sys_attr_value}", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * + * @defgroup BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC GATTS System Attributes Handling: Bonded Peer + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP rbox PEER [label="Connection Established with a Bonded Peer"]; + * |||; + * APP rbox PEER [label="ATT Traffic"]; + * |||; + * APP rbox PEER [label="Connection Terminated"]; + * APP<<=SD [label = "BLE_GAP_EVT_DISCONNECTED {reason}"]; + * |||; + * APP=>SD [label = "sd_ble_gatts_sys_attr_get()"]; + * APP<<SD [label = "{NRF_SUCCESS, sys_attr_data}"]; + * APP rbox APP [label="Store System Attributes"]; + * |||; + * APP rbox SD [label="Shut down IC"]; + * |||; + * APP rbox SD [label="Power up IC"]; + * |||; + * APP rbox PEER [label="Connection Established with the Bonded Peer"]; + * SD<:PEER [label = "ATT Read Request {sys_attr_handle}", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_GATTS_EVT_SYS_ATTR_MISSING"]; + * APP rbox APP [label="Load System Attributes"]; + * APP=>SD [label = "sd_ble_gatts_sys_attr_set(sys_attr_data)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "ATT Read Response {sys_attr_value}", textcolor="#000080", linecolor="#000080"]; + * @endmsc + * @} + * + * @addtogroup BLE_GATTS_QUEUED_WRITES_USER_MEM User memory layout for Queued Writes + * @{ + * The following table shows the memory layout used by the SoftDevice to queue a Queued Write operation (Prepare Write ATT packet) in user memory: + * + * <table style="border:1px solid black;border-collapse:collapse;"> + * <caption>Queued Write</caption> + * <tr> + * <th style="border:1px solid black;padding:5px;">Parameter</th> + * <th style="border:1px solid black;padding:5px;">Size (octets)</th> + * <th style="border:1px solid black;padding:5px;">Description</th> + * </tr> + * <tr> + * <td style="border:1px solid black;padding:5px;">Handle</td> + * <td style="border:1px solid black;padding:5px;">2</td> + * <td style="border:1px solid black;padding:5px;">Attribute Handle</td> + * </tr> + * <tr> + * <td style="border:1px solid black;padding:5px;">Offset</td> + * <td style="border:1px solid black;padding:5px;">2</td> + * <td style="border:1px solid black;padding:5px;">Value Offset</td> + * </tr> + * <tr> + * <td style="border:1px solid black;padding:5px;">Length</td> + * <td style="border:1px solid black;padding:5px;">2</td> + * <td style="border:1px solid black;padding:5px;">Value Length</td> + * </tr> + * <tr> + * <td style="border:1px solid black;padding:5px;">Value</td> + * <td style="border:1px solid black;padding:5px;">Length</td> + * <td style="border:1px solid black;padding:5px;">Attribute Value</td> + * </tr> + * </table> + * + * The application can parse the array of Queued Write instances at any time, but it is recommended to do so whenever an Execute Write ATT packet + * has been received over the air. See the GATT Server Queued Writes MSCs for more details. + * The array will be terminated by an Queued Write instance with its handle set to @ref BLE_GATT_HANDLE_INVALID. + * @} + * @} + */ + +/** + * @addtogroup BLE_L2CAP + * @{ + * @defgroup BLE_L2CAP_MSC Message Sequence Charts + * @{ + * @defgroup BLE_L2CAP_API_MSC L2CAP API + * @msc + * hscale = "1.5"; + * APP,SD,PEER; + * |||; + * APP=>SD [label = "sd_ble_l2cap_cid_register(cid)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * |||; + * APP rbox PEER [label="Connection Established"]; + * |||; + * APP=>SD [label = "sd_ble_l2cap_tx(data)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_EVT_TX_COMPLETE"]; + * SD<:PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_L2CAP_EVT_RX"]; + * SD<:PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; + * APP<<=SD [label = "BLE_L2CAP_EVT_RX"]; + * |||; + * APP=>SD [label = "sd_ble_l2cap_tx(data)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * SD:>PEER [label = "L2CAP packet", textcolor="#000080", linecolor="#000080"]; + * SD=>>APP [label = "BLE_EVT_TX_COMPLETE"]; + * |||; + * APP rbox PEER [label="Terminate Connection"]; + * |||; + * APP=>SD [label = "sd_ble_l2cap_cid_unregister(cid)"]; + * APP<<SD [label = "NRF_SUCCESS"]; + * @endmsc + * @} + * @} + */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,302 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the S110 SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_EVT_GET = BLE_SVC_BASE, /**< Get an event from the pending events queue. */ + SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company id, LMP Version, LMP Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ +}; + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVTS_PTR_ALIGNMENT 4 + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @brief Maximum number of Vendor Specific UUIDs. +*/ +#define BLE_UUID_VS_MAX_COUNT 10 + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ + BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ + BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ +}; + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/** + * @brief TX complete event. + */ +typedef struct +{ + uint8_t count; /**< Number of packets transmitted. */ +} ble_evt_tx_complete_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occured. */ + union + { + ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ + uint16_t evt_len; /**< Length in octets excluding this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + } evt; +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< LMP Version number for BT 4.0 spec is 6 (https://www.bluetooth.org/technical/assignednumbers/link_layer.htm). */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< LMP Sub Version number corresponds to the SoftDevice Config ID. */ +} ble_version_t; + + +/**@brief Get an event from the pending events queue. + * + * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is + * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). + * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine + * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called + * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. + * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into + * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned + * and the application can then call again with a larger buffer size. + * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, + * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. + * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. + * + * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT + * + * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); + + +/**@brief Get the total number of available application transmission buffers in the BLE stack. + * + * @details This call allows the application to obtain the total number of + * transmission buffers available for application data. Please note that + * this does not give the number of free buffers, but rather the total amount of them. + * The application has two options to handle its own application transmission buffers: + * - Use a simple arithmetic calculation: at boot time the application should use this function + * to find out the total amount of buffers available to it and store it in a variable. + * Every time a packet that consumes an application buffer is sent using any of the + * exposed functions in this BLE API, the application should decrement that variable. + * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application + * it should retrieve the count field in such event and add that number to the same + * variable storing the number of available packets. + * This mechanism allows the application to be aware at any time of the number of + * application packets available in the BLE stack's internal buffers, and therefore + * it can know with certainty whether it is possible to send more data or it has to + * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. + * - Choose to simply not keep track of available buffers at all, and instead handle the + * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and + * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. + * + * The API functions that <b>may</b> consume an application buffer depending on + * the parameters supplied to them can be found below: + * + * - @ref sd_ble_gattc_write (write witout response only) + * - @ref sd_ble_gatts_hvx (notifications only) + * - @ref sd_ble_l2cap_tx (all packets) + * + * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon + * successful return. + * + * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); + + +/**@brief Add a Vendor Specific UUID. + * + * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, + * for later use all other modules and APIs. This then allows the application to use the shorter, + * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to + * check for lengths and having split code paths. The way that this is accomplished is by extending the + * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The + * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) + * to the table populated by multiple calls to this function, and the uuid field in the same structure + * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the + * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. + * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @return @ref NRF_SUCCESS Successfully encoded into the buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[in] p_version Pointer to ble_version_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Version information stored successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); + +#endif /* BLE_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_err.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x001) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid attribute handle. */ +#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x003) /**< Buffer capacity exceeded. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#endif + + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_gap.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,895 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + +/** + * @brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ + SD_BLE_GAP_ADV_START, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ + SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ +}; + + +/** @addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +/** @} */ + + +/** @defgroup BLE_GAP_ROLES GAP Roles + * @note Not explicitly used in peripheral API, but will be relevant for central API. + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/** @} */ + + +/** @defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ +/** @} */ + + +/** @defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ +/** @} */ + + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN 6 + + +/** @defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/** @} */ + + +/** @defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/** @} */ + + +/** @defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /** @} */ + + +/** @brief Maximum size of advertising data in octets. */ +#define BLE_GAP_ADV_MAX_SIZE 31 + + +/** @defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * @{ */ +#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ +#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ +/** @} */ + + +/** @defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/** @} */ + + +/** @defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ +/** @} */ + + +/** @defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/** @} */ + +/** @defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/** @} */ + + +/** @defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/** @} */ + +/** @defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +/** @} */ + +/** @defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/** @} */ + +/** @defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/** @} */ + + +/**@brief GAP device name maximum length. */ +#define BLE_GAP_DEVNAME_MAX_LEN 31 + + +/** @defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/** @brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/** @brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/** @brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/** @brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/** @brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/** @brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/** @} */ + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + +/**@brief Maximum amount of addresses in a whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + +/**@brief Maximum amount of IRKs in a whitelist. + * @note The number of IRKs is limited to 8, even if the hardware supports more. + */ +#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) + +/** @defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ + +/** @} */ + + +/** @} */ + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP link requirements. + * + * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets.*/ +} ble_gap_conn_sec_t; + + + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Whitelist structure. */ +typedef struct +{ + ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ + uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ + ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ + uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ +} ble_gap_whitelist_t; + + +/**@brief GAP advertising parameters.*/ +typedef struct +{ + uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ + ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ + uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ + ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ + uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ + uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ +} ble_gap_adv_params_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ + uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ + uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ + uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ + uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ +} ble_gap_scan_params_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection required. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< Out Of Band data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint16_t div; /**< Encryption Diversifier. */ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 7; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[8]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Identity Information. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ +} ble_gap_id_info_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + + +/** + * @brief GAP Event IDs. + * Those IDs uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ + BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ + BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ + BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ + BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ + BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ + BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ + BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ + BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ +}; + + +/** @brief Event data for connected event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ + uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_connected_t; + + +/** @brief Event data for disconnected event. */ +typedef struct +{ + uint8_t reason; /**< HCI error code. */ +} ble_gap_evt_disconnected_t; + + +/** @brief Event data for connection parameter update event. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + + +/** @brief Event data for security parameters request event. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/** @brief Event data for securito info request event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint16_t div; /**< Encryption diversifier for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/** @brief Event data for passkey display event. */ +typedef struct +{ + uint8_t passkey[6]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ +} ble_gap_evt_passkey_display_t; + + +/** @brief Event data for authentication key request event. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + + +/** @brief Security levels supported. + * @note See Bluetooth Specification Version 4.0 Volume 3, Chapter 10. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ +} ble_gap_sec_levels_t; + + +/** @brief Keys that have been exchanged. */ +typedef struct +{ + uint8_t ltk : 1; /**< Long Term Key. */ + uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ + uint8_t irk : 1; /**< Identity Resolving Key. */ + uint8_t address : 1; /**< Public or static random address. */ + uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ +} ble_gap_sec_keys_t; + + +/** @brief Event data for authentication status event. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ + ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ + struct periph_keys_t + { + ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ + } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ + struct central_keys_t + { + ble_gap_irk_t irk; /**< Central's IRK. */ + ble_gap_addr_t id_info; /**< Central's Identity Info. */ + } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ +} ble_gap_evt_auth_status_t; + + +/** @brief Event data for connection security update event. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/** @brief Event data for timeout event. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ +} ble_gap_evt_timeout_t; + + +/** @brief Event data for advertisement report event. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ +} ble_gap_evt_rssi_changed_t; + + + +/**@brief GAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ + } params; + +} ble_gap_evt_t; + + +/**@brief Set local Bluetooth address. + * + * @param[in] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(ble_gap_addr_t const * const p_addr)); + + +/**@brief Get local Bluetooth address. + * + * @param[out] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); + + +/**@brief Set, clear or update advertisement and scan response data. + * + * @note The format of the advertisement data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertisement data and scan response data. + * + * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding + * length (dlen/srdlen) set to 0. + * + * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * + * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * + * @return @ref NRF_SUCCESS The BLE stack has started advertising. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. + * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint + * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * + * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a BLE_GAP_EVT_DISCONNECTED event. + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). + * + * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * + * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. + * + * @return @ref NRF_SUCCESS Successfully changed the transmit power. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value set successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); + + +/**@brief Set GAP device name. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. + * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS GAP device name retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); + + +/**@brief Initiate GAP Authentication procedure. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. + * + * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. + * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. + * + * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. + * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, + * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout + * + * + * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail + * if the application supplies a different value. + * + * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with an authentication key. + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). + * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @return @ref NRF_SUCCESS Authentication key successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); + + +/**@brief Reply with GAP security information. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. + * + * @return @ref NRF_SUCCESS Successfully accepted security information. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Current connection security successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); + + +/**@brief Stop reporting the received singnal strength. + * + * An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); + +#endif // BLE_GAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_gatt.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,166 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include "ble_types.h" +#include "ble_ranges.h" + + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default MTU size. */ +#define GATT_MTU_SIZE_DEFAULT 23 + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 +/** @} */ + +/** @} */ + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of value permitted. */ + uint8_t read :1; /**< Reading value permitted. */ + uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ + uint8_t write :1; /**< Writing value with Write Request permitted. */ + uint8_t notify :1; /**< Notications of value permitted. */ + uint8_t indicate :1; /**< Indications of value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ +} ble_gatt_char_ext_props_t; + +#endif // BLE_GATT_H__ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_gattc.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,395 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include "ble_gatt.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ +}; + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) +/** @} */ + +/**@brief Last Attribute Handle. */ +#define BLE_GATTC_HANDLE_END 0xFFFF + +/** @} */ + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see BLE_GATT_WRITE_OPS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t* p_value; /**< Pointer to the value data. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ +} ble_gattc_write_params_t; + + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ + BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ +}; + +/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data, variable length. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data, variable length. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). + Please note that this pointer is absolute to the memory provided by the user when retrieving the event, + so it will effectively point to a location inside the handle_value array. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values, variable length. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data Offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data, variable length. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief GATTC event type. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; + + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates a Primary Service discovery, starting from the supplied handle. + * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the + * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @return @ref NRF_SUCCESS Successfully started the Write procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + + +#endif /* BLE_GATTC_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_gatts.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,547 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_l2cap.h" +#include "ble_gap.h" +#include "ble_gatt.h" +#include "nrf_svc.h" + + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ +}; + + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + + +/** @} */ + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. */ +} ble_gatts_attr_t; + + +/**@brief GATT Attribute Context. */ +typedef struct +{ + ble_uuid_t srvc_uuid; /**< Service UUID. */ + ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + uint16_t srvc_handle; /**< Service Handle. */ + uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ + uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ +} ble_gatts_attr_context_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ + ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ + uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Read Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_read_authorize_params_t; + +/**@brief GATT Write Authorisation parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ +} ble_gatts_write_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ + } params; +} ble_gatts_rw_authorize_reply_params_t; + + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ + BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ +}; + + +/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the incoming data. */ + uint8_t data[1]; /**< Incoming data, variable length. */ +} ble_gatts_evt_write_t; + +/**@brief Event structure for authorize read request. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + + +/**@brief GATT Server event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + } params; +} ble_gatts_evt_t; + + +/**@brief Add a service declaration to the local server ATT table. + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the ATT table. + * + * @return @ref NRF_SUCCESS Successfully added a service declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); + + +/**@brief Add an include declaration to the local server ATT table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). + * + * @note The included service must already be present in the ATT table prior to this call. + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added an include declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, + * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a characteristic. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); + + +/**@brief Add a descriptor to the local server ATT table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a descriptor. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); + +/**@brief Set the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to write from. + * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. + * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. + * + * @return @ref NRF_SUCCESS Successfully set the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); + +/**@brief Get the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to read from. + * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. + * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * p_len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in p_data. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from + * the peer. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and + * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. + * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). + * + * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the + * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with + * the contents pointed by it before sending the notification or indication. + * + * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute + * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. + * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, + * or for Read Authorization reply: requested handles not replied with, + * or for Write Authorization reply: handle supplied does not match requested handle. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply to the stack information about persistent system attributes. + * This call is legal in the connected state only, and is usually + * made immediately after a connection is established and the bond identified. + * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the struct. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved data for this bond. + * + * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * + * @return @ref NRF_SUCCESS Successfully set the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored perisistently by the application + * after a connection has been terminated. When a new connection is made to the same bond, the values + * should be restored using @ref sd_ble_gatts_sys_attr_set. + * The data should be read before any new advertising is started, or any new connection established. The connection handle for + * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to + * obtain the length of the data + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. + * + * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); + + +#endif // BLE_GATTS_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_hci.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,96 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 +/*0x23 LMP Error Transaction Collision*/ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +0x30 Parameter Out Of Mandatory Range +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E + +/** @} */ + + +#endif // BLE_HCI_H__ + +/** @} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_l2cap.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,135 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "nrf_svc.h" + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ + SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ + SD_BLE_L2CAP_TX /**< Transmit a packet. */ +}; + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP + * @{ */ +#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ +/** @} */ + +/**@brief Default L2CAP MTU. */ +#define BLE_L2CAP_MTU_DEF (23) + +/**@brief Invalid Channel Identifier. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Dynamic Channel Identifier base. */ +#define BLE_L2CAP_CID_DYN_BASE (0x0040) + +/**@brief Maximum amount of dynamic CIDs. */ +#define BLE_L2CAP_CID_DYN_MAX (8) + +/** @} */ + +/**@brief Packet header format for L2CAP transmission. */ +typedef struct +{ + uint16_t len; /**< Length of valid info in data member. */ + uint16_t cid; /**< Channel ID on which packet is transmitted. */ +} ble_l2cap_header_t; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ +}; + + +/**@brief L2CAP Received packet event report. */ +typedef struct +{ + ble_l2cap_header_t header; /** L2CAP packet header. */ + uint8_t data[1]; /**< Packet data, variable length. */ +} ble_l2cap_evt_rx_t; + + +/**@brief L2CAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union + { + ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ + } params; +} ble_l2cap_evt_t; + + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. + * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully unregistered the CID. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. + */ +SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection Handle. + * @param[in] p_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * + * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @return @ref NRF_ERROR_NOT_FOUND CID not found. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); + + +#endif // BLE_L2CAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_ranges.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,72 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC and event number subranges + @{ + + @brief Definition of SVC and event number subranges for each API module. + + @note + SVCs and event numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC and event values are defined in each module's ble_<module>.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#define BLE_SVC_BASE 0x60 +#define BLE_SVC_LAST 0x6B /* Total: 12. */ + +#define BLE_RESERVED_SVC_BASE 0x6C +#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ + +#define BLE_GAP_SVC_BASE 0x70 +#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ + +#define BLE_GATTC_SVC_BASE 0x90 +#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ + +#define BLE_GATTS_SVC_BASE 0xA0 +#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ + +#define BLE_L2CAP_SVC_BASE 0xB0 +#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ + + +#define BLE_EVT_INVALID 0x00 + +#define BLE_EVT_BASE 0x01 +#define BLE_EVT_LAST 0x0F /* Total: 15. */ + +#define BLE_GAP_EVT_BASE 0x10 +#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ + +#define BLE_GATTC_EVT_BASE 0x30 +#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ + +#define BLE_GATTS_EVT_BASE 0x50 +#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ + +#define BLE_L2CAP_EVT_BASE 0x70 +#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ + +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/ble_types.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,157 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the S110 SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include <stdint.h> + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + unsigned char uuid128[16]; +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + + + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/nrf_error.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy + +#endif // NRF_ERROR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/nrf_error_sdm.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) + +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/nrf_error_soc.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/nrf_sdm.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +/* Header guard */ +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf_soc.h" +#include "nrf_error_sdm.h" + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE 0x10 + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_FORWARD_TO_APPLICATION,/**< ::sd_softdevice_forward_to_application */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/**@brief Possible lfclk oscillator sources. */ +enum NRF_CLOCK_LFCLKSRCS +{ + NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ + NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing lfclk oscillator source. */ +typedef uint32_t nrf_clock_lfclksrc_t; + + +/**@brief SoftDevice Assertion Handler type. + * + * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. + * + * @param[in] pc The program counter of the failed assert. + * @param[in] line_number Line number where the assert failed. + * @param[in] file_name File name where the assert failed. + */ +typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to enable the SoftDevice. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available + * - A portion of RAM will be unavailable (see relevant SDS documentation) + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) + * - Interrupts will not arrive from protected peripherals or interrupts + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) + * - Chosen low frequency clock source will be running + * + * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). + * @param assertion_handler Callback for SoftDevice assertions. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Start forwarding interrupts to application. + * + * This function is only intended to be called when a bootloader is enabled is used. + * The bootloader should call this right before it starts the application. + * It is recommended that all interrupt sources are off when this is called, + * or you could end up having interrupts in the application being executed before main() of the application. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_FORWARD_TO_APPLICATION, uint32_t, sd_softdevice_forward_to_application(void)); + +/** @} */ + +#endif // NRF_SDM_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/nrf_soc.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,777 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** + @defgroup nrf_soc_api SoC Library API + @{ + + @brief APIs for the SoC library. + +*/ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include <stdint.h> +#include <stdbool.h> +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf51_bitfields.h" +#include "nrf_error_soc.h" + +/** @addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE 0x20 + +/**@brief Guranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_MUTEX_NEW = SOC_SVC_BASE, + SD_MUTEX_ACQUIRE, + SD_MUTEX_RELEASE, + SD_NVIC_ENABLEIRQ, + SD_NVIC_DISABLEIRQ, + SD_NVIC_GETPENDINGIRQ, + SD_NVIC_SETPENDINGIRQ, + SD_NVIC_CLEARPENDINGIRQ, + SD_NVIC_SETPRIORITY, + SD_NVIC_GETPRIORITY, + SD_NVIC_SYSTEMRESET, + SD_NVIC_CRITICAL_REGION_ENTER, + SD_NVIC_CRITICAL_REGION_EXIT, + SD_RAND_APPLICATION_POOL_CAPACITY, + SD_RAND_APPLICATION_BYTES_AVAILABLE, + SD_RAND_APPLICATION_GET_VECTOR, + SD_POWER_MODE_SET, + SD_POWER_SYSTEM_OFF, + SD_POWER_RESET_REASON_GET, + SD_POWER_RESET_REASON_CLR, + SD_POWER_POF_ENABLE, + SD_POWER_POF_THRESHOLD_SET, + SD_POWER_RAMON_SET, + SD_POWER_RAMON_CLR, + SD_POWER_RAMON_GET, + SD_POWER_GPREGRET_SET, + SD_POWER_GPREGRET_CLR, + SD_POWER_GPREGRET_GET, + SD_POWER_DCDC_MODE_SET, + SD_APP_EVT_WAIT, + SD_CLOCK_HFCLK_REQUEST, + SD_CLOCK_HFCLK_RELEASE, + SD_CLOCK_HFCLK_IS_RUNNING, + SD_PPI_CHANNEL_ENABLE_GET, + SD_PPI_CHANNEL_ENABLE_SET, + SD_PPI_CHANNEL_ENABLE_CLR, + SD_PPI_CHANNEL_ASSIGN, + SD_PPI_GROUP_TASK_ENABLE, + SD_PPI_GROUP_TASK_DISABLE, + SD_PPI_GROUP_ASSIGN, + SD_PPI_GROUP_GET, + SD_RADIO_NOTIFICATION_CFG_SET, + SD_ECB_BLOCK_ENCRYPT, + SD_RESERVED1, + SD_RESERVED2, + SD_RESERVED3, + SD_EVT_GET, + SD_TEMP_GET, + SD_FLASH_ERASE_PAGE, + SD_FLASH_WRITE, + SD_FLASH_PROTECT, + SVC_SOC_LAST +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Possible values of ::nrf_app_irq_priority_t. */ +enum NRF_APP_PRIORITIES +{ + NRF_APP_PRIORITY_HIGH = 1, + NRF_APP_PRIORITY_LOW = 3 +}; + +/**@brief Possible values of ::nrf_power_mode_t. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Possible values of ::nrf_power_failure_threshold_t */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ +}; + + +/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ + NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ + NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ +}; + +/**@brief Possible values of ::nrf_radio_notification_distance_t. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Possible values of ::nrf_radio_notification_type_t. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RESERVED1, + NRF_EVT_RESERVED2, + NRF_EVT_RESERVED3, + NRF_EVT_RESERVED4, + NRF_EVT_RESERVED5, + NRF_EVT_NUMBER_OF_EVTS +}; + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief The interrupt priorities available to the application while the softdevice is active. */ +typedef uint8_t nrf_app_irq_priority_t; + +/**@brief Represents a power mode, used in power mode functions */ +typedef uint8_t nrf_power_mode_t; + +/**@brief Represents a power failure threshold value. */ +typedef uint8_t nrf_power_failure_threshold_t; + +/**@brief Represents a DCDC mode value. */ +typedef uint32_t nrf_power_dcdc_mode_t; + +/**@brief Radio notification distances. */ +typedef uint8_t nrf_radio_notification_distance_t; + +/**@brief Radio notification types. */ +typedef uint8_t nrf_radio_notification_type_t; + + +/**@brief AES ECB data structure */ +typedef struct +{ + uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ + uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ + uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ +} nrf_ecb_hal_data_t; + +/** @} */ + +/** @addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * @pre{priority is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); + +/**@brief Enters critical region. + * + * @post Application interrupts will be disabled. + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region 1: If in a nested critical region. + * 0: Otherwise. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + + @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + @param[in] length Number of bytes to take from pool and place in p_buff. + + @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + +/**@brief Sets the power-fail threshold value. + * + * @param[in] threshold The power-fail threshold value to use. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); + +/**@brief Sets bits in the NRF_POWER->RAMON register. + * + * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); + +/** @brief Clears bits in the NRF_POWER->RAMON register. + * + * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); + +/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. + * + * @param[out] p_ramon Content of NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); + +/**@brief Set bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); + +/**@brief Clear bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); + +/**@brief Get contents of the NRF_POWER->GPREGRET register. + * + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); + +/**@brief Sets the DCDC mode. + * + * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. + * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When + * the radio transmission is done, the last mode will be used. + * + * @param[in] dcdc_mode The mode of the DCDC. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the + * interrupt is disabled. When the interrupt is enabled it will be taken immediately since + * this function will wait in thread mode, then the execution will return in the application's + * main thread. When an interrupt is disabled and gets pended it will return to the application's + * thread main. The application must ensure that the pended flag is cleared using + * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for + * disabled interrupts, as the interrupt handler will clear the pending flag automatically for + * enabled interrupts. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 + * System Control Register (SCR). @sa CMSIS_SCB + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50us from call to return. + * + * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write + * + * Commands to write a buffer to flash + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] p_dst Pointer to start of flash location to be written. + * @param[in] p_src Pointer to buffer with data to be written + * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. + * + * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. + * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); + + +/**@brief Flash Erase page + * + * Commands to erase a flash page + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] page_number Pagenumber of the page to erase + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_ERASE_PAGE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + +/**@brief Flash Protection set + * + * Commands to set the flash protection registers PROTENSETx + * + * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. + * + * @param[in] protenset0 Value to be written to PROTENSET0 + * @param[in] protenset1 Value to be written to PROTENSET1 + * + * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice + * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx + */ +SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); + + +/** @} */ + +#endif // NRF_SOC_H__ + +/** + @} + */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/nrf_svc.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,33 @@ +#ifndef NRF_SVC__ +#define NRF_SVC__ + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ + __attribute__((naked)) static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (number) : "r0" \ + ); \ + } +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = number) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION +#endif // NRF_SVC__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_API/include/softdevice_assert.h Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** @brief Utilities for verifying program logic + */ + +#ifndef SOFTDEVICE_ASSERT_H_ +#define SOFTDEVICE_ASSERT_H_ + +#include <stdint.h> + +/** @brief This function handles assertions. + * + * + * @note + * This function is called when an assertion has triggered. + * + * + * @param line_num The line number where the assertion is called + * @param file_name Pointer to the file name + */ +void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); + + +/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ +/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ +/** @brief Check intended for production code + * + * Check passes if "expr" evaluates to true. */ +#define ASSERT(expr) \ +if (expr) \ +{ \ +} \ +else \ +{ \ + assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ + /*lint -unreachable */ \ +} + +#endif /* SOFTDEVICE_ASSERT_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_license.txt Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,174 @@ +NORDIC SEMICONDUCTOR ASA SOFTDEVICE LICENSE AGREEMENT + + +License Agreement for the Nordic Semiconductor ASA ("Nordic") +S110 Bluetooth SoftDevice software package ("SoftDevice"). + + +You ("You" "Licensee") must carefully and thoroughly read this License +Agreement ("Agreement"), and accept to adhere to this Agreement before +downloading, installing and/or using any software or content in the +SoftDevice provided herewith. + +YOU ACCEPT THIS LICENSE AGREEMENT BY (A) CLICKING ACCEPT OR AGREE TO +THIS LICENSE AGREEMENT, WHERE THIS OPTION IS MADE AVAILABLE TO YOU; OR +(B) BY ACTUALLY USING THE SOFTDEVICE, IN THIS CASE YOU AGREE THAT THE +USE OF THE SOFTDEVICE CONSTITUTES ACCEPTANCE OF THE LICENSING +AGREEMENT FROM THAT POINT ONWARDS. + +IF YOU DO NOT AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT, THEN +DO NOT DOWNLOAD, INSTALL/COMPLETE INSTALLATION OF, OR IN ANY OTHER WAY +MAKE USE OF THE SOFTDEVICE. + + + +1. Grant of License + +Subject to the terms in this Agreement Nordic grants Licensee a +limited, non-exclusive, non-transferable, non-sub licensable, +revocable license ("License"): (a) to use the SoftDevice solely in +connection with a Nordic integrated circuit, and (b) to distribute the +SoftDevice solely as integrated in Licensee Product. Licensee shall +not use the SoftDevice for any purpose other than specifically +authorized herein. It is a material breach of this agreement to use or +modify the SoftDevice for use on any wireless connectivity integrated +circuit other than a Nordic integrated circuit. + + +2. Title + +Nordic retains full rights, title, and ownership to the SoftDevice and +any and all patents, copyrights, trade secrets, trade names, +trademarks, and other intellectual property rights in and to the +SoftDevice. + + +3. No Modifications or Reverse Engineering + +Licensee shall not, modify, reverse engineer, disassemble, decompile +or otherwise attempt to discover the source code of any non-source +code parts of the SoftDevice including, but not limited to +pre-compiled hex files, binaries and object code. + + +4. Distribution Restrictions + +Except as set forward in Section 1 above, the Licensee may not +disclose or distribute any or all parts of the SoftDevice to any third +party. Licensee agrees to provide reasonable security precautions to +prevent unauthorized access to or use of the SoftDevice as proscribed +herein. Licensee also agrees that use of and access to the SoftDevice +will be strictly limited to the employees and subcontractors of the +Licensee necessary for the performance of development, verification +and production tasks under this Agreement. The Licensee is responsible +for making such employees and subcontractors comply with the +obligations concerning use and non-disclosure of the SoftDevice. + + +6. No Other Rights + +Licensee shall use the SoftDevice only in compliance with this +Agreement and shall refrain from using the SoftDevice in any way that +may be contrary to this Agreement. + + +7. Fees + +Nordic grants the License to the Licensee free of charge provided that +the Licensee undertakes the obligations in the Agreement and warrants +to comply with the Agreement. + + +8. DISCLAIMER OF WARRANTY + +THE SOFTDEVICE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND +EXPRESS OR IMPLIED AND NEITHER NORDIC, ITS LICENSORS OR AFFILIATES NOR +THE COPYRIGHT HOLDERS MAKE ANY REPRESENTATIONS OR WARRANTIES, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR THAT THE +SOFTDEVICE WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, +TRADEMARKS OR OTHER RIGHTS. THERE IS NO WARRANTY BY NORDIC OR BY ANY +OTHER PARTY THAT THE FUNCTIONS CONTAINED IN THE SOFTDEVICE WILL MEET +THE REQUIREMENTS OF LICENSEE OR THAT THE OPERATION OF THE SOFTDEVICE +WILL BE UNINTERRUPTED OR ERROR-FREE. LICENSEE ASSUMES ALL +RESPONSIBILITY AND RISK FOR THE SELECTION OF THE SOFTDEVICE TO ACHIEVE +LICENSEES INTENDED RESULTS AND FOR THE INSTALLATION, USE AND RESULTS +OBTAINED FROM IT. + + +9. No Support + +Nordic is not obligated to furnish or make available to Licensee any +further information, software, technical information, know-how, +show-how, bug-fixes or support. Nordic reserves the right to make +changes to the SoftDevice without further notice. + + +10. Limitation of Liability + +In no event shall Nordic, its employees or suppliers, licensors or +affiliates be liable for any lost profits, revenue, sales, data or +costs of procurement of substitute goods or services, property damage, +personal injury, interruption of business, loss of business +information or for any special, direct, indirect, incidental, +economic, punitive, special or consequential damages, however caused +and whether arising under contract, tort, negligence, or other theory +of liability arising out of the use of or inability to use the +SoftDevice, even if Nordic or its employees or suppliers, licensors or +affiliates are advised of the possibility of such damages. Because +some countries/states/jurisdictions do not allow the exclusion or +limitation of liability, but may allow liability to be limited, in +such cases, Nordic, its employees or licensors or affiliates +liability shall be limited to USD 50. + + +11. Breach of Contract + +Upon a breach of contract by the Licensee, Nordic and its licensor are +entitled to damages in respect of any direct loss which can be +reasonably attributed to the breach by the Licensee. If the Licensee +has acted with gross negligence or willful misconduct, the Licensee +shall cover both direct and indirect costs for Nordic and its +licensors. + + +12. Indemnity + +Licensee undertakes to indemnify, hold harmless and defend Nordic and +its directors, officers, affiliates, shareholders, licensors, +employees and agents from and against any claims or lawsuits, +including attorney's fees, that arise or result of the Licensees +execution of the License and which is not due to causes for which +Nordic is responsible. + + +13. Governing Law + +This Agreement shall be construed according to the laws of Norway, and +hereby submits to the exclusive jurisdiction of the Oslo tingrett. + + +14. Assignment + +Licensee shall not assign this Agreement or any rights or obligations +hereunder without the prior written consent of Nordic. + + +15. Termination + +Without prejudice to any other rights, Nordic may cancel this +Agreement if Licensee does not abide by the terms and conditions of +this Agreement. Upon termination Licensee must promptly cease the use +of the License and destroy all copies of the Licensed Technology and +any other material provided by Nordic or its affiliate, or produced by +the Licensee in connection with the Agreement or the Licensed +Technology. + + +16. Third party beneficiaries + +Nordics licensors are intended third party beneficiaries under this +Agreement. + + +
Binary file targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_migration-document.pdf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_readme.txt Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,14 @@ +s110_nrf51822_6.0.0 + +This release consists of the following: +- This readme file +- The s110_nrf51822_6.0.0 license +- The s110_nrf51822_6.0.0 softdevice (binary hex file) +- The s110_nrf51822_6.0.0 API (softdevice header files) +- The s110_nrf51822_6.0.0 release notes +- The s110_nrf51822_6.0.0 migration document + + +IMPORTANT NOTE: If you intend to use the softdevice with the nRF51 +SDK only, you do _not_ need the API files. The API header files are +already installed as part of the nRF51 SDK versions 5.0.0 and 5.1.0.
Binary file targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_releasenotes.pdf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6_0_0/s110_nrf51822_6.0.0_softdevice.hex Tue Mar 18 12:30:07 2014 +0000 @@ -0,0 +1,4835 @@ +:020000040000FA +:10000000481C0020992B0100F1160100CF2A0100A5 +:1000100000000000000000000000000000000000E0 +:100020000000000000000000000000000D2C010096 +:100030000000000000000000F1160100F1160100B0 +:10004000752C01007B2C0100F1160100F116010056 +:10005000F1160100F1160100F1160100F116010080 +:10006000812C0100F1160100F1160100872C01001E +:10007000F11601008D2C0100B9020000FF81000083 +:10008000F1160100F1160100F1160100F116010050 +:10009000F1160100F1160100F1160100F116010040 +:1000A000932C0100992C0100F1160100F1160100BA +:1000B000F1160100F1160100F1160100F116010020 +:1000C00000F002F812F04FFD0CA030C808382418D8 +:1000D0002D18A246671EAB4654465D46AC4201D180 +:1000E00012F041FD7E460F3E0FCCB646012633424C +:1000F00000D0FB1AA246AB46334318475C2C0100E4 +:100100008C2C0100103A02D378C878C1FAD8520773 +:1001100001D330C830C101D504680C6070470000BD +:100120000023002400250026103A01D378C1FBD813 +:10013000520700D330C100D50B6070471FB5C046D1 +:10014000C04612F093FC04B00FB41FBD826902498F +:100150008161024810447047610100000100000005 +:1001600001B41EB400B50FF067FE01B401988646D5 +:1001700001BC01B01EBD0000F0B4404649465246E5 +:100180005B460FB402A0013001B50648004700BF2E +:1001900001BC86460FBC8046894692469B46F0BC11 +:1001A00070470000C1000000401E00BF00BF00BF3C +:1001B00000BF00BF00BF00BF00BF00BF00BF00BF47 +:1001C00000BFF1D17047000070B505460C461646D9 +:1001D00002E00FCC0FC5103E102EFAD2082E02D32B +:1001E00003CC03C5083E042E07D301CC01C5361F3E +:1001F00003E021782970641C6D1C761EF9D270BD55 +:100200008307FF22DB0E9A408907090E99400028D8 +:100210000BDA0007000F0838830828489B001B18DA +:10022000D86990430843D8617047830824489B00ED +:100230001B181868904308431860704710B50446AF +:1002400000210120FFF7DCFF00211820FFF7D8FF75 +:1002500000210B20FFF7D4FF02211920FFF7D0FF68 +:1002600002210D20FFF7CCFF02210E20FFF7C8FF6F +:1002700002210F20FFF7C4FF0221C81FFFF7C0FFB4 +:1002800003211620FFF7BCFF03211520FFF7B8FF5D +:10029000204600F019F8002010BD49210180704768 +:1002A00010B500F04FF810BD0648704710B500F0CB +:1002B0004AF810BD704770477047000000ED00E03D +:1002C00000E400E003F900C330B50546384C95B0B2 +:1002D00006202070A01CFFF7E0FF5920A0803548C1 +:1002E00061880069344A80B2D269344B120C98425A +:1002F00004D18A4208D032A1B42003E0884203D05E +:100300002FA1B72012F0DDFB334802F057F9044665 +:10031000072000F0D7F92146254800F015FA6D1E98 +:10032000072D0AD8302168460170857001F0CCF99C +:10033000002802D009A800F065FC204601F0BBFAB5 +:1003400015B030BD704710B50C46014660390B2919 +:1003500003D8214601F01CFF06E001466C39032951 +:1003600004D8214601F047FF206010BD01467039D6 +:100370001F2903D8214600F03FF8F5E701469039E0 +:100380000F2903D8214600F0C1F8EDE70146A03956 +:100390000F2903D8214600F029F9E5E70146B039D5 +:1003A0000F2903D8214600F006F9DDE70120DBE73D +:1003B000140000200010001040000010FFFF00009B +:1003C0007372635C636F72655F66756E6374696F89 +:1003D0006E732E63000000006D1C000070477047B4 +:1003E00070477047704770477047704710B50128D5 +:1003F00001D100F0CEF910BD10B57038030012F035 +:1004000065FC150C10141C20232A31363B3F434752 +:100410004E535A626A72797E8300086803F0FDFBCE +:1004200010BD086803F050FC10BD0C790B7B8A6886 +:100430000868214603F06EFC10BD086803F0E8FC74 +:1004400010BD03F0BAF910BD08884A6880B21146A1 +:1004500003F06CFE10BD0A790888114680B203F0E3 +:10046000BCFE10BD087840B203F0C7FE10BD08887E +:1004700080B203F0E3FE10BD086803F0F2FE10BD89 +:10048000086803F00AFF10BD086803F036FF10BDCE +:10049000088982B209C9194603F061FF10BD05C978 +:1004A000114603F0B0FF10BD08884A6880B21146BB +:1004B00003F0CEFF10BD0B7908888A6880B2194618 +:1004C00004F010F810BD0B7908888A6880B21946CC +:1004D00004F0B9F810BD08884B688A6880B21946E4 +:1004E00004F0FAF810BD08884A6880B2114604F09A +:1004F00045F910BD088880B204F05EF910BD088887 +:1005000080B204F07CF910BD012010BD10B5903808 +:10051000030012F0DBFB09060F161D242C363F46A4 +:100520004E0088888A6883B20888194680B204F031 +:1005300030FD10BD08884A6880B2114604F086FD7F +:1005400010BD08884A6880B2114604F0C9FD10BD8C +:1005500008884A6880B2114604F0FFFD10BD088883 +:100560004B688A6880B2194604F030FE10BD0889D5 +:1005700082B2888883B20888194680B204F065FE8A +:1005800010BD08894B6882B20888194680B204F011 +:100590009AFE10BD08884A6880B2114604F0CAFE6F +:1005A00010BD888882B20888114680B204F05EFFD0 +:1005B00010BD012010BD10B5B02805D0B12808D05D +:1005C000B2280BD0012010BD088880B205F042FA95 +:1005D00010BD088880B205F06DFA10BD08884B6820 +:1005E0008A6880B2194605F076FA10BD10B5A038B9 +:1005F000030012F06BFB0B070E172028323C434D13 +:10060000545D65004B6808788A68194606F090FDCD +:1006100010BD88888A6883B20888194680B206F0BF +:100620009CFD10BD08884C68CB688A6880B2214662 +:1006300006F0A3FD10BD08884B688A6880B2194691 +:1006400006F0BDFD10BD8888CB6884B208888A6832 +:1006500080B2214606F0DDFD10BD8888CB6884B2EB +:1006600008888A6880B2214606F0E3FD10BD08883C +:100670004A6880B2114606F00BFE10BD088982B2AE +:10068000888883B20888194680B206F00BFE10BD38 +:1006900008884A6880B2114606F024FE10BD088919 +:1006A0004B6882B20888194680B206F0A1FE10BDE0 +:1006B00008884B688A6880B2194606F05EFF10BD54 +:1006C000012010BD10B507F09BF80FF0CFF907F02F +:1006D00049FD0FF01DFB07F0B3FD07F0D1FC10BD85 +:1006E0001CB50446002069460870204608F020FD2D +:1006F0006946204608F0DEFB002803D1FBA1B120AB +:1007000012F0DFF901A9204608F033FB002803D1DD +:10071000F6A1B62012F0D5F9684600781CBD70B578 +:10072000F74D002428462C7620308471C47112F0D5 +:10073000DBFA284640380470203084738474847651 +:100740002C74AC7070BDEAE710B50C46ED49828898 +:100750008A8042884A800078087008460A38847087 +:1007600008F0DDFAFFF7DBFF204609F01FFDE44A41 +:10077000E0321146383908461446813808F04AFDFF +:100780002146E0480AF0FDFF08F0C9FC12F0ACFA7F +:1007900010BD10B50120FFF721FE10BDF8B509F01E +:1007A0004CF9D84DD64C0A3D022802D0207C0028B6 +:1007B0007CD0207E0026102819D1A078002803D0F4 +:1007C000CAA1D14812F07DF9CD48E838817A89076D +:1007D0000DD50146267160398989E180C17A21727F +:1007E00081896181C089A0810120A0702676C44FD3 +:1007F000203FB87C002859D1C4486946808908F058 +:1008000059FB002805D06946687809784018687057 +:1008100004E0C520B5A1C00012F053F9207C0028E7 +:1008200038D0BA488189FF300930406D80898142D3 +:1008300004D0B548ADA1223012F043F9B348808905 +:1008400008F0DEFB002804D1AF48A8A1283012F040 +:1008500038F908F04CFC00281CD0AC488089FFF720 +:100860003FFF697840186870A5484038416D2031D5 +:100870000A7C012A0DD1A54A3E779289C287487C1D +:1008800020700120B876207E102801D0282800D1C1 +:10089000267626746978002908D09C488289FF3022 +:1008A0000930C28601870120B8746E7009F0BAF869 +:1008B000002805D1207C002802D0A87801F0A2FEF3 +:1008C000F8BDF8B50F460446FFF768FF8C4D403D74 +:1008D00028788B4E002813D0002F10D1307E0028AE +:1008E00004D0FF2081A1BE3012F0EBF82C22A91C0D +:1008F000204611F049FF0E202070002028708FE064 +:100900007F4D203DA87B002818D0002FF7D1307EE6 +:10091000102808D0282806D0002804D0FF2073A172 +:10092000CA3012F0CEF80120E070E87BA070287C7D +:1009300060700F2020700020A87371E00121204614 +:1009400008F00EFC002807D0307C002851D1394631 +:10095000204608F005FCF8BDA97C69480C380090D9 +:1009600068480A38002913D00178052910D2002FD1 +:1009700056D1491C0170002666700D2020700120A0 +:1009800028750622A01C009911F0FEFEAE7447E007 +:100990005C4800210A380170B078002814D0002F7C +:1009A0003ED1307E002803D050A1594812F089F87A +:1009B000002565700120524920700A22091DA01CE3 +:1009C00011F0E2FEB5702BE0394620460AF046FEF3 +:1009D000002825D1A87C002805D0002F20D1494827 +:1009E0000A380178C5E7A87E002802D0307C0028AC +:1009F00001D00020F8BD002F12D1307E002804D095 +:100A00008D203AA1800012F05CF8002666700A2062 +:100A10003B4920700622091FA01C11F0B5FEAE76DE +:100A20000120F8BD10B53648017E002908D1007CB0 +:100A3000012805D001210020FFF743FF002801D045 +:100A4000072010BD012010BD10B5012409F0F8FBEE +:100A50000443FFF7E7FF044308F062FB014621432C +:100A6000084610BDF8B51D4614460E4608F0A1F91B +:100A7000002807D0684608F0A7F9002803D0002C0A +:100A800007D101E00120F8BD992018A1800012F0E3 +:100A900018F808F045F9A04204D21D4813A15830B7 +:100AA00012F00FF8009807F0B9FD3146009807F0F2 +:100AB000C7FDE2B22946009807F07EFF08F096F9DC +:100AC000002804D19D2009A1800011F0FAFF08F050 +:100AD00029FB0E4800244030C17B002902D0C4739A +:100AE00009F080FC0948C480CCE700007372635CA5 +:100AF0006C6C5F6374726C2E73302E6300000000A8 +:100B0000E0020020240000200B06000098010020D5 +:100B10000D02000010B50179002907D001290AD083 +:100B2000F749FE2011F0CDFF002010BD831D428843 +:100B30000488022103E042880488831D01212046A5 +:100B4000FFF790FF10BDF8B51F4615460E46044648 +:100B500008F073FF022803D0EA48007C00281FD069 +:100B6000E9488089208008F04BFA002803D1E44945 +:100B7000E64811F0A6FF0524684608F04CFA002864 +:100B80000ED0009807F094FD3070022809D001289B +:100B900007D008F080FA641E2406240EECD1002051 +:100BA000F8BD3946009807F01FFF2880002804D1BF +:100BB000D648D349123011F084FF08F06CFA0028AF +:100BC00004D1AF20CE49800011F07BFF0120F8BD99 +:100BD00038B50446831D821C6946FFF7B4FF002820 +:100BE0000DD00020607168460078012808D00228E6 +:100BF00006D0FF20C249203011F063FF012038BD2C +:100C00002071FBE700215CE670B5BE4C0546403C18 +:100C10002078002803D1BB48007E002803D0B849C3 +:100C2000BB4811F04EFF287808F093FB28780AF0B3 +:100C3000EEFE00202071012060713921E1702070EA +:100C400070BD70B5AF4D0446403D2878002803D1F3 +:100C5000AC48007E002804D0AD48A949183811F0EE +:100C600030FFA94E2188B089884203D108F0E5FE03 +:100C7000022807D002202871012068713821E9700C +:100C8000287070BD7F2070769F48E1782030C17356 +:100C9000A17881730020EEE710B59A4C403C207893 +:100CA000002807D19748007E002803D108F0C5FE30 +:100CB000032804D161209249C00011F002FF91493C +:100CC00000202031C8712071012060713A21E1704B +:100CD000207010BD70B58B4C0646403C2078002833 +:100CE00007D18848007E002803D108F0A6FE03281B +:100CF00004D186488249783011F0E3FE814D2035D9 +:100D0000E87908280CD2E87910220001001968302F +:100D1000314600F09FFDE879401CE871002000E0BA +:100D200007202071012060713B21E170207070BDAF +:100D3000F8B5744C0546403C2078002803D1714832 +:100D4000007E002804D072486D49443811F0B9FE85 +:100D5000A878002801D0012804D1A888FF21F53106 +:100D6000884204D96A4866493E3811F0AAFE664EA8 +:100D70002988B089884203D108F05FFE022807D095 +:100D800002202071012060713621E1702070F8BDD1 +:100D90005D48002720308772A988B185012131760E +:100DA000A978012900D00021817257484030C07BCA +:100DB000002801D009F016FB2771E3E770B5514C0C +:100DC0000546403C2078002807D14E48007E002888 +:100DD00003D108F032FE002804D04D484849673856 +:100DE00011F06FFE287809F02EFA00202071012002 +:100DF00060713021E170207070BD70B5414C0546C6 +:100E0000403C2078002803D13E48007E002804D0D2 +:100E10003F483B490D3011F054FE287800280BD094 +:100E2000012809D0022807D06878402804D3384820 +:100E30003349143011F045FE284608F0F6FD00282D +:100E400001D0002000E00C202071012060713421CD +:100E5000E170207070BD70B52A4C0546403C20788A +:100E6000002807D12748007E002803D108F0E5FDBF +:100E7000002804D0264822495C3811F022FE297847 +:100E8000002914D00A2912D0142910D01E290ED0FE +:100E900028290CD032290AD04B2908D0642906D041 +:100EA000FF2904D01A481649503811F00AFE284686 +:100EB00009F028FA00202071012060713321E170CF +:100EC000207070BD70B50F4C0546403C207800285E +:100ED00003D10C4A107E002804D00D48084975380B +:100EE00011F0EFFD062229460A4811F04DFC0020C2 +:100EF0002071012060713221E170207070BD00000E +:100F0000EC0A0000E002002098010020A30200008B +:100F1000910500001D00002070B5F84C05462078B2 +:100F2000002804D120464030007E002803D0F44938 +:100F3000F44811F0C6FD00216956042914D0002997 +:100F400012D0081D10D0001D0ED0001D0CD0001DA9 +:100F50000AD0001D08D00A3006D0283104D0A120C4 +:100F6000E749C00011F0ADFDE74829780170012084 +:100F700060713121E1702070C0E710B5DF4C20783E +:100F8000002804D120464030007E002804D067208D +:100F9000DB49000111F095FD07F0C2FEE08007F08B +:100FA00087FF207200202071012060710521E1700F +:100FB000207010BDF8B5D14C07462034A07B2546E3 +:100FC0002035002805D1287E002802D1A8780028E5 +:100FD00004D0CC48CA492A3811F073FD08F02DFD21 +:100FE0001026022822D1C9483988808988421DD11B +:100FF000C249483908460A7F6038807A002A03D0FF +:1010000080070CD40C200CE0800708D40620087759 +:10101000BE484030C07B002801D009F0E3F92E76AD +:101020000020E07326740120A073F8BD0220F8E7C9 +:1010300010B5B24C2078002804D120464030007E04 +:10104000002804D0AF48AE493C3811F03AFD0020EA +:1010500020710E20A0700F20E070FF20A0710020F2 +:10106000C0432081AA480178A1728188A18140886B +:10107000E08101206071207010BD10B59F4C207878 +:10108000002804D120464030007E002804D0DB2018 +:101090009B49800011F015FD0821A01D0EF082FD76 +:1010A00000202071012060712B21E170207010BDA3 +:1010B00070B5924D04462878002804D12846403067 +:1010C000007E002804D0B7208D49C00011F0F9FC43 +:1010D0008E4810222146303800F0BCFB8B4810228D +:1010E000A118203800F0B6FB884830380EF061FEB9 +:1010F0008649102210392C46A81D00F0ABFB0020B9 +:1011000020710E20A0702A20E070012060712070F4 +:10111000F4E6F8B5794C05462034A07B2646203607 +:10112000002802D1307E002804D076487449DC388B +:1011300011F0C7FCA978052912D0132910D0142961 +:101140000ED015290CD01A290AD0292908D03D29FA +:1011500006D03B2904D06B486949D43811F0B1FC62 +:1011600028886C49884204D966486549CB3811F013 +:10117000A8FC08F062FC0C212827022809D163484A +:101180002A888089904215D15C484838027E002A1E +:1011900001D0E17310E0A97841760121017637761C +:1011A0000020E07359484030C07B002804D009F08B +:1011B00019F901E00220E07327740120A073F8BD43 +:1011C00070B54E4C05462078002804D122464032A6 +:1011D000107E002804D083204949C00011F071FC22 +:1011E0004648294660300622054611F0CDFA012016 +:1011F000A8710021217160711721E17020707DE6D6 +:10120000F0B5414F85B0403F3D7A06463B480078F7 +:10121000002804D13846A038007E002803D0384981 +:101220003D4811F04EFC3078002806D0012804D04B +:101230000D203349800111F044FC082D39D2324889 +:1012400020380190C469307800282CD0012804D0BF +:1012500031482B490F3011F034FC29460831012068 +:10126000884004430120A84020430090B179234CDA +:1012700008027279690009191043FF310131888130 +:10128000B01C11F0E2FA717800020843A9000919B4 +:10129000C031C862387A401C387201990098C86120 +:1012A0000020207108E0294608310120884084434D +:1012B000D8E7124807210171012110480B22417122 +:1012C000C270017005B0F0BD10B50C4C207800283C +:1012D00004D120464030007E002804D00E48084942 +:1012E0000E3811F0EEFB11F0FFFC00202071012000 +:1012F00060710A21E170207010BD0000A002002082 +:10130000EC0A000006050000C00300209801002040 +:1013100024000020FF0E00003F03000010B508F07D +:101320000AFF002803D0FC49FC4811F0CAFB07F073 +:10133000F5FE07F0D8FC0AF016FA002804D0F748AA +:10134000F5490E3011F0BDFB07F039FF002804D03D +:10135000F248F149123011F0B4FB11F0C5FCF0482D +:1013600000240470FFF7DBF9EE480121047141719C +:101370000222C2700170BFE770B5EA4D04462878BA +:10138000002804D128464030007E002804D0EF20F9 +:10139000E149800011F095FB20781F2801D8601CDE +:1013A00004D1DE48DC49DE3011F08BFB00202871CF +:1013B0002078611C07F0BCFF012068712021E970D2 +:1013C00028709BE5F8B5D74C054620782646403670 +:1013D00000280CD1307E002809D108F02EFB00280F +:1013E00002D1307C002807D0287800280ED0CB48C6 +:1013F000C949EB3011F065FB2878012806D0002898 +:1014000004D0C648C449F03011F05BFB0120607184 +:1014100028780027C44D01280BD0002008F074FE66 +:10142000002844D00C2020711B20E0700120207087 +:10143000F8BD0C20207107F003FF0028F4D0BA4853 +:1014400002210C300EF037FB002806D00F21A889AE +:10145000090211F013FAA98100E0AF8101220321F2 +:10146000B14807F0E9FAB04808F051F8A88907F048 +:1014700059FC002803D1A849AC4811F022FBA889E7 +:10148000002107F053FE002804D0A848A249001DFF +:1014900011F017FB317F708B08F0D9FE002804D0C3 +:1014A000A2489D49083011F00CFB2771BCE7277159 +:1014B000307C0028B8D1A889FFF712F9B4E770B5DD +:1014C000984D04462878002804D128464030007EF4 +:1014D000002804D0954890493B3811F0F2FA207862 +:1014E0001F2801D8601C04D190488B493A3811F06C +:1014F000E8FA002028712078611C07F02DFF0120F8 +:1015000068711A21E9702870F8E4F8B5854D044631 +:1015100028780C272E464036002806D1307E002839 +:1015200003D108F08AFA032804D16F207A49C00059 +:1015300011F0C7FA6079002801D001282FD1A079D5 +:10154000002801D001282AD1A07B002805D001283D +:1015500003D0022801D0032821D1607B40071ED090 +:10156000618801208003814202D82288824201D909 +:1015700020790CE02079002804D0022805D0032827 +:1015800003D004E0202904D209E0A02A01D20128D6 +:1015900005D12088884207D92079012804D06348E2 +:1015A0005D495F3811F08DFA20887083207930779B +:1015B0006079002802D0012803D00CE05C4A0021A9 +:1015C00005E0584A60329079002804D00121204675 +:1015D00007F03AFE074601202F7168711821E97063 +:1015E0002870F8BD70B54F4C05462078002804D10E +:1015F00020464030007E002804D04C484649B63092 +:1016000011F05FFA08F019FA0C2102280ED14648B1 +:101610002A8883899A4219D10246C032137F002B4F +:1016200004D1807E0E2803D00F2801D0217103E061 +:1016300005201077002020710E20A0702E20E07071 +:101640002888E08001206071207057E40220F2E7D2 +:1016500070B5344C05462078002804D1204640302F +:10166000007E002804D031482B498A3011F029FA35 +:1016700008F0E3F90C2102280ED12B482A8883892F +:101680009A421FD10646C036327F002A04D1807E9E +:101690000E2803D00F2801D0217109E02148102223 +:1016A000A91C1E3811F070F804203077002020713A +:1016B0000E20A0702D20E0702888E080012060714D +:1016C00020701BE40220F2E710B501780B0011F046 +:1016D000FDFA3C90904590906590909090484B908A +:1016E00090905E619090909090904F3590393D90A1 +:1016F00090909041909090909090905390575B90E4 +:101700001F319078686C7074907C90878B84809087 +:10171000801CFFF79DFF6AE0EC0A0000DF0200007A +:10172000C0030020A002002098010020E90300006F +:101730001D000020801CFFF755FF58E0801CFFF7BC +:10174000E4FE54E0801CFFF7BAFE50E0801CFFF777 +:1017500039FE4CE0801CFFF70FFE48E0FFF7DEFD8E +:1017600045E0FFF7B1FD42E0801CFFF749FD3EE098 +:10177000801CFFF725FD3AE0801CFFF7CAFC36E02D +:10178000801CFFF795FC32E0FFF777FC2FE0FFF7B6 +:101790004FFC2CE0801CFFF70DFC28E0FFF7EDFB71 +:1017A00025E0801CFFF7B8FB21E0801CFFF78AFBD7 +:1017B0001DE0801CFFF74FFB19E0801CFFF71DFBAD +:1017C00015E0801CFFF7FAFA11E0801CFFF7B0FA71 +:1017D0000DE0801CFFF77EFA09E0FFF75DFA06E0F6 +:1017E000801CFFF72EFA02E0801CFFF70DFA0120A3 +:1017F00082E5002080E510B51D491E4811F061F911 +:101800007AE570B51D4A012411461B4D4031030095 +:1018100011F05CFA05191C1C04191C00012200219E +:10182000154807F009F91548002148380177417734 +:10183000C03808F068FD002804D00E480C49D330A9 +:1018400011F03FF964E40C74556561E46D200849BA +:101850000001F5E730B5134606E0CC18203CE47FE4 +:10186000D51A44555B1EDBB2002BF6D130BD00000B +:10187000EC0A0000CA05000098010020A002002028 +:1018800010B5030011F022FA070805080B0B0E0E25 +:10189000110003F0FAFF10BD01F0BAFF10BD0BF00C +:1018A0009BFF10BD0DF004FE10BDFF20F8A17D30A0 +:1018B00011F007F910BD7FB5F94AFA4C51689268EA +:1018C0000192009120700823F74A1946F7480EF05C +:1018D00093FB0025F6480EF0ADFB6D1CEDB2072D15 +:1018E000F8D3F1490320803140020BF0C7FF0028F4 +:1018F00003D0E7A1912011F0E4F81E220221ED4867 +:101900000AF077FBEB481E22032110300BF0EBF8B6 +:10191000E8480722342174300AF0C4FAE5484C2123 +:10192000283010F090FFE3496A46743108464C387D +:101930004164FF317B31816401211172039002F017 +:1019400016F902A80CF0CCFA002803D0D0A1A520EB +:1019500011F0B7F8D54802222421A8380AF0A2FADB +:10196000D24802222C215C380AF09CFAD2490B2082 +:101970000DF08AFE002803D0C5A1B22011F0A1F815 +:1019800003F070FF03F076F904F0D6FD6B46CB4A06 +:101990000821CBA002F04BF8002803D0BCA1B9204D +:1019A00011F08FF8012005F0C8F8002803D0B8A185 +:1019B000BB2011F086F87921C900C44810F043FF1C +:1019C000C249B74A0020135C0D18401CC0B2EB702E +:1019D0000428F8D3002060606070A0707FBD70B5EF +:1019E000BB4E0546706A94B00C46401C04D1B06AE8 +:1019F000C0430004000C0BD0306AC007C00F287031 +:101A0000706A10F033FFB06A2071000A607113E051 +:101A10002B206946087009A968460AF089FA00284F +:101A200003D09BA1DF2011F04CF801202870062282 +:101A30000AA9204610F0A8FE2878002815D0607961 +:101A4000C0210843607117206946087000A806226B +:101A50002146023010F098FE09A968460AF068FA9B +:101A6000002816D08AA1F42011E0322069460870BF +:101A700000A806222146023010F086FE09A9684619 +:101A80000AF056FA002804D0FF2081A1013011F09D +:101A900018F814B070BDF0B58D4C0646206895B0AE +:101AA0000D463746401C0837002808D16068401CA6 +:101AB00005D1A068401C02D1E068401C11D020680C +:101AC000314610F0D3FE6068311D10F0CFFEA068E3 +:101AD000394610F0CBFEE06831460C3110F0C6FEFE +:101AE00025E02B206946087009A968460AF020FA0B +:101AF000002804D0FF2066A1203010F0E2FF082269 +:101B00000AA9304610F040FE2B206946087009A94A +:101B100068460AF00DFA002804D0FF205CA12730A7 +:101B200010F0CFFF08220AA9384610F02DFE2069D8 +:101B30002E46401C0836002808D16069401C05D19B +:101B4000A069401C02D1E069401C12D020692946DE +:101B500010F08CFE6069291D10F088FEA0693146E6 +:101B600010F084FEE06929460C3110F07FFE15B0BC +:101B7000F0BD2B246846047009A90AF0D9F90028A1 +:101B800004D0FF2042A1453010F09BFF082209AF8E +:101B90000AA9284610F0F8FD6846047009A90AF061 +:101BA000C7F9002804D0FF2039A14C3010F089FF7C +:101BB0000822391D304610F0E7FDD8E710B50021A6 +:101BC00008460EF0ECFA002101200EF0E8FA0021A0 +:101BD00002200EF0E4FA002103200EF0E0FA0021CA +:101BE00004200EF0DCFA002105200EF0D8FA10BD1A +:101BF00010B5364CA0780A2804D3FF2024A19630D3 +:101C000010F05FFF20786021484300190830002160 +:101C100001704178E722C908C900C91C1140417010 +:101C2000204A0121517010BD70B51E4C607800280B +:101C30000ED0264800250178491CC9B201700A2936 +:101C400000D105708178491C81700EF072FB6570BF +:101C500070BD70B5134C05466068002804D0FF20A5 +:101C60000BA1BF3010F02DFF656070BD70B50D4E3B +:101C7000164DFFF7BDFF7168044600292AD0602287 +:101C8000FEF7A2FAFFF7D0FF00207060F1E7000036 +:101C90007372635C686F73745F636F72652E630049 +:101CA000F82C01002C000020C40300206C1100203F +:101CB00081180000440A0020141000203412000093 +:101CC0006E52463531383232000000004C0C002094 +:101CD000800000102879002852D0FE480AF0F2F85F +:101CE0006060002804D1FF20FB49DD3010F0E9FEE0 +:101CF00060680AF045F9002810D0204601F0A5F8E8 +:101D00006078010707D5C008C000401C60702879C2 +:101D1000401E287126E0EF48616829E0ED486168BF +:101D20000AF0D9F8687900282AD0EA484C380AF035 +:101D3000C9F86060002803D1E749E84810F0C1FE07 +:101D400060680AF021F9002815D0204603F0DCFD78 +:101D50006078010709D5C008C000801C60706879F0 +:101D6000401E6871FFF760FF83E7DA4861684C380E +:101D70000AF0B1F87DE7D74861684C380AF0ABF853 +:101D800070BDF7B505460078002700090C463E46B1 +:101D9000062804D0D148D049223010F092FE287A8B +:101DA00000280ED0012814D0CC48CB49433010F085 +:101DB00088FE0298002C068001D0278066800020D3 +:101DC000FEBD02270926002C0ED0A889A080A87B82 +:101DD00008E003271426002C06D02869E060A88AB2 +:101DE0002082287B2072E4E702980680E7E770B53E +:101DF0000E4600211C4619801546030010F066FFB0 +:101E00000723050B1711231D2300224629463046C0 +:101E100003F046FD70BD22462946304601F09BFA8C +:101E200070BD22462946304604F081FA70BD224634 +:101E30002946304602F052FF70BD22462946304600 +:101E4000FFF79FFF70BD4D20A349C00010F039FE81 +:101E5000032070BD01469F4810B54C380AF03BF88E +:101E60009F494879401CC0B24871012803D19D4860 +:101E7000007800F0C7FB10BDF8B505460720400705 +:101E80000F460A18012189038A4209D2002D02D087 +:101E90002818884204D2E81C80088000A84201D09B +:101EA0001020F8BD8E488178002911D03988009122 +:101EB0004178602251430C18083420783B460007D3 +:101EC000000F00222146FFF792FF060004D015E024 +:101ED000002038800520F8BD002D13D039880098E7 +:101EE000814201D90C260DE020783B460007000F07 +:101EF0002A462146FFF77BFF060005D00C2E01D0B5 +:101F0000002038803046F8BD754D6878401CC0B25E +:101F100068700A2801D100206870A878401EA87057 +:101F200061784807400F022810D00128EAD169489B +:101F3000616809F0D0FF2879401CC0B228710128DF +:101F4000E0D16848007800F05DFBDBE7C806D9D433 +:101F50006068FFF77FFFD5E770B504466248164614 +:101F60000D46814204D15D485B49DB3010F0A9FD8C +:101F7000012E05D059485849EB3010F0A2FD70BD34 +:101F80005848012181706620207000202072A581B0 +:101F9000A17370BD70B516460D46040001D1FFF760 +:101FA00027FE662101700121017229680161A9885B +:101FB00081820673002C01D1FFF736FE70BD072128 +:101FC0004907012241189203914201D31020704722 +:101FD0000721017000207047052210B5920390423E +:101FE0000ED301239B04C21A404B9A4208D3404BA4 +:101FF000984205D2072252078A18DB139A4201D36E +:10200000102010BD0DF079FB10BD052310B59B030A +:1020100099420ED301239B04344CCB1AA34208D31C +:10202000334B994205D2E3020124D318A403A342FF +:1020300001D3102010BD022803D0102801D00920A0 +:1020400010BD0DF080FB0028FAD0052010BD70B542 +:1020500005239B03984212D301239B04234CC31AEC +:10206000A3420CD3224B984209D2E4020D19DB1390 +:102070009D4204D2002A04D014199C4201D310209E +:1020800070BD0DF086FB0028FAD0072070BD10B59A +:1020900004460720400701212018890394B0884294 +:1020A00002D3102014B010BD01F0ADFD002801D006 +:1020B0001120F7E70F2008A9087369460BA809F05B +:1020C00037FF0028EED16846007A207068464089C4 +:1020D00060800FE010110020901C0000FF01000044 +:1020E0004C0C00202C000020FFFF00000000FC1F13 +:1020F0000040002068468089A0800020D2E710B50B +:1021000094B0044601F07FFD002801D01120C9E7FA +:10211000002C01D00720C5E7392168460170002155 +:10212000817009A909F004FF002803D01549164859 +:1021300010F0C7FC0020B5E770B5144C0846A17834 +:10214000002913D000280FD0072252070123851839 +:102150009B039D4203D20568AA189A4201D310201E +:1021600070BD8288002A03D0012903D0082070BDE9 +:10217000092070BD04F042FA0028FAD10021A170B4 +:1021800070BD0000901C0000790300002C000020AE +:1021900010B56038030010F099FD07050A0E131AF8 +:1021A00021252C0005C91146FFF766FE10BD086801 +:1021B000FFF705FF10BD05C91146FFF70DFF10BD64 +:1021C0004B6808788A681946FFF71FFF10BD4B68F7 +:1021D0008A6808681946FFF73AFF10BD0868FFF7DC +:1021E00056FF10BD08884A6880B21146FFF7A4FF69 +:1021F00010BD012010BD10B56C2801D0012010BD0C +:102200000878FFF77CFF10BD10B5EFF31080C4070E +:10221000E40F72B6D6484178491C417040780128D5 +:1022200001D10EF0ABF8002C00D162B610BD70B534 +:10223000CF4CE07800280AD10125E570FFF7E4FFD4 +:102240000EF0A4F8002804D000200EF077F800204B +:1022500070BDC84865714560F9E770B5EFF310804F +:10226000C507ED0F72B6C24C6078002803D1C2A139 +:102270008F2010F026FC6078401E60706078002887 +:1022800001D10EF07FF8002D00D162B670BD10B5FF +:10229000B748C178002904D000214171C170FFF70F +:1022A000DCFF002010BD10B504460EF06FF8B049F9 +:1022B000C978084000D001202060002010BDF8B58A +:1022C0000246AB4C0026A6710820042101251027E8 +:1022D000130010F0FBFC0D080A0C0E101214161E51 +:1022E000262123252800257122E0022001E021710A +:1022F0001EE020711CE027711AE02020F9E701267A +:1023000016E0FFF781FF0EF041F80028FBD002260F +:102310000EE02171A5710BE02771FBE7202000E0A2 +:1023200040202071F6E7FF2093A17E3010F0C9FB1A +:102330000EF038F8002809D00EF03AF8B04205D176 +:1023400030460EF038F80028FAD024E0012080074B +:10235000C5608D4A002151608C4A9661854B0222EE +:102360005A6085608A4803690569DB43DB06DB1731 +:102370005B1C10273D430561834D00E020BF6F6863 +:10238000002FFBD0002B03D1076910239F43076167 +:10239000784882606960A07900280CD00DF0F6FFC3 +:1023A00005460DF053FF7B4A002D02D0A260E0608D +:1023B00001E0E260A060002E01D100F0B1F8F8BDAC +:1023C00010B504460DF0E8FF002805D0684901204B +:1023D000C8704A78521C4A702046FFF770FF10BD43 +:1023E000F8B5694FB8680025012802D1BD600DF02D +:1023F000A5FF7868012800D17D60386801265C4C13 +:10240000012814D13D606079002803D000200DF030 +:1024100095FF65712078002809D00DF0B7FF0028DE +:1024200005D05948C038866300060661A670386931 +:1024300001282CD13D6100F068F801208007466139 +:10244000A079002815D00DF0A1FF00900DF0FEFE40 +:102450000099002901D0E16800E0A168411A022931 +:1024600001DA8A1C13DC0099002901D0E06000E049 +:10247000A060FFF7C9FE0DF089FF002806D0424892 +:10248000C038866300060661A67000E02670F86812 +:10249000012819D100F039F800F037F800F035F8CC +:1024A000A078002804D1FF2033A1053010F009FBEB +:1024B000FD60A5702570FFF7D0FE0DF042FA0028F0 +:1024C00002D03148C038C663F8BD10B5284CE0785A +:1024D000002801D10DF056FF01208107886100F02E +:1024E00014F8A07800280BD0274CE068002803D10E +:1024F0000DF061FF0028F8D10020E06000F005F841 +:1025000000201C49C043886010BD08B550206946B2 +:1025100008806A461088411E11800028F9D108BD44 +:10252000F8B5144819278760174900200860C8606B +:102530000DF02CFFBD0701240D4E002805D01248D8 +:10254000C03884632C61B47000E03470FFF75CFE27 +:10255000084847600D4930798863FFF7D6FFAC61C2 +:10256000FFF7D3FF0849002008616C61F8BD000047 +:1025700034000020000300407372635C736F635F7C +:10258000636C6F636B2E6300000100400005004028 +:1025900000ED00E0FFFFFF7F01203F49400608609B +:1025A0003E4908603E490A68FF231B029A43831292 +:1025B0001A430A60384980390860704710B50246EE +:1025C0000420384904E0C3005B181B79002B0AD0B3 +:1025D0000346401EC0B2002BF5D133A1432010F0BA +:1025E00070FAFF2010BDC300CA50002259184A716A +:1025F0008A7101220A7110BD2A4A0021C000801888 +:102600000171704710B50446042803D326A1522057 +:1026100010F057FA2348E1000C182079012803D064 +:1026200021A1532010F04DFA6079A179401CC0B26D +:10263000814200D060710120174940068031086056 +:1026400010BD70B5164800680004800F022803D042 +:1026500015A1692010F035FA124E194C0325207887 +:10266000C10088190279012A07D1427983799A42F7 +:1026700003D042798271705880472078401CC0B2E4 +:102680002070042801D30020207028466D1EEDB272 +:102690000028E4D170BD000080E100E080E200E0AD +:1026A00018E400E08C1100207372635C736F635F49 +:1026B0007369676E616C6C696E672E630000000061 +:1026C000440000208107C90E002808DA0007000F27 +:1026D000083880082C4A80008018C06904E080080F +:1026E0002A4A800080180068C8400006800F7047A2 +:1026F00010B50D20FFF7E6FFC4B20420C043FFF77A +:10270000E1FFC0B2844203D021A11A2010F0D9F910 +:1027100010BD0121234A48031060234B00221A6098 +:10272000224A5160224A1060224A11601D498039B4 +:102730000860704701211B4A480310601D4A516020 +:10274000194A002111601A490860704710B51649EE +:102750000868012804D00EA1562010F0B2F910BD6F +:10276000154880680022C0B20A600DF041FA10BD21 +:1027700010B50D4801680029FCD0FFF7E7FF0120E4 +:102780000B494003086010BD00ED00E000E400E0EC +:102790007372635C736F635F68616C5F726E672EE8 +:1027A0006300000080E100E000D1004000D3004061 +:1027B00080E200E000D0004000D5004030B40121AC +:1027C000BB48C9020160CD1005604A030260B948E8 +:1027D00003681B021B0A036004680023240A240206 +:1027E0000460B5480468240A24020460B348012444 +:1027F00044608460B24C23606360A360B14B196095 +:102800001D601A60B04B19601A600121016030BC74 +:10281000704710B40121A648CC0204600A0202608D +:102820000B060360A54841608160A549002008604F +:1028300048608860A34804600260036010BC704771 +:102840000121A048C9020160C91001607047002839 +:1028500005D0012805D0022805D19C4870479C4826 +:1028600070479C48704710B59BA18B2010F029F948 +:10287000002010BD70B500219E4C9F4D9F4A904B8B +:10288000002808D001281DD0022822D092A1B32010 +:1028900010F017F970BD01200004A060A86011605D +:1028A0001960974B42109A60964A9060804A0012D5 +:1028B0001060954801608648016094480160944822 +:1028C000017070BD01204004A060A8605160596093 +:1028D00070BD01208004A060A8609160996070BD07 +:1028E000F8B59446834A844D00240127744E00288D +:1028F00008D0012836D0022844D077A1E82010F073 +:10290000E0F8F8BD891E0902090A01200004906060 +:1029100034606860794A1160012B21D000217C4A23 +:102920007C4B517061463D31DC63DF637A4B5C6008 +:1029300002249C6004241C61734B196073490F606E +:10294000604B891519606F4B58605F48016074488F +:102950007249C16086606A49600348601770F8BDBB +:102960000121DCE701205B4E40046E4F012B04D1B6 +:102970003460506068603960F8BD906034606860B1 +:102980003960F8BD0120514E8004674F012BF4D10E +:10299000EEE766484068704770B5494D28680026E4 +:1029A000544C012806D1A068C00303D501200004BF +:1029B000A0602E606868012809D1A068800306D550 +:1029C00001204004A0606E6001200EF05BFAA86850 +:1029D000012809D1A068400306D501208004A06029 +:1029E000AE6002200EF04EFA70BD10B5484908786E +:1029F000002818D00120424AC0039060414A40009C +:102A000090602B4A001210603F4A00201060304A4C +:102A100010603E4A106008704A78002A02D0487060 +:102A20000EF030FA10BD0320FAE7012040490006FD +:102A300008607047012023490006086070470120A4 +:102A40003B4940050860704701201E494005086069 +:102A5000704730490020C8637047410A354AC005B5 +:102A6000C00D5043801C5143400A0818704710B4F1 +:102A7000314C430B63431B0C5C020C602D4C6343D5 +:102A8000C31A2E485C0258432A4B400D4343E31AB5 +:102A90000124DB0324041B191B1613700A68101889 +:102AA000086010BC704710B50EF0B6FA10BD0000FB +:102AB00080E100E008E400E018E400E000B000403D +:102AC00040B1004080E200E000E100E048B1004099 +:102AD0004081004044B100407372635C72656D5F79 +:102AE00068616C5F6576656E745F74696D65722E82 +:102AF0006300000000B3004040B3004040B5004018 +:102B000000F5014000830040408500400082004005 +:102B100045000020C08F004000850040008000403C +:102B200080F5014044B5004048B5004000B5004084 +:102B300000E200E0093D0000378600006F0C010054 +:102B400010B50EF055FA10BD012001218140064A52 +:102B5000116000BF00200549C8630120C8637047A9 +:102B600000200249C863704780E100E0C01F0040B8 +:102B700070B5FF4D044629680300A03110F0A6F897 +:102B800008053E08080E1D2C3242FAA1D22033E07F +:102B9000887F012832D0F7A1D8202DE001F058FE1F +:102BA00005282BD001F054FE062827D001F050FE56 +:102BB000072823D0EFA1DB201EE001F049FE032807 +:102BC0001CD001F045FE062818D001F041FE072870 +:102BD00014D0E8A1E0200FE0887F05280ED0E5A101 +:102BE000E52009E001F034FE052807D001F030FEB1 +:102BF000062803D0DFA1E8200FF063FF2868A0308B +:102C0000847770BDDBA1EC20F6E7D949C1220968C1 +:102C1000525CD206920F05D1A0318A8A824201D13C +:102C2000887D70470020704770B5044611202070E1 +:102C30000021CF4D61702968C0318978002908D002 +:102C400003290ED0042910D0FF20CAA116300FF09E +:102C500038FF20780009012802D92868807E60703A +:102C600070BD0007000F203002E00007000F303079 +:102C70002070EEE730B50388C249C34C8B4202D0C6 +:102C80009A1FA2421ED242888A4202D0951FA542B4 +:102C900018D2934216D883887D24E400A34211D829 +:102CA000C088884205D0B84D04460A3C2D1FAC426E +:102CB00008D2884208D08A4206D05B1C5A43C00022 +:102CC000824201DD072030BD002030BDFFB500226B +:102CD000099B002802D0994205DC5CE0002902D162 +:102CE000002004B0F0BD0920FBE7845C002C12D06A +:102CF00085186F780D2F4CD010DC3B000FF0E6FFED +:102D00000A421B2A2A303032323A3A42835C002B84 +:102D10003FD1521CD2B28A42F8DBE1E7122F31D008 +:102D200004DC0E2F35D00F2F2CD132E0142F11D010 +:102D3000152F27D116E0022CD5D1AB78039C072B99 +:102D4000237001D25B0701D40A20CAE7029B012449 +:102D50001B7814E0E343DB0708E0012C08D011E006 +:102D60000620BEE70F2523072D075B19002BF4D0A3 +:102D70003046B6E7029B1B789C070AD40224234303 +:102D8000029C2370835C521C9A18D2B28A4204DDE2 +:102D9000A9E70B20A5E7192676028A42A5DB9FE763 +:102DA00005E00278401C002A01D0002070470A4646 +:102DB000491E89B2002AF4D10120704730B56C4D0C +:102DC0000021286887B0C943A0308182002484751F +:102DD000214606200DF0E3F9002105200DF0DFF972 +:102DE000002102200DF0DBF90120FFF7C1FE286869 +:102DF000BF210C54C0300470012069460870684639 +:102E00000BF08FF807B030BD10B5594A94B0126876 +:102E1000A032927F042A0AD028236A461370508079 +:102E2000132906D03B2904D0072014B010BD082078 +:102E3000FBE71171104609A909F07AF8040002D1E4 +:102E40000420FFF795FE2046EFE7F0B59BB00400A5 +:102E500003D148A14D480FF034FE72202070606805 +:102E6000002701780826491F414D0B000FF02EFF67 +:102E70000F096ECBFB6E70F9F8AA6E6E6E6EF7F6E8 +:102E80006E002868A030807F032804D0972039A1E5 +:102E900080000FF016FE002108460DF080F96078E2 +:102EA00010233043607028680146C0314A781A43C5 +:102EB0004A7061688A783C2A45D08E880146012292 +:102EC000A0318A756268D2890A836268128A4A834D +:102ED0006268528A8A838E8261680622C979C173C8 +:102EE0006168103008310FF04FFC0520FFF740FEFD +:102EF0002868C2210F54017FFB2211400177B021C5 +:102F000009584A7A920892004A72C782304602F003 +:102F1000B5FC002804D01D4816A122300FF0D1FDC9 +:102F2000304601F0C7FE002804D04F2011A1C00098 +:102F30000FF0C7FD304603F00FFB002806D0134802 +:102F40000CA1273023E10120FFF712FE1BB0F0BDDA +:102F5000878801F07DFC052820D001F079FC062847 +:102F60001CD001F075FC072818D001F071FC0FE0AF +:102F7000480000207372635C6761705F636F726505 +:102F80002E630000FFFF00007B0C000053020000D6 +:102F9000042803D0FB49FC480FF093FD60783043D0 +:102FA00060702868C030417831434170FFF706FFF8 +:102FB000384602F068FC384601F082FE384603F0DD +:102FC00001FBC3E701F044FC052810D001F040FCF0 +:102FD00006280CD001F03CFC072808D001F038FC92 +:102FE000042804D0E848E74913300FF06AFD606810 +:102FF000807902F000FD0028A8D06178314361702B +:103000006168C880A2E701F023FC052810D001F018 +:103010001FFC06280CD001F01BFC072808D001F08B +:1030200017FC042804D05520D649C0000FF049FDF4 +:103030006078304360706068C1882868A030018380 +:10304000616809894183616849898183002102207F +:103050000DF0A5F82868A030C77777E70CE167E1A5 +:103060006FE070E0FFE701F0F3FB052810D001F0FE +:10307000EFFB06280CD001F0EBFB072808D001F08D +:10308000E7FB042804D0C048BE4935300FF019FDD5 +:103090002868BE21095C042993D0807D40063CD578 +:1030A000606802210C30FFF77BFE002835D0606895 +:1030B0000821001DFFF774FE00282ED02868014665 +:1030C00080310A6B527A920708D1C222125C002A20 +:1030D00008D1C28AD30505D5D20703D1C38A4022BD +:1030E0009343C382C38A80229343C3822D236A46BB +:1030F0001370A030808A5080CB698A694869096A58 +:1031000001AC0DC4049109A9684608F011FF00281C +:10311000A3D09D489B49573039E062682868A421B4 +:1031200092890A5261680822091DA6300FF02CFB13 +:1031300010A806742868A630159014A80AF0F1FEAD +:1031400004E70121817101F083FB052810D001F013 +:103150007FFB06280CD001F07BFB072808D001F08C +:1031600077FB042804D0884886497B300FF0A9FCFF +:103170002868BE21095C0429E2D061688A79002AA6 +:1031800002D08978002905D07F487E49E1300FF0D0 +:1031900098FCDBE6617831436170B0210958497AC7 +:1031A0008907890F01294DD1817D09064AD4017F04 +:1031B000490701D5042100E00321C03081702B2094 +:1031C0006946087009A9684608F0B2FE002804D0D4 +:1031D0006D486C4997300FF074FC69462868098D7A +:1031E00001830E2210A90A7468491591027A0A70A7 +:1031F000024609324A600F320A61521D8A6010325B +:10320000CA60133A4A618A328A61921CCA61423AA0 +:103210000A6210324A6210328A62403A8A63D21FCE +:10322000CA63521C54300A64486414A80CF004F8B1 +:10323000022815D0002813D053485249BF300FF050 +:1032400040FC0DE0817D4906017F490701D504213D +:1032500000E00321C0308170002106200CF09FFFA8 +:103260002868C18A0A0602D440229143C1828AB2E8 +:1032700080218A43C28269E62868A030807F0328C3 +:1032800004D041483F49ED300FF01BFC00210846B7 +:103290000CF085FF60781023304360702868014689 +:1032A000C0314A781A434A7061688A783C2A00D152 +:1032B00049E68E8801460122A0318A756268D2896A +:1032C0000A836268128A4A836268528A8A838E827B +:1032D00061680622C979C1736168103008310FF046 +:1032E00053FA0520FFF744FC2868C2210F54017FE0 +:1032F000FB2211400177C782304602F0BFFA002856 +:1033000004D0E3201F4980000FF0DBFB304601F0C2 +:10331000D1FC002803D01B491D480FF0D2FB3046DA +:1033200003F01AF90028A6D019481649801C2EE788 +:1033300060783043607009E600290BD0888015481A +:103340000068A030028BCA80028B0A81428B4A81BE +:10335000808B88817047F7B5064600780C460027B9 +:10336000010982B03D4601296FD00A4800680090EB +:10337000C03002296AD0072910D00A2967D0014934 +:103380000548DAE1742F0000860200000C120020CC +:103390008F030000480000201105000071680A78C2 +:1033A000521F13000FF092FC0F09B054B0B02F5B06 +:1033B0005B47B0B0B0B0656FB0008A783C2A1BD0D4 +:1033C00010271625002C7DD08888A0807068A21D4B +:1033D000C08920827068C089E0817068008A60823C +:1033E0007068408AA082716808460831C07901F08F +:1033F00034FA0020607375E019270725002CE2D00D +:103400000021A17171E011270725002CDBD08988EC +:103410000091A1807168F7228979A17141781140EA +:103420004170009802F030FA009801F04DFC0098CD +:1034300003F0D6F8ACE101270925002CC3D0888819 +:10344000A080706880792072A2E160E09DE178E060 +:10345000888812270E252146FFF76EFF98E118276E +:103460000825002CAFD08888A080A01DFFF7DCFBCA +:103470008EE11A270725002CA5D04888A080706807 +:103480000079A07184E18A783C2A32D01027162571 +:10349000002C98D08888A0807068C08920827068CD +:1034A000C089E0817068008A60827068408AA0826A +:1034B0007168607B497D40084000C907C90F084317 +:1034C000607300E036E17168C007497DC00F4908AC +:1034D0004900084360737168A21D08460831C0792D +:1034E00001F0BBF9FB480068C0304178EF22114081 +:1034F00031E119270725002C88D00021A1714278DD +:10350000EF210A40427043E1F349F44815E1307A73 +:10351000012803D0F148F04917300EE112270E259B +:1035200070892146FFF708FF002C87D0707840078C +:10353000400F032888D1E7480068C0304178FB225B +:10354000D5E7E4490968A031002C01D08A8AA2801D +:10355000327A921E13000FF0B9FB073B4651EEDBA7 +:103560006B05EE0013270C25002C85D0F1688978B7 +:103570008907890F0129217A27D04908490021723A +:10358000FD221140F268E32392785207D20F5200D5 +:10359000114321720022E2801940F3681B785B0717 +:1035A000DB0E19432172DF231940F3685B78DB07D8 +:1035B0009B0E194321726272F1680122C978A172CF +:1035C00001781143F722114016E001221143D6E79A +:1035D00015270C25002C8FD0F06806220068A11D4D +:1035E0000EF032F8D4E016270725002C84D0317B6A +:1035F000A1710178082219E00170C9E01427122591 +:10360000002C92D000980099C07BA21D103101F0CF +:1036100024F9B089E081207C01210843F921084088 +:103620002074AC480068C030017802221143E3E7FF +:1036300017273825002C7DD03221A01D0FF001F96D +:103640000020A071207A03210843A24A2072116849 +:10365000FB260B7F30405B07DB0F9B00184320727B +:10366000B0204058407A800751D0A07A8A7D400827 +:10367000D2074000D20F1043FD221040A0728B7D74 +:1036800030409B07DB0F9B00184308231843EF23B0 +:103690001840A0728A7DE07AD206D20F30409200A4 +:1036A0001043E072F72210408A7DD206D20FD2007A +:1036B0001043E072088BA0812046102264310E3046 +:1036C0000FF062F88349A07F0968C0078A7EC00FA7 +:1036D00052001043A0770A7F400852074000D20FE3 +:1036E0001043A077084644304DC820344DC4303CC8 +:1036F0003D20405C224630323E3101F0AEF8754844 +:1037000000688030006B417A8908890041723FE08F +:10371000327B022A14D017273825002C2ED0012AFC +:103720001BD0032A1BD0042A1CD0052A1AD06A49B0 +:103730006A4801E022E024E0B1300FF0C2F927E04E +:1037400019270725002C19D0898AA1800121A17190 +:1037500041784908490041701AE0012000E0022048 +:10376000A07106E0707B0007000F8030A071052A71 +:1037700002D00020E0710BE00120FBE704980580F7 +:103780000CE09F205449C000D7E7317A002908D0C7 +:103790000498002C058001D027806580002005B0AA +:1037A000F0BD19270725002CE8D00021C943A180CE +:1037B0000021A1714178FD2299E600B595B001F094 +:1037C00047F8022803D001F043F8032819D11B2140 +:1037D00008A801730021817369460BA808F0A8FBB3 +:1037E000002804D1684640781B2802D0032015B079 +:1037F00000BD002108460CF0D2FC68468078002805 +:1038000001D00820F3E70120FFF7B2F90020EEE72E +:1038100070B500252F4C002807D0022817D0A9200A +:103820002D49C0000FF04DF970BDFFF7C6FF00280D +:10383000FAD1FEF7DDF9222101700572FEF7F4F9E5 +:103840002068C030417802221143417070BDFEF7FC +:10385000CFF912210170012101722168A0318A8AF9 +:103860004281CD77FEF7E0F92068C030417804222C +:10387000EAE770B50D46040004D155201649000151 +:103880000FF01FF92078012804D0134914480FF0D5 +:1038900018F970BDA18813480E4E814209D1E28803 +:1038A000824206D130681321A030808AFFF7ACFA3B +:1038B00070BD814202D1E088002815D01220287006 +:1038C000687808210843687007CC083507C50021CF +:1038D00011E0000048000020742F00003D040000AB +:1038E0006E050000FFFF0000002278231146022031 +:1038F0000CF0B3FB02213068A030C17770BDF748EF +:103900000068C0308078704738B5F44C05460178BF +:1039100020680B00A0300FF0D9F909863506067132 +:1039200013365A758600807F052803D0EC49ED4890 +:103930000FF0C7F820680422017F114301775DE092 +:10394000A98800291ED0808AE74988421AD0A86831 +:10395000002804D1E348E2490F300FF0B2F8A8681C +:1039600006220A38A86000902068AB88A030808AC0 +:10397000042101F0B7FE002804D0DA48D8491430F9 +:103980000FF09FF838BD2979807F02290BD00428D9 +:10399000F8D0284600F072FF20681321A030808AFA +:1039A000FFF732FA38BD062804D0CE48CC491E3085 +:1039B0000FF087F8284600F061FF20680122C03030 +:1039C0004178114341700520FFF7D2F838BD00F06F +:1039D0003FFF052808D000F03BFF042804D0C14871 +:1039E000BF493C300FF06DF80ECDC0480361C26096 +:1039F0008160A2210170FEF72CF938BD284600F045 +:103A00003DFF38BD00F024FF052808D000F020FF5E +:103A1000062804D0B348B2494D300FF052F80720C1 +:103A2000FFF7A6F8EAE7AF48AD495630A8E7FFB57B +:103A300093B00124684603218470C9021D460180A9 +:103A400009F063FF00226946012003F027F80646CB +:103A500009F05FFF002E5CD1684615218470490291 +:103A6000018000271C2101A808970EF0ECFE012020 +:103A70000146103108A801700020014608A84170D5 +:103A80008178F9200140891C214308A8817068468B +:103A9000017902263143017114998185C7851F215F +:103AA000018608A80A9013980D906846099009F0BD +:103AB0002CFF0EAA09A901A802F0D4FD074609F0BF +:103AC00028FF002F02D0384617B0F0BD834F68465C +:103AD0003968008F4880684684708549018008A84D +:103AE0008078F9210840801C4108490008A88170AD +:103AF00068468685068615A80D9009F006FF0EAA71 +:103B000009A901A802F0AEFD064609F002FF002E49 +:103B100001D03046D8E768463968008F88807449FC +:103B200068468470C91C0180298810A801806988B2 +:103B30004180A9888180E988C18008216846818503 +:103B4000018610A80D9009F0E0FE0EAA09A901A8AF +:103B500002F088FD044609F0DCFE002C01D020466E +:103B6000B2E768463968008FC8800020ACE770B5BE +:103B700004465E48C421A8300EF065FE5B48574DF0 +:103B8000A83000212860C943A030818200268675B4 +:103B90000120FEF7EDFF2868BF210E5401460931D0 +:103BA0000830FDF71CFF296808462D311D30FDF750 +:103BB00072FF002C26D02868B0210C501E21A18154 +:103BC000217A8F2211401031217201461831216172 +:103BD00009396161491CA1610839E161491C21620F +:103BE0009B31616287392160103161601339E16274 +:103BF000091F21637E3121643039616310318430C3 +:103C0000A163E06370BD35480068A030807F042860 +:103C100001D0002070470120704730B504460520D0 +:103C2000800395B0844208D3012080043149201AD2 +:103C3000884202D33048844202D3102015B030BDF0 +:103C400026490868A030807F012801D00820F5E7C8 +:103C5000FFF7D9FF002801D01120EFE70D68012000 +:103C600028722278002A08D024491720012A0AD075 +:103C7000022A1FD0032A25D121E03220694608708C +:103C80000020287205E0A2799209032A1AD1694618 +:103C9000087000A80622611C02300EF075FD28464F +:103CA0000622611C09300EF06FFD09A9684608F074 +:103CB0003FF9C3E7A2799209012A03D1E7E7A27984 +:103CC0009209E4D00846B9E707214907012210B557 +:103CD00041189203914213D3102010BD48000020D8 +:103CE000742F000085050000FFFF0000AC110020CC +:103CF000012A00000000FC1F0040002002320000EA +:103D0000F949024609680B7A0931184600F0A5FD09 +:103D10000020E2E7FFB599B005460020694608712A +:103D2000087208A9087408751E461446052001216A +:103D300080038904ED4AEE4B002D06D085420DD359 +:103D40006F1A97420AD39D4208D2002C09D08442B0 +:103D500004D3601A904201D39C4202D310201DB0BC +:103D6000F0BD2846204318D01F270CAB01AA0097AE +:103D700028461A99FEF7AAFF0028F0D10DAB02AA37 +:103D8000314620460097FEF7A1FF0028E7D168469C +:103D9000007AC10703D00A20E1E70720DFE78007A8 +:103DA00005D568460079800701D50B20D7E7FFF7D6 +:103DB0002AFF002801D01120D1E703AF002D0FD03A +:103DC0001A20694608731A9888732946F81C1A9AAB +:103DD0000EF0DAFC0EA903A808F0AAF80028BED15C +:103DE000002C0ED02021684601738673324621468E +:103DF000F81C0EF0C9FC0EA903A808F099F80028D9 +:103E0000ADD1B94908A80968007C08700020A6E770 +:103E1000F0B5044695B0002014900520800384423C +:103E200075D301208004B14F201AB8426FD3B04837 +:103E300084426CD2207801280CD105216068890366 +:103E4000884264D301218904411AB9425FD3A84949 +:103E500088425CD200F0FCFC022809D000F0F8FC9B +:103E6000032805D0A048BE210068095C012902D0C2 +:103E7000082015B0F0BDC121095CCA06920F03D11C +:103E80008A0701D4490701D51120F2E721780129D9 +:103E900015D0228A974D1346203BAB4272D202299D +:103EA00001D0032901D1A02A6CD3012907D00278BF +:103EB000D20704D0628A002A64D0B42A62D80029CA +:103EC00006D0012908D0022904D003295AD110E0D4 +:103ED000002512E0022510E061680125097800291B +:103EE0000BD0012907D0022905D0032903D082482D +:103EF000BFE7032501E001211491217A002907D0B1 +:103F0000012907D0022907D003293BD106E037E079 +:103F1000002604E0012602E0022600E00326002D30 +:103F200001D0022D3FD1002E3DD0E168002929D0DB +:103F30000A79002A27D0082A24D80B7B9C46082B14 +:103F400020D8002A0CD005230A689B039A4217D375 +:103F500001239B04D31ABB4212D3654B9A420FD262 +:103F60006246002A13D0896805229203914207D342 +:103F7000012292048A1ABA4202D35D4A914206D3C0 +:103F8000102076E75EE00B7B002B5BD0D5E7017855 +:103F9000890702D05848401E6BE7022D03D1022E3C +:103FA00050D0032E4ED0182269460A70228A4A80C9 +:103FB000228A8A808D71007A0127002802D0012888 +:103FC0007ED102E00020C87100E0CF711498087221 +:103FD000217802A80130012922D006210EF031FCFF +:103FE00007216846C173067409A907F0A1FF0028DC +:103FF000C7D10A206946087009A9684607F098FFEA +:104000000028BED13A206946087009A9684607F021 +:104010008FFF0028B5D1002D08D0022D06D04AE030 +:1040200061680622491C0EF0AFFBD9E7002E42D092 +:10403000002623E00168B00009580978002903D060 +:10404000012905D0072014E700216A46917001E09C +:1040500069468F70E16806220968095800A8491C62 +:1040600003300EF091FB0B206946087009A96846E1 +:1040700007F05EFF002884D1761CF6B2E068017973 +:10408000B142D7D8002612E08068B100415800A89C +:10409000102202300EF078FB3B206946087009A917 +:1040A000684607F045FF0028CDD1761CF6B2E068DF +:1040B000017BB142E8D81B2168460170877000E09F +:1040C0002EE009A907F034FF0028BCD108A84079E8 +:1040D0001B2825D1002D15D0012D0FD0022D21D068 +:1040E000032D12D11EE00000480000200000FC1F3C +:1040F00000400020E13F0000023200000320FEF7F4 +:1041000037FD11E00320FEF733FD608A00280BD055 +:1041100000228300114610460BF09FFF002803D0B9 +:104120000320A6E60220EEE70020A2E670B586B0E6 +:104130000C0006460CD00520800384424BD301209E +:104140008004FD49201A884245D3FC48844242D26B +:10415000FB4DBF212868095C022903D0C03040789C +:10416000400702D5112006B070BD002C04D02046B7 +:10417000FEF780FD0028F6D13046FEF746FD012807 +:1041800003D0022823D0EF48EDE721001BD10820FF +:1041900069468882286801ABC08805AA002103F01F +:1041A00048F80028DFD16846808A082801D003201B +:1041B000D9E7684681888181C188C18101890182EE +:1041C0004189418203A9304601F0E5FBCBE7002C91 +:1041D00001D00620C7E71020C5E770B50C4605469C +:1041E000FEF713FD012803D0022801D0D54870BD89 +:1041F00021462846FEF708FE70BD00B50146143082 +:1042000095B0192801D2880707D008461E3004D07F +:104210000A3002D0072015B000BDFFF7F4FC0028DB +:1042200001D01120F7E7C648312200684170684686 +:104230000270817009A907F07BFEECE701B582B03E +:10424000022069460880BE4802AB00686A46808842 +:10425000002102F073FE69460988022900D003207C +:104260000EBD38B502216A46118007214907012297 +:1042700041189203914201D3102038BDB049034642 +:1042800009686A468C880021204602F0D2FF694600 +:1042900009880229F1D0032038BD3EB50446082024 +:1042A0006946088005208003844208D301208004E9 +:1042B000A149201A884202D3A048844201D3102089 +:1042C0003EBD2046FEF7D6FC0028F9D1208869467D +:1042D00088806088C880A0880881E08848819848E4 +:1042E00001AB00686A46C088002102F027FE6946DB +:1042F00009880829E4D003203EBD1FB504460820E4 +:104300006946888105208003844208D30120800407 +:104310008949201A884202D38848844202D3102057 +:1043200004B0DAE486486B46006803AAC08800211E +:1043300002F07FFF0028F3D169468989082901D05E +:104340000320EDE769460988218069464988618034 +:1043500069468988A1806946C988E180E0E7FEB5A1 +:1043600005460520800317460E46814208D30121E9 +:104370008904714A731A934202D3704B9E4201D34F +:104380001020FEBD1F2F01D90C20FEBD6C4C8542B4 +:104390002AD3681A904227D39D4225D2206801A9CA +:1043A000408802F07DFD0028EFD1287869464871E9 +:1043B000206801A9408802F056FD0028E5D1694631 +:1043C0000090087802210843694608704979090776 +:1043D00003D0082108436946087020686946408870 +:1043E00002F0EBFC0028D0D169460F8120683346EB +:1043F000408802AA002102F0A1FD69460989B9425C +:10440000C3D00320FEBD38B50C4607210122490761 +:104410009203002802D04318934202D261189142BD +:1044200001D3102038BD21886A461180002801D0B0 +:1044300000290BD04249034609684D8800212846CF +:1044400002F0F7FE69460988218038BD0C2038BD8E +:1044500010B50C460521890386B08C4208D3012192 +:104460008904354A611A914202D334498C4202D3FD +:10447000102006B031E432490968A031897F05294E +:1044800001D00820F5E7FEF7C0FB012803D0022881 +:1044900026D02C48EDE720881E2801D20720E8E727 +:1044A0000620FEF765FB052168460170007981084A +:1044B000A0788900C007C00F014368460171FB2046 +:1044C0000140A0788007C00F800001436846017159 +:1044D0002188C18009F025FD0028CAD00320C8E743 +:1044E0000620C6E770B586B014460D46FEF78DFB74 +:1044F000012803D0022801D0124834E6104EC02112 +:104500003068095CC90706D0BE21095C042902D0C5 +:10451000002D02D05AE0082025E6052189038C42AF +:1045200008D301218904044A611A914202D3034944 +:104530008C4209D3102016E60000FC1F004000202A +:104540004800002001300000A178C906490F042965 +:104550000CD8E178072909D3102907D822798A4293 +:1045600004D3102A02D822881E2A01D00720FAE597 +:104570008030026BF7239172026B2179D172026B4A +:10458000117A1940A3789B06DB0FDB0019431172E7 +:10459000026B21889181026BA378517ADB0789082D +:1045A0008900DB0F19435172FB231940A378026B7A +:1045B0009B07DB0F9B0019435172006BA278017AB5 +:1045C000D206C908C900520F114301720B20694677 +:1045D0000870852D25D008DC002D1AD0812D1AD029 +:1045E000822D1AD0832D08D119E0862D1BD0882D5D +:1045F0001BD0892D1BD08A2D1BD00B2008710520C4 +:10460000FEF7B6FA684609F08CFC002813D00320A8 +:10461000A9E50020F2E70120F0E70220EEE7032001 +:10462000ECE70520EAE70620E8E70820E6E70920AE +:10463000E4E70A20E2E73068C03001784908490021 +:10464000017000208FE570B5924E0D46316886B03E +:10465000C03109781446090701D4082083E5FEF724 +:10466000D4FA012803D0022801D08B487BE5002D25 +:1046700013D005208003844208D301208004874999 +:10468000201A884202D38648844201D310206AE56A +:10469000012D0BD0022D02D106E0002C01D0072005 +:1046A00061E50020029005E0022000E0012069465B +:1046B00008710294032069460870684609F031FCCD +:1046C000002801D003204EE53068F722C030017881 +:1046D00011400170002046E570B594B014460E46B6 +:1046E000FEF793FA012804D0022802D06A4814B0D9 +:1046F00070BD684D2868C0300078800701D408205C +:10470000F5E7002C01D00720F1E7FFF77CFA00283D +:1047100001D01120EBE7002E1DD02D21684601703D +:104720002C68B420015B684641801022B11C01A8AE +:104730000EF02AF8207FFB210840B17CC907490F01 +:1047400008432077B07CFF214008A076E08A8231C0 +:104750000843E08207E02E21684601702868A030F7 +:10476000818A6846418009A9684607F0E1FB29680B +:10477000FD23C0310A781A400A70B8E710B50C461C +:10478000FEF743FA012803D0022801D0424810BDA9 +:1047900005208003844208D3012080043F49201A69 +:1047A000884202D33E48844201D3102010BD2046E7 +:1047B000FEF73AFA002010BD10B594B00446FEF79B +:1047C00024FA012804D0022802D0334814B010BDC6 +:1047D00030480068A030807F04280ED03820694619 +:1047E00008704C8001200871487109A9684607F0DB +:1047F0009FFB0028EAD00B20E8E70020E6E710B591 +:1048000094B00446FEF701FA012803D0022801D033 +:104810002148DBE71F480068A030807F04280BD0C8 +:104820003820694608704C8000200871487109A939 +:10483000684607F07DFBC9E70020C7E71548006818 +:10484000A030807F052801D30120704700207047E9 +:1048500010480068A030807F704708B513460028D4 +:1048600006D010A00068009048796A468009105C64 +:1048700018700622581C0DF087FF08BD10B50446BD +:10488000FDF7B6F9A22101700ECC08300EC0FDF77D +:10489000CBF910BD48000020013000000000FC1FD3 +:1048A000004000200302FF01FFB581B001980E46D1 +:1048B000C078174610360E37022809D0032840D09A +:1048C00005287DD0F2A1F7480EF0FBF805B0F0BD49 +:1048D000CC890A2060430E30188031230A98002AC0 +:1048E0000380F3D04868008890800020D080108139 +:1048F000097B9481891FCDB21AE0308871683880B5 +:1049000048780A7800021043F880C8788A78000254 +:1049100010433881BA1C091D28460AF014FF002DE7 +:1049200001D0002802D000203871788008360A377C +:104930002046641EA4B20028DFD101990020C8706F +:10494000C4E7CC890A2060430E30188032230A98CD +:10495000002A0380BAD04868002500889080D5805E +:104960001581087B401FC0B20090948142E07168BD +:1049700032880878FA803A79C30752085200DB0F70 +:104980001A43FD231A408307DB0F5B001A43FB2306 +:104990001A404307DB0F9B001A43F7231A40030713 +:1049A000DB0FDB001A43EF231A40C306DB0F1B01AA +:1049B0001A43DF231A408306DB0F5B011A4300E032 +:1049C00020E0BF231A404306DB0F9B011A433A71D4 +:1049D000C00978718A784B781002184338813A46BA +:1049E000C91C00980AF0AFFE002801D0BD703D80C0 +:1049F00008360A372046641EA4B20028B7D10198B1 +:104A0000C57063E7087BCC89801E85B228460830D4 +:104A100060431030188034230A98002A03808FD016 +:104A200048681746008890800020D08010819481CB +:104A30001037E000D581C0190CE03088388000982C +:104A400078602A46716800980DF09EFE009808363E +:104A50000837401900902046641EA4B20028ECD10B +:104A60006BE7FFB50546C07881B00C460A9E03008F +:104A70000EF02CF90BA3071733414F6D8F9D9D9DB1 +:104A8000A300207B1746082806D0032804D08548B9 +:104A90007FA153300EF015F804990E2008803020C5 +:104AA0000CE0207B1746042804D07E4878A17030A3 +:104AB0000EF007F804990E20088031203080002F76 +:104AC00044D060680088B880607AFF300130F88098 +:104AD000E08938810020B88137E0207B1746042820 +:104AE00004D070486AA18C300DF0EBFF04990E20C1 +:104AF00008803220E2E7207B1746022804D069486C +:104B000063A1A8300DF0DDFF04990E20088033204A +:104B1000D4E7207B1746042804D062485CA1C33048 +:104B20000DF0CFFF04981021018034203080002F39 +:104B30000CD060680088B880607AFF300130F8805F +:104B4000E08938810020B881F881E870BEE6207BDA +:104B50001746052806D0062804D052484CA1E0305C +:104B60000DF0AFFF04981221018035203080002F16 +:104B7000ECD060680088B880607AFF300130F8803F +:104B8000E0893881E089B88100203882A988F981DC +:104B9000DBE7207B1746072804D042483CA1F730CA +:104BA0000DF08FFF04990E200880362086E70096CE +:104BB0002846049B00F02BFD88E635A13A480DF00D +:104BC00080FF83E670B5054600780C460826030092 +:104BD0000EF07CF8124C3434241C380A0A0A0A0AF3 +:104BE0000A0A0A0A0A0A0A4C6878002804D02E48E1 +:104BF00027A12C300DF065FF002C03D12A4824A1F9 +:104C00002D3008E060783043607020E0002CF9D14E +:104C100025481FA135300DF054FFF3E7002904D0DB +:104C200021481BA13D300DF04CFFFCF7E1FF04468D +:104C3000407830436070FCF7F7FF08E01A4814A191 +:104C4000473002E0184812A14C300DF03AFF002C1A +:104C50000AD06078000707D593202070204658229C +:104C600029460830FBF7B0FA002070BD0E4808A1B5 +:104C70005030EAE710B500200C4C0D490346C20045 +:104C80008C525218401C0006D370000EF7D010BD95 +:104C90007372635C67617474635F636F72652E63C4 +:104CA000000000005A020000B2030000FFFF0000F5 +:104CB0004C000020FD4908800120887000207047CA +:104CC000FA4900208870704710B50021F748C943A1 +:104CD00001800021C17007F065F9D8E7F7B584B00D +:104CE0000546002768460781878068680C4600886B +:104CF00000F0EAFB0646287A032805D0002E03D1EF +:104D0000EB49EC480DF0DDFE287A2146C01E123139 +:104D1000009103000DF0DAFF0FF1F0EF3D09AA4614 +:104D20005C6D34B3CCF28B8BEF00F078012803D0AC +:104D3000DF49AD200DF0C5FEA8896946C0000E30E0 +:104D4000888030200881002C22D068680188A180EA +:104D5000E7802781A989A18100200DE0C100B279F7 +:104D600009190A74B288CA8182005219D3894B8208 +:104D7000128A401C8A8280B2A1898142EED8D6E094 +:104D800002A8009001AB22462946304600F0CAFB3B +:104D9000F0E002A8009001AB22462946304600F020 +:104DA00003FCE7E0F07806281AD0FF20C049223043 +:104DB00014E068680188A180E7802781A989A18122 +:104DC000B188E181E9892182EA89296900982BE08B +:104DD000F078062804D0FF20B5493C300DF071FE74 +:104DE000E88969461230888035200881002CE0D19E +:104DF000C0E0F078072804D0FF20AD4956300DF010 +:104E000060FEA88969460E30888036200881002C13 +:104E1000BED068680188A180E7802781A989A18127 +:104E20002046AA890E3029690DF0AEFC7FE0E889A2 +:104E30006946123080B2382288800A81002C78D0EE +:104E400068680188A180E7802781A989A181287AE3 +:104E5000102809D00221A173E9892182EA892969F0 +:104E600000980DF091FC85E00121F4E702A8009084 +:104E700001AB224629463046FFF716FD7AE0F0786E +:104E8000082803D08A498C480DF01BFE142069467F +:104E9000888037200881002C6CD068680188A18048 +:104EA000E7802781A989A18167820120A0733EE064 +:104EB000F078092804D080487D4917300DF001FEB4 +:104EC000288A69461430888037200881002C51D008 +:104ED00068680188A180E78004212781A173A989DE +:104EE000A181E9892182298A618220462A8A143097 +:104EF000696999E702E038E01CE024E0F0780A28CC +:104F000004D06D486A4932300DF0DBFD142069464B +:104F1000888037200881002C2CD068680188A18007 +:104F2000E78027810521A173A78127826782F77017 +:104F300020E017E002A8009001AB22462946304647 +:104F4000FFF78FFD16E00D206946392288800A811F +:104F5000002C07D00120E08054480188A1802781DF +:104F6000277307E00699088010E0524850493C300A +:104F70000DF0A7FD6846069980880880002C05D0B2 +:104F8000684600892080684680886080002007B0DD +:104F9000F0BDF7B594B015460F46149800F09FFA8F +:104FA00004000AD0032000F087FB022802D2E07838 +:104FB000002804D0112017B0F0BD4048FBE71720AF +:104FC000694601260883002D0FD003216846017130 +:104FD0001021018210A80246059004A928460AF073 +:104FE000D8FB00280DD00720E5E7082168460171AD +:104FF00000210781C943418105218673C90281814E +:105000000CE0A878A0712888A080684605218673E6 +:10501000C902818100210781C943418109AA023265 +:1050200006A901A806F0F7FF002802D000F06AFAEE +:10503000C1E707A800906846038B04220321149857 +:1050400000F050FB0028B6D1E670B4E770B592B01E +:105050000D0006460ED000F042FA04000CD00320EA +:1050600000F02AFB022802D2E078002806D01120A6 +:1050700012B070BD1020FBE71048F9E71721684611 +:10508000818004210172298881816988C18101217F +:1050900081740B4901820AAA023201A902A806F012 +:1050A000BAFF00280ED000F02DFAE1E74C000020F6 +:1050B000904C00003B04000063020000013000003F +:1050C0000228000008A80090684683880422032173 +:1050D000304600F007FB0028CAD10221E170C7E783 +:1050E00070B592B00D0006460DD000F0F8F904003E +:1050F0000BD0032000F0E0FA022802D2E07800286A +:1051000005D01120B4E71020B2E7FA48B0E7172124 +:105110006846818004210172298881816988C18162 +:1051200001218174F44901820AAA023201A902A86C +:1051300006F071FF002802D000F0E4F998E708A813 +:1051400000906846838804220321304600F0CAFAA2 +:1051500000288DD10321E1708AE770B592B00D006F +:1051600006460DD000F0BBF904000BD0032000F080 +:10517000A3FA022802D2E078002805D0112077E7B0 +:10518000102075E7DB4873E7022168460172298821 +:1051900081816988C181172181800AAA023201A90F +:1051A00002A806F038FF002802D000F0ABF95FE754 +:1051B00008A800906846838804220321304600F046 +:1051C00091FA0028DBD10421E17051E7F0B591B0EC +:1051D00015000E4607460ED000F081F904000CD0F1 +:1051E000032000F069FA022802D2E078002806D0F5 +:1051F000112011B0F0BD1020FBE7BE48F9E71721E0 +:105200006846818004210172298881816988C18171 +:10521000B1788174318801820AAA023201A902A8F8 +:1052200006F0F9FE002802D000F06CF9E1E708A8CA +:1052300000906846838804220321384600F052FA21 +:105240000028D6D10521E170D3E7F7B592B0154615 +:105250000E46129800F043F904000AD0032000F033 +:105260002BFA022802D2E078002804D0112015B0D1 +:10527000F0BDA048FBE70627002D12D06846077254 +:105280008681C581A5801720694688800AAA0232D6 +:1052900001A902A806F0BFFE002807D000F032F9ED +:1052A000E5E70521684601728681EBE708A80090D2 +:1052B0006846838804220321129800F013FA00281C +:1052C000D5D1E770D3E7F7B592B016460D000ED0F2 +:1052D000129800F004F904000BD0032000F0ECF960 +:1052E000022802D2E078002805D01120BFE7102064 +:1052F000BDE78048BBE7072768460772868117210C +:10530000049581800AAA023201A902A806F083FE50 +:10531000002802D000F0F6F8A9E708A80090684637 +:10532000838804220321129800F0DCF900289ED122 +:10533000E7709CE7F3B5172091B00C46002915D013 +:1053400021780B000DF0C2FC062B05051A041C2B5E +:105350001520C01EE28880B2002A02D0A368002B6C +:1053600004D0824204D90C2013B0F0BD1020FBE71A +:10537000042905D0A088002811D101E00620F3E718 +:10538000119800F0ACF805000BD02078092701280F +:105390001AD0022807D0042824D0052835D00720A9 +:1053A000E2E75448E0E76846077161880181E188D7 +:1053B0004181A06808260390304600F07DF9072857 +:1053C00029D34C48801CCFE70C21684601716188C5 +:1053D0000181E1884181A06803900EE0E87800280F +:1053E00011D118E00D216846017161880181A18801 +:1053F0004181E1888181A06804900326304600F055 +:105400005BF90228EAD31120AEE70E21684601714C +:10541000217B0172F1E717216846018309AA023254 +:1054200006A901A806F0F7FD002802D000F06AF8EE +:105430009AE707A800906846038B0422314611982A +:1054400000F050F900288FD12178012907D00229D6 +:105450008AD0042905D0052905D0032084E7082136 +:1054600002E0EF7080E70A21E9707DE730B591B086 +:105470000C46054600F033F8002808D0032000F061 +:105480001BF9022805D31B48801C11B030BD1948F8 +:10549000FBE70F216846017104811721018309AAE6 +:1054A000023206A901A806F0B6FD002802D000F0DD +:1054B00029F8EAE707A800906846038B0422032135 +:1054C000284600F00FF9E0E70C49884205D00C4966 +:1054D0000988814201D10A4870470020704710B501 +:1054E000FFF7F2FF002802D08178C90700D1002021 +:1054F00010BD00000130000003280000FFFF000085 +:105500004C000020002806D0012805D0052805D031 +:10551000062805D0032070471120704708207047E7 +:105520005C487047FFB583B003980C9EC0781D4659 +:1055300014460F46012803D05749D2200DF0C1FA76 +:10554000F889C0000E30288030203080387B001F62 +:10555000C0B20190002C26D078680088A08000207E +:10556000E0802081F889A081002616E0F00005196E +:10557000C01900902A4641690E3201980AF0E3F8FA +:10558000002802D000202874E8810098761C008A48 +:1055900068820098B6B2408AA882A089B042E5D855 +:1055A00003990020C870F2E4F8B50646C0781F469B +:1055B00014460D46042804D0FF20374903300DF06F +:1055C00080FAA889062148430E3038803321069896 +:1055D000002C01801AD068680088A0800020E0803C +:1055E0002081A989A18103460CE019460622514376 +:1055F0004A190919D789CF81977C8F74128A5B1C4D +:105600000A829BB2A1899942EFD8F070F8BD70B5BB +:1056100014460546142204981A8037220280002C72 +:1056200018D0486800260088A080487AFF300130F2 +:10563000E080C8892081C889A0816682E87808282E +:1056400009D0092811D00A2819D0134913480DF0A0 +:1056500038FAEE7070BD087B0C2804D00F480E4954 +:105660000C380DF02EFA012012E0087B0D2804D032 +:105670000A48094908380DF024FA042008E0087B9C +:105680000E2804D005480449001F0DF01AFA052021 +:10569000A073DEE702300000904C000081030000A0 +:1056A00001460020FA4A02E0401C082803D24300C9 +:1056B000D35A8B42F8D1704730B50446F44A0020E3 +:1056C000163A117953790AE05518AD79A54201D1FE +:1056D000401CC0B2491CC9B2102900D100218B4224 +:1056E000F2D130BDFFB5EA4881B0163841790A9C45 +:1056F000491CCDB21E46102D00D10025E4481638B5 +:105700000079A84202D1042005B0F0BD0820FFF7BF +:10571000D3FF0746072804D9FF20DEA1A5300DF0EE +:10572000D0F90298082801D1072F17D001982080BE +:10573000301D6080002060712071E6800398208118 +:10574000204606F019FC00280AD0D14802991638E4 +:105750004379821D995445710020D5E7D248D3E79B +:10576000FF20CCA1B7300DF0ACF90320CCE7F0B5A9 +:105770008DB0044600256846057116468C46062005 +:10578000FFF79AFF00281CD121780127C8070028BD +:1057900001D0132917D9684687766178C17602212E +:1057A0008183C58304A8009070680C2300880522BB +:1057B0000621FFF797FF002803D0B6A185200DF042 +:1057C00080F90DB0F0BDB24816380278002AF8D042 +:1057D000427863789A42F4D1012918D0132919D15B +:1057E0006146062916D10570002101200AF0D7FC78 +:1057F00068460771706801886846C1800021C94306 +:105800000181607922790102114368461AE06146FC +:10581000062908D0684600790028D2D0314601A870 +:10582000FEF727F8CDE70570002101200AF0B7FC4C +:105830006846077160792279010211436846018147 +:105840000021C9434181E9E7914810B5002116388C +:1058500001704A1E428041700171417101200AF0BD +:105860009EFC10BD10B5FFF7EFFF002088490246EF +:105870004300401CCA520828FAD310BD8449163987 +:10588000488000207047DFE770470EB50121684669 +:10589000017086498180C1800021FDF7EAFF0EBDBD +:1058A000F7B505460078002700090C463E4601285A +:1058B00004D0FF2077A168300DF003F9287A022880 +:1058C0000CD0FF2073A17E300DF0FBF80298002C65 +:1058D000068001D0278066800020FEBDEA897027FF +:1058E00010460A3086B2002C0BD068680088A08071 +:1058F000A8892081E28020460A3029690CF044FF03 +:10590000E4E702980680E7E7F0B543680246D979F4 +:105910009C79090221435C7A1E7A25025C88981DD5 +:105920003543241F87B0A1421DD11B79022B1AD108 +:10593000042D1AD0052D2AD0062D1AD0402D12D3B1 +:10594000061D0F4614462846FFF7AAFE08280AD06F +:105950001120207002202072A581E78126616078E5 +:1059600008210843607007B0F0BD001D00F0E1F8A9 +:10597000F9E7041D0D46FEF761FF0028F3D006216C +:10598000684601700194057208F0CBFAEBE7001D40 +:10599000FFF7EDFEE7E710B53D4C8AB0163C2278E4 +:1059A000012A26D012236A46937363789B1CD37313 +:1059B000082313820B8853824B8893828B88D3826F +:1059C000C988118301A900910C2305220721FFF743 +:1059D00089FE00280BD10022F023114601200AF095 +:1059E0003CFB012020706078801C607000200AB0B1 +:1059F00010BD1120FBE7F0B5254C0027163C87B001 +:105A00000646A51D1FE060792179884204D1112046 +:105A100020A140010DF055F82079405D042804D004 +:105A2000082808D17F1CFFB205E0072069460870EE +:105A3000684608F076FA2079401CC0B22071102820 +:105A400001D1002020713046761EF6B20028DAD14E +:105A5000384688E710B50446402801D2072010BD1B +:105A6000FFF71EFE082802D03120000210BD0021E1 +:105A7000074802E0491C082903D24A00825A002A3A +:105A8000F8D1082914D049004452002010BD00006C +:105A90002E1300207372635C6C326361705F636FFE +:105AA00072652E630000000003300000FFFF00005D +:105AB0000420EBE700B5402801D2072000BDFFF726 +:105AC000EFFD082805D000213B4A4000115208464E +:105AD00000BD052000BDF0B58BB016460C00074692 +:105AE00007D0002E05D06188402904D207200BB0D2 +:105AF000F0BD1020FBE72088002801D0172801D92D +:105B00000C20F4E70846FFF7CBFD08280FD02588C6 +:105B100003A82A46314602300CF036FE01A8009058 +:105B200062882B4608213846FFF7DCFDDFE70520B9 +:105B3000DDE7F0B50E46074601468BB01446012559 +:105B4000304606F0E5FB08281DD10020694608858F +:105B50000120FFF7B1FD002802D117206946088512 +:105B600003AB02330AAA39463046009406F0E3FF3D +:105B700000280AD0022819D0032804D0FF200F499A +:105B800002300CF09EFF2846B1E76846038D002BDB +:105B9000F9D001A800906068042200880121FFF775 +:105BA000A1FD0028EFD00549EC20EAE76078002548 +:105BB000102108436070E6E72E130020945A00007D +:105BC000002803D08178012939D101E010207047E5 +:105BD0000188FA4A881A914233D01BDCF84A881AA5 +:105BE00091422ED00BDC00292BD00320C002081AD2 +:105BF00027D0012825D001210903401A07E00128F8 +:105C00001FD002281DD0FF281BD0FF3801380028E4 +:105C100015D116E0FF220132811A904211D008DC22 +:105C200001280ED002280CD0FE280AD0FF2806D169 +:105C300007E0012905D0022903D0032901D0002063 +:105C400070470F20704700B50A2821D008DC0300F8 +:105C50000DF03CF80A1C2024241A24282224261A99 +:105C6000102819D008DC0B2816D00C2814D00D28C9 +:105C70001AD00F2808D111E011280FD0822807D0A0 +:105C800084280DD085280DD0032000BD002000BD44 +:105C9000052000BDCB4800BD072000BD0F2000BD82 +:105CA000042000BD062000BD0C2000BD70B50029F9 +:105CB0000BD0CB1FFA3B81241E46CDB2112B1BD239 +:105CC000012805D0022806D009E0002010701DE050 +:105CD000FF20043001E0FF200330814218D0330060 +:105CE0000CF0F4FF111613131613161613161616CE +:105CF00013131313161316000846FF3881381F2894 +:105D000003D9FF39FE39022902D81570002070BD71 +:105D10001470072070BD00B503000CF0D7FF060417 +:105D200006040C080A0C002000BD112000BD07204D +:105D300000BD082000BD032000BD00780207120F3F +:105D400004D0012A05D0022A0AD10EE0000907D1A9 +:105D500008E00009012805D0022803D0032801D05B +:105D60000720704708700020704706207047002801 +:105D700007D0012807D0022807D0032807D0072022 +:105D80007047002004E0112002E0212000E03120D3 +:105D900008700020704738B50C4605004FD06946A2 +:105DA000FFF7CBFF002822D12088032189028843F6 +:105DB000694609788907090D084320806946681CEF +:105DC000FFF7BBFF002812D1218803200003814385 +:105DD000684600788007800C01432180A87840073E +:105DE000820F2020012A03D0022A03D0072038BDC9 +:105DF000814300E00143218088B20105890F08D06A +:105E0000012189038843A9780907C90F8903084339 +:105E1000208080B28104890F0AD0A9784004C90685 +:105E2000C90F400CC903084320808004800F02D1B1 +:105E30002088400403D5208840210843208000208A +:105E400038BD70B504460020088015466068FFF72D +:105E5000A2FF002815D12189A089814210D861684C +:105E6000594E8978C90707D0711E884208D8314633 +:105E70000CF004FD298009E0FF21FF31884201D99F +:105E80000C2070BDFF30FF300330288060688078C0 +:105E9000C007A08903D031460CF0F0FC03E0FF30CE +:105EA000FF30033081B22980206881784748017330 +:105EB00020684649008820394885002070BD10B50B +:105EC000137804785B08E4075B00E40F2343137046 +:105ED000FD2423400478A407E40F640023431370D7 +:105EE000FB24234004786407E40FA40023431370C9 +:105EF000F724234004782407E40FE40023431370BD +:105F0000EF2423400478E406E40F240123431370B4 +:105F1000DF2423400478A406E40F640123431370B4 +:105F20000078BF244006C00F234080010343137054 +:105F3000002906D00878C10701D1800701D50120CA +:105F400000E00020C0015906490E0843107010BD42 +:105F500030B50A8803239B0204889A4323059D0FCA +:105F600002D1A3049C0F01D09B0F00E001239B02F0 +:105F70001A4303230A801B039A4303889804840F5F +:105F800002D11805830F01D0800F00E0012000032B +:105F900002430A8030BDF3B591B00D0018D01198BE +:105FA000002818D0122128460CF04BFC01A9012032 +:105FB00007F0A8FD00242646374677E002290000B6 +:105FC00001280000023000000102000060130020E0 +:105FD000102013B0F0BD0720FBE76846007C0128C5 +:105FE0000BD16846C1890520C002081A0AD00128D1 +:105FF0000AD002280CD003280CD0042C0ED0052C7B +:106000000FD10DE0012400E002246846868908E0F3 +:10601000032406E068460424878902E0052400E0A2 +:10602000062468468189119881423FD12C74002E44 +:106030003AD00BA800900CAB10220021304607F09C +:10604000F3FD002820D16846808D2A46C0B20CA9F5 +:1060500009F079FB002817D1AE81002F24D00BA8BE +:10606000009006AB13220021384607F0DDFD002822 +:106070000AD16846808D06A9C01E0331C0B22A1D10 +:1060800009F061FB002801D00320A2E76846817E69 +:10609000427E08021043E881062C05D16846007C48 +:1060A000A8726846C0892881002092E701A807F0FD +:1060B00031FD002891D0FFF7C6FD8AE7002804D003 +:1060C000012903D0022904D003207047F949C98D62 +:1060D00002E0F8494031C988814201D1002070476F +:1060E0000720704730B5F34C0025608B91B0C00B92 +:1060F0002ED1216900292BD0207B800728D40122B2 +:1061000068460271027200224272228B8281A28A48 +:10611000828204911721018309AA0023023206A971 +:1061200001A807F0BBF8002803D0FFF7F4FD11B079 +:1061300030BD207B02210843207307A800906946E8 +:106140000B8B208804220121FFF7CCFA05460BE0D7 +:10615000FBF74EFD842101700921017218341ECC19 +:106160000C301EC0FBF760FD2846E0E710B5D14CAF +:10617000034621690020002909D02146012210315F +:106180001846FBF707FF00202061A0820120217B39 +:10619000F9221140217310BD70B50C4605461C2133 +:1061A00020460CF04EFB00202080002D08D0012D51 +:1061B00004D0C1A1C5480CF084FC70BD062000E0ED +:1061C0000520A07070BD10B507F090FA10BDFEB5A7 +:1061D0000546007800260C46374603000CF076FD95 +:1061E0000C91070C1D962F462F46486C89916868C4 +:1061F0000A38FBF72FFE89E0002904D0B348AEA18E +:106200001B300CF05EFCFBF7F3FC044640780821E1 +:1062100008436070FBF708FD78E0002C04D1BB2038 +:10622000A5A180000CF04DFC284601F05BFA002887 +:106230006CD06078082108436070022666E0E88828 +:10624000694608800190002C04D1A0489AA12F3003 +:106250000CF037FC287807281CD10198C00B19D006 +:10626000944800218171A988818012E003264DE0C5 +:10627000002C04D1C52090A180000CF022FC8D4898 +:10628000017B89070BD50069002802D0E888C00B84 +:106290003CD00226607808210843607036E0291D52 +:1062A0008EC918308EC02838018802260122204667 +:1062B000FBF752FE0127EDE7002C04D183487EA1B5 +:1062C00064300CF0FEFB7B480821007B4007C00FC8 +:1062D0004600607808436070002E17D128790128A5 +:1062E00002D16879002811D02046FFF73FFF07460A +:1062F0000CE0002CCED10D206FA180010CF0E1FB51 +:10630000C8E772486CA17A300CF0DBFB002C0CD093 +:106310006078000709D5002F07D18420207020461F +:10632000582229460830F9F74FFF3046FEBDF7B531 +:10633000027A88B00C46054620460C30049006923E +:1063400016300027921E02903E460A31594813002B +:106350000CF0BCFC0ADF06E62AE62AE66A98C6E6E6 +:106360004288002A02D052270726DDE051271E2648 +:10637000002C7DD06A684F481288A2800122A27149 +:106380008079C0004019C089FFF705FE002877D149 +:1063900048488179C9004919C98921818079C0009B +:1063A0004019408AA083BFE0688A009006980728B9 +:1063B00017D1E889C00B14D000985127223086B23B +:1063C000002C55D0A8890499FFF7E5FD002857D186 +:1063D00068680088A0800220A071A889208101201F +:1063E00041E000985027203086B2002C40D0A88988 +:1063F000FFF7D1FD002843D168680088A080A889F4 +:10640000E080287A07280AD002202072288AA083F8 +:106410000098E083204669692030009A01E001205D +:10642000F3E70CF0B1F97FE0698A00910169002976 +:1064300002D0E989C90B22D00099512722318EB2AE +:1064400000218171A9898180002C5FD00088A08003 +:10645000A8890499FFF79FFD002811D10220A0719F +:10646000A88920810420A072288AE083009801E096 +:106470004CE005E020846969009A0298D1E7032086 +:106480000BB0F0BD007B400702D55127222601E06A +:1064900050272026002C39D06868502F0088A08013 +:1064A00016D00220A0712146287B0831FFF774FE28 +:1064B0003AE00000401300207372635C67617474FB +:1064C000735F636F72652E6300000000CB020000F3 +:1064D000287BA11DFFF760FE0020FFF747FE23E0A9 +:1064E000A9890089884207D154270626002C0DD09F +:1064F00068680088A08017E053270826002C05D084 +:1065000068680088A080A889E0800DE00A9806806D +:1065100010E055270726002CF8D00020A07103E0DA +:10652000FD49FE480CF0CDFA0A98002C068001D0F7 +:10653000278066800020A3E7F948002101722038F7 +:10654000418081718180027BF923520852001A40F8 +:10655000027301618182704770B5F14C86B0203CB6 +:10656000208000206080A071A0806946012007F093 +:10657000C9FA102608E00199088802461207D20FCE +:10658000B043120110430880684607F0C3FA0500C3 +:10659000F1D02069002804D0E048DF4931300CF008 +:1065A00090FA207B800704D5DC48DB4932300CF0C0 +:1065B00088FA822D04D02846FFF745FB06B070BD4F +:1065C0000020FBE7D64810B52038017B012211439B +:1065D0000173002141808171818006F05BFA10BD5A +:1065E00010B5CF4C0020C043203C20800020FFF796 +:1065F000BDFD207B40084000207310BD70B5C84D24 +:106600000446203D287B800704D5C448C249493050 +:106610000CF057FA287BC00706D12888C149884268 +:1066200002D02869002801D0082070BD002C08D0B5 +:10663000A088162801D2092070BD20682861A08892 +:10664000A882FFF74FFD70BD10B50C4607F04BFA5E +:10665000002803D0B049B4480CF033FA2046FFF7C5 +:10666000F2FA10BDF0B5AE4D0446203591B00020D1 +:10667000089068820E462882E8812946E8804039E1 +:106680000886694608830885088688838882A44826 +:106690000E90007A1746012808D0022806D0032859 +:1066A00004D0042802D0082011B0F0BD05239B03BC +:1066B0009C421CD3012080049C49221A8A4216D392 +:1066C0009B4A944213D29E4211D3331A8B420ED36B +:1066D00096420CD26268002A16D005239B039A4288 +:1066E00005D3101A884202D39148824201D3102068 +:1066F000DAE760892189884203D801225202914257 +:1067000001D90C20D0E7089010AA0CA93046FFF759 +:1067100098FB0028C8D106A92069FFF73CFB002898 +:10672000C2D1206900280CD0607880070028684614 +:10673000008B03DA8004800F56D002E08004800FC3 +:1067400052D105A96069FFF726FB0028ACD160692A +:10675000002808D06846808A0105890F012943D1A5 +:106760008004800F40D007A9A069FFF714FB002820 +:106770009AD16846008B800636D46846808A8006A7 +:1067800032D46846808B81062ED4A169002906D0B8 +:106790000105890F012927D18004800F24D0E068EA +:1067A000002804D0007800281ED01C281CD25C4A87 +:1067B000611C123220460992FFF781FB0321002061 +:1067C0008902884301218902411868460D9101859B +:1067D0000121817457490182514A0FA9153230684D +:1067E00008F0D7FF002801D007205DE708A8007F48 +:1067F0004B49C01CC2B26A7100201031FF320090B8 +:106800000190FF3203460291039003320AA904A8C3 +:1068100007F004F9002827D141482038008E0B905A +:106820003F4833893830326901461239029100936A +:106830000192039010A90A8873890CA9306807F0A7 +:10684000EDF801007AD13648E98811308170090AE3 +:10685000C1700026009631386A79008E3146099B56 +:1068600007F05BF8002802D0FFF7EDF91CE70E985F +:10687000807CC00928D068460D990185012181746A +:10688000292109020182AE81287B61784008C9076D +:106890004000C90F08432873FD2108406178204A51 +:1068A0008907C90F4900084328732A32901C022126 +:1068B000029200910190002303961F4A0AA904A89E +:1068C00007F0ACF80100BDD1606800283FD0206916 +:1068D00000280DD106A90CA8FFF73AFB60788007C5 +:1068E00006D46946088B0321090388436946088357 +:1068F0000120694688740F48FE3008820E492089BD +:10690000891E0BF0BBFF62680548089B2E3003967A +:1069100000930192029012E0B8640000220400008B +:1069200060130020FFFF0000260600000000FC1F8F +:1069300000400020032800000302000086E00A4611 +:10694000002306A904A807F069F801007ED1207889 +:10695000C10601D480062BD56846068460690028EC +:106960000DD105A90CA8FFF7F3FA6846818A032028 +:1069700080028143012080020918684681826946AD +:10698000888A482108436946888201208874F8482B +:106990000882F84908AA022001920291009000237F +:1069A0000396F54A05A904A807F038F8010062D15A +:1069B0002078C0072DD068460684A06900280DD134 +:1069C00007A90CA8FFF7C4FA6846808B0321890247 +:1069D0008843012189024118684681836846818B7A +:1069E000402001436846818301218174E04908AA5F +:1069F000491C0182DF480221801C01920091029013 +:106A000000230396DC4A07A904A807F007F8010051 +:106A100031D1E068002832D068460D990185012106 +:106A20008174D349891C0182E16808A80A78027040 +:106A300049784170E068418868464184E06801799E +:106A400008A80171E068C18808A800E013E041715E +:106A5000090A8171C7480722001D08A90092019107 +:106A60000290412200230396D2000AA904A806F04E +:106A7000D5FF010003D00B98FFF7E6FD14E60321D4 +:106A80000E98002F017207D0E8883880E889788056 +:106A9000288AB880688AF880002005E6F0B50124CD +:106AA0008BB016460F46012802D002281BD104E005 +:106AB000684605218474C90202E06846AF498474BF +:106AC0000182002F11D00321002089028843012177 +:106AD000890241186846018506AA05A9384608F0CA +:106AE00058FE002803D00720CAE41020C8E4A14DB6 +:106AF000B878303D287338882F46203F78856A461D +:106B0000127D0020294606AB00920E310193FF3220 +:106B1000029103900346FF3203320AA904A806F04B +:106B20007DFF002802D0FFF78EF8A9E4002E01D0E7 +:106B3000F88D30802C720020A2E470B592B0064629 +:106B4000012508A885708E496846018406F0DDFE9F +:106B5000002208A90120FFF7A1FF044606F0D9FE94 +:106B6000002C02D0204612B070BD0024002E3ED072 +:106B70001C2168460BF067FE68460178202001431F +:106B80006846017008A885707E49684601841194A2 +:106B90000794817FF9200140891C68468177002095 +:106BA0000146684601770020014668464177042186 +:106BB0008185C485018607A80A9011A80D9008A8B0 +:106BC000099006F0A2FE0EAA09A96846FFF74AFD41 +:106BD000054606F09EFE002D01D02846C3E7654815 +:106BE0006946098F503801816946898F4181614822 +:106BF000303804720020B6E7F7B55E4E9CB0002135 +:106C0000303E0091317A012904D0022902D00820B7 +:106C10001FB0F0BD57495039CA8D824201D00620BD +:106C2000F6E71D98824201D10720F1E75348012180 +:106C300010AA9176401C1083002003239B02024679 +:106C40009A438B02D31810AA93846A4691844E49C2 +:106C5000D18410AA9077908317AA0A926A469185E8 +:106C60000C9009A806F075FF00242546274604A9C4 +:106C700009A806F071FF002810D0822877D1002CD7 +:106C80006AD0002D68D010A80481458100240475C5 +:106C900018A8807812AD012860D077E06846807D22 +:106CA000002F1FD0012853D16846818A3348401CE9 +:106CB000814219D114A800906846408A0EAB102278 +:106CC000002106F0B1FF002874D110A8008A042822 +:106CD00001D0062849D16846018F1D98814237D1DD +:106CE0000F2095E7012833D16846808A0521C90223 +:106CF000884202D0491C88422AD11E485038C18D92 +:106D00006846408A814201D1012700E00027002C1B +:106D100001D0002D0DD01D99884219D114A90091E0 +:106D200004460EAB1022002106F07EFF002841D160 +:106D300001E0009D0CE010A8008A022801D0102874 +:106D400013D1C0B218AA0EA908F0FDFC00280CD17E +:106D50006846408A00908AE7052059E72A1D15A950 +:106D600018A808F016FD002810D0032050E721E0F5 +:106D700002290000901300200302000001280000F7 +:106D800001180000052A0000FFFF000010A8007D88 +:106D90000023001DC2B210A802751E98029019A906 +:106DA00001950394009216A806F038FE002801D140 +:106DB00002213172FEF747FF2AE73EB50B46401E1F +:106DC00084B201AA00211846FFF779F806F09DFD6C +:106DD00002A8009001AB01220021204606F09DFD93 +:106DE000044606F096FD68460089012803D0FE4956 +:106DF000FE480BF066FE2046FEF725FF3EBDF0B5CF +:106E0000FB4E0446307A89B00F46032804D004288C +:106E100002D0082009B0F0BD04AA06A92046FFF759 +:106E200010F80500F6D1F24823893830226901466E +:106E30001039029100930192039069460A8A63898E +:106E400006A9206806F0EAFD002802D0FEF7FBFE46 +:106E5000E0E7002F03D0E648203000893880042086 +:106E600030722846D6E738B50C00054608D0002217 +:106E7000694606F033FF002804D0FEF7E4FE38BD73 +:106E8000102038BD69462046FEF785FF0028F8D15E +:106E9000A0786946C207D20F284606F03AFFECE711 +:106EA0003EB50C0008D002AA694606F017FF00287C +:106EB00004D0FEF7C8FE3EBD10203EBD0321204693 +:106EC0000BF0BFFC6846008801A90005800FFEF7A3 +:106ED0004EFF00280BD16846007920706846008874 +:106EE00001A98004800FFEF742FF002801D0032093 +:106EF0003EBD684600796070A278EF200240684687 +:106F00000088C10B09010A43F7210A404104C90F57 +:106F1000C9000A43A270F9210A40800601D5012068 +:106F200000E00220400069460243097A5008400010 +:106F3000C907C90F0843A07000203EBDFEB51D461D +:106F400014000E46074615D0002D13D006F0DDFCC8 +:106F500001A8009022882B463146384606F0DDFC19 +:106F6000054668468088208006F0D3FC2846FEF758 +:106F70006AFEFEBD1020FEBDF0B50C46002199B0A2 +:106F80000746684681850D46002C11D0E068002830 +:106F900006D0A06800280BD002886B469A85018035 +:106FA000A078012806D0022804D0072019B0F0BD2F +:106FB0001020FBE72088002807D0401E80B201A9DE +:106FC00006F0A0FD002842D136E08A48EEE7694687 +:106FD0008A8921888A420BD26846007C00250128D4 +:106FE0002CD16846C0898449884227D1012525E0F3 +:106FF0008A4203D1002D2FD06D1C01E0022D02D05A +:10700000032D1BD31FE06946097C012916D169466F +:10701000794BCA895B1ED11A9A421DD005DC77488C +:10702000101A19D0012809D116E0012914D0FF390E +:10703000013903D1032506E00D26B60201A806F0AA +:1070400069FD0028C3D0822804D0002806D0FEF7AE +:10705000FAFDABE7022DFAD13046A7E7E068002839 +:1070600013D006F052FC0BA800906A46A188208835 +:10707000928DE36806F051FC054606F04AFC002DAF +:1070800019D16846A168808D088002980078C006F2 +:1070900001D55B488AE706F038FC0EA800906846E8 +:1070A00080890CAB0222002106F0BEFD054606F0E9 +:1070B00030FC002D01D02846C9E76846008F022821 +:1070C00001D0032072E7A078012808A8007C03D033 +:1070D00080070ED4082069E7C007FBD00820FEF720 +:1070E000EBFA072802D34348401C5FE7082502203B +:1070F00001E00225032069460876218868468183DD +:107100001721818611AA002302320DA906A806F0D4 +:10711000C5F8002802D0FEF7FEFD47E70FA8009053 +:107120006846838E042229463846FEF7DBFA3DE79F +:1071300070B5064615460C460846FEF741FD002888 +:107140000AD106F0E2FB2A4621463046FFF7A6FCAC +:10715000044606F0DEFB204670BD70B514460D46B1 +:10716000064606F0D2FB224629463046FFF744FD8C +:10717000044606F0CEFB204670BD70B51E46144690 +:107180000D001AD0002C18D06168002915D00121FB +:10719000FEF794FF00280FD12068FEF711FD0028AC +:1071A0000AD106F0B2FB324621462846FFF75AFACA +:1071B000044606F0AEFB204670BD102070BD70B5D1 +:1071C00015460C0023D00221FEF778FF00281DD1C0 +:1071D0002068FEF7F5FC002818D106F096FB29463A +:1071E0002046FFF70CFE0DE0B86400003C060000EE +:1071F0006013002002300000032800000028000077 +:1072000001340000044606F084FB204670BD1020C7 +:1072100070BDF8B51C4615460E46074600F01FFA2D +:10722000002805D123462A4631463846FFF786FE18 +:10723000F8BDFFB583B01E4615000F460FD006F00F +:1072400064FB01A800900023F74A3946039806F032 +:10725000EBFC044606F05DFB002C03D014E010208C +:1072600007B0F0BD002E0CD006F04FFB00200090C0 +:107270002A8833463946039806F0D6FC044606F0C1 +:1072800048FB6846808828802046FEF7DCFCE7E75C +:10729000002906D0E54B0A885B899A4201D8E44868 +:1072A000704769E610B586B004236C46A382DF4BB5 +:1072B0005C898C4201D2914202D9DD4806B010BDF2 +:1072C0006C462182628200210091019119892180FE +:1072D0000221A17005A9029104A903916946FFF753 +:1072E0004BFEEBE7F0B591B00D4681206946087181 +:1072F00005F002FC0646002D08D02878CB4C01286A +:1073000006D0022828D0072011B0F0BD1020FBE7DE +:10731000A98801AAFEF7CAFC0028F5D1B00734D528 +:1073200068460079002820D1A879C0071DD006F052 +:10733000ECFA002000906A892989A088EB6806F0A1 +:10734000ECFA6946087106F0E4FA69460879002803 +:107350000BD0FEF778FCD7E7A98801AAFEF7A6FCB8 +:107360000028D1D1342006420FD001216846017295 +:10737000017301794173F00609D5A188684601823D +:10738000A18A01832069059004E00820BCE7A08859 +:1073900069460882FAF72CFC05461720694688835F +:1073A0000AAA2B46023207A902A805F077FF074672 +:1073B0006878000701D5FAF737FC002F03D038466C +:1073C000FEF7A9FCA0E7F00603D5207B06210843C1 +:1073D0002073B00602D50020FEF7C8FE08A8009072 +:1073E00069468B8B208804220121FEF77BF98BE70D +:1073F000F0B5002695B014460D4600290FD0022C9A +:107400004FD3A71EBAB288480AF02EF929191039AD +:10741000CA7B8B7B11021943884242D1BCB201A9BD +:10742000012006F06FFB7AE0029F3888010776D5CD +:10743000002D41D0A9190691CA788B78361D11020A +:10744000B6B219438919A1422BD869468A8906998F +:107450004B7809781B020B439A4222D1C00623D5F0 +:1074600006F053FA07A800900698AB19C178807807 +:107470000A0206990243487809780002084300216D +:1074800006F04BFA009006F044FA009800283ED12E +:107490000698C178827808026946898B1043884231 +:1074A00002D00B2015B0F0BD0698C1788278080292 +:1074B0001043801986B22EE0C0062CD5002007AA02 +:1074C00001461154401C80B21028FAD306F01DFA70 +:1074D00006A800906846002380891022194606F00D +:1074E000A3FB0090002803D006F013FA00980EE0EA +:1074F0000BA86946009088890A8B07AB002106F02B +:107500000CFA009006F005FA0098002803D0FEF768 +:107510009AFBC7E703E0388810218843388001A828 +:1075200006F0F8FA002800D17EE7404D698800296E +:1075300021D0012268460276027700244477018434 +:10754000172181850EAA234602320BA906A805F051 +:10755000A5FE002802D0FEF7DEFBA3E70CA80090F2 +:1075600069468B8D288804220121FEF7BBF800288C +:1075700098D16C8096E7002094E7F0B5002487B09E +:1075800015460E46002A04D002A9012006F0BAFAD8 +:1075900040E0102064E60398007800073AD506F032 +:1075A000B4F901A8009068460023008A1E4A1946D3 +:1075B00006F03AFB074606F0ACF9002F23D1002E67 +:1075C00023D068468088298820183719001D8142F9 +:1075D00036D36946098A3970090A797069468988FB +:1075E000B970090AF97006F090F901A8694600908F +:1075F000088A8A883B1D002106F016FB074606F024 +:1076000088F9002F01D003202AE6684680882018D8 +:10761000001D84B202A806F07DFA0028BBD08228A3 +:1076200008D0FEF710FB1BE6FFFF00004013002010 +:1076300002300000002E0ED02988A01C814201D209 +:107640000C200DE62246314639480AF00DF8311972 +:107650000870000A4870A41C2C80002000E600B5C9 +:1076600085B06946FEF797FC00280AD16846007C81 +:1076700003000BF02BFB08052F2F2F2F08080531D7 +:10768000032005B000BD68468078012807D1684610 +:1076900000880321C902401A1CD001281AD068466C +:1076A0008079012806D16846808815214902401A50 +:1076B00005280FD96846807A012811D168460189CA +:1076C00029200002081A05D0022803D0032801D07F +:1076D000042805D10F20D4E7164917480BF0F1F91B +:1076E0000020CEE738B5154A0021518003791AE011 +:1076F000CC002418A46800946C462488250707D57C +:10770000E50605D5D90008182038C08B508006E062 +:10771000640406D59171C9000818C08890800120C2 +:1077200038BD491CC9B28B42E2D8002038BD0000E8 +:10773000FFFF0000B8640000330200004013002087 +:10774000F8B50125F84902260E603F27F7493F02A8 +:107750008F60F7490022CA63CD63F649C96A0907F9 +:107760000ED4F4494031CB6AF34A53620B6B9362F7 +:107770004B6BD3628B6B1363C96BD3051943516396 +:10778000EE49EF4CC969002829D001282BD0FF20F1 +:10779000ECA16E300BF095F9EE48A063FF200430A9 +:1077A00060632563EC49032008602061E44996206A +:1077B00040314860DD48E94940304163E649FC39E1 +:1077C0000163E649091FC163E349F0398163D74882 +:1077D0004760E34910204860E2480660F8BDE2488F +:1077E0006061E24804E0E148E0306061DF48801F0A +:1077F0000143A161D0E70120D0494006C86170472C +:1078000010B5CE4C0020A070214660702031487029 +:1078100008746061A072A06209F02AFBA061204692 +:10782000343009F038FF002804D0FF20C5A13A30D9 +:107830000BF047F901204006E0610020FFF780FFD0 +:1078400010BDBE49012008707047BC490020087077 +:10785000704770477047BA4940310028086802D025 +:107860000122104301E0400840000860704770B5F5 +:107870000C46B24D01460622E81C0AF085FF6C72E8 +:1078800070BDAE48203040787047AC4A917050705F +:10789000704770B50D460446082904D9FF20A9A1F8 +:1078A000CB300BF00EF90022B14809E0910063588B +:1078B00009180B6053001B191B8C0B62521CD2B2AF +:1078C000AA42F3D3206BAA494031086070BD0B2354 +:1078D000DB4310B5C21A9A4998421FD008DC1C320B +:1078E00022D00A2A20D0142A1CD0182A08D117E046 +:1078F000083011D004280DD0082809D00C2805D054 +:10790000FF2090A1F7300BF0DCF810BD04200CE054 +:1079100000200AE0FC2008E0F82006E0F42004E063 +:10792000F02002E0EC2000E0D820C86010BD8348C1 +:107930002030007B704710B5814CC17861620AF03D +:1079400084FF0002E06110BD252808D0262808D059 +:10795000272808D041000A2807D8091D06E002217F +:1079600005E01A2103E0502101E0891DC9B2744AE3 +:107970009160734940314861704770494861704770 +:1079800070B56E4DA87200F028FBA87AC0073CD0F5 +:10799000714C2068800703D46AA176480BF091F8F7 +:1079A000A87A010619D5800707D5724865A1801C01 +:1079B0000BF087F8A87A00060FD55C4E2878403681 +:1079C000012811D0002804D0A3205EA180000BF074 +:1079D00078F869487061A8693061A87A800714D581 +:1079E0002068C00708D102E06348001FF2E7A52025 +:1079F00054A180000BF065F8A87A4007206801D5F3 +:107A0000042100E008210843206070BD70B5012406 +:107A10004A4D002807D0012818D002281AD055480E +:107A200048A145380BE000F0D8FA53482978001FE8 +:107A3000012907D0002907D04E4842A158380BF041 +:107A400040F870BD046070BD446070BD8120FFF7D8 +:107A500097FF70BD00F0C1FA6869002804D145485D +:107A600038A150380BF02DF86969A86A40184349CD +:107A7000C8602E484249403001623F490C314162A2 +:107A80002A49001548603F4884602C48203004741F +:107A900070BDF8B50C2069460870314C6068C006AE +:107AA000C50F1026A66034480021FC300161324B1E +:107AB00001221B1F1A610BE000BF00BF00BF00BF07 +:107AC00000BF00BF00BF00BF6B461A78521E1A707D +:107AD0006A461278002A02D00269002AECD00161BD +:107AE00068460078002804D1224816A131380AF0EF +:107AF000E8FF002D00D06660F8BD10490020C86185 +:107B0000704710B50AF0A1FE00020D49000AC863D3 +:107B100010BD054902200860704703490220086033 +:107B2000104908607047000080E100E000F5014066 +:107B3000C01F004080000010001700409C13002070 +:107B4000001500407372635C68616C5F7263732E32 +:107B5000630000005B06000000120040448000400B +:107B60000013004080E200E006010200250003004F +:107B7000001600407B0200000410004040850040D9 +:107B80004C81004000050040FB4902200860C9E725 +:107B9000FA490870C6E710B5F94809F084FD0028D5 +:107BA00004D02B20F74900010AF08BFF10BD10B55F +:107BB000F34809F090FD10BDF3494860B2E7F04981 +:107BC00010B53439F14B0022C8605A60896A081830 +:107BD000EF49486000F008FA10BDE94810B5C2212D +:107BE0003438C160E94A00215160806AE849C230F6 +:107BF000486000F0F9F910BDE64900208861C861CD +:107C0000DF493439C860E24948608BE7DC4900202D +:107C10003439886286E73F20DE49000240398860B7 +:107C200080E7D748DA493438806AFE30886079E7DF +:107C3000D7490020886075E7D74801681022914332 +:107C40000160D649012088616CE7D5490020C861F0 +:107C5000D148016810221143016063E700B5FFF7C6 +:107C6000EBFFC74900203439087400BD00B5FFF7A9 +:107C7000ECFFC34901203439087400BDC849CA6902 +:107C8000012A01D000204DE7BF4A403292685206D7 +:107C9000520E524202700020C861012042E7F8B53E +:107CA000BF4C2069012806D00021B548343800783F +:107CB000012802D004E04021F7E7E268012A04D05D +:107CC00000220A43012802D004E02022F9E761687B +:107CD000012905D000211143B24A002802D007E053 +:107CE0001021F8E71368012B02D1E368012B04D0BF +:107CF00000230B43002802D007E00823F9E71168AE +:107D0000002902D1E168012905D000221A439F4EC3 +:107D1000002802D004E00422F8E77168012904D0A9 +:107D200000211143002802D004E00221F9E7606835 +:107D3000012829D000259C480D4301680906090E39 +:107D400002D06169012900D000218D4F143F3973A1 +:107D500000680006000E02D0A069012800D00020B3 +:107D600078738B488068002803D000F0ABFA0128B4 +:107D700000D00020B8730021E16021616160616181 +:107D8000A16171602846F8BD0125D4E77C48012136 +:107D90001438C173C6E6F8B5794E0127143E307C1D +:107DA0000025002827D07C4C206800902560FFF734 +:107DB00070FE009820607A48C560056145604561A5 +:107DC000856174490015403988607848856030467F +:107DD000203801787148012909D0002909D0694962 +:107DE00073480AF06EFE0AF06BFF3574F8BD076049 +:107DF000F9E74760F7E7FFF752FF04460020F0730A +:107E0000634842685E4D343D6A620068A862297822 +:107E1000002909D1A978002906D05B4B5B681B7843 +:107E20000B406978994309D000213170E10707D0F0 +:107E3000104602F031FC0121A86A08E03770F5E72E +:107E4000A10601D5022102E0A10702D5002102F01E +:107E500030FC4D4F796806220931E81C0AF067FCB6 +:107E6000002807D1687A79680978C909884201D160 +:107E7000012000E000207070204600F0BBF83F4871 +:107E8000C2270078002815D0012828D002283BD02E +:107E900003285AD03B4947480AF013FE287C0028A3 +:107EA00004D02878002865D0FFF7C6FE287800287F +:107EB00061D08BE0A00701D501F001FC200703D5BC +:107EC0000120EF6001F034FC600703D50020EF6073 +:107ED00001F02EFCA006E1D501F09EFBDEE7A00735 +:107EE00001D503F08BFE200703D50120EF6003F0DE +:107EF00005FE600703D50020EF6003F0FFFDA0063C +:107F0000CCD503F087FDC9E7A00703D5BF20044007 +:107F100009F07EFB200705D5BF2004400120EF605B +:107F200009F075FB600705D5BF2004400020EF6015 +:107F300009F06DFBA00603D5BF20044009F066FBE5 +:107F40006006ABD509F065FBA8E7A00701D509F0ED +:107F500063FB200703D50120EF6009F05CFB60079D +:107F600003D50020EF6009F056FBA00696D509F076 +:107F700051FB93E720E022E000E100E05400002004 +:107F8000D0130020447B00000015004040810040D9 +:107F90004085004040F501400012004000100040C4 +:107FA0000011004000140040401600400005004051 +:107FB0006F0300009F040000FFF747FE76E7E868C4 +:107FC000002803D0A96A091826484160F07B0028E0 +:107FD00000D10BE70AF074FEF8BD234903200860C6 +:107FE0002249002008619DE520482149C1612149BD +:107FF000816197E570B50546FFF7EFFF1E4CA17A4A +:10800000080701D568071CD41C4AC80605D5507B53 +:10801000002802D0907B002813D0880602D5107863 +:1080200000280ED1480602D55078002809D000203B +:108030008A070026002A07DA4A0704D5012222709F +:1080400002E00120F4E72670CA0709D0AA0705D488 +:10805000890705D5002803D0A80601D4FFF719FD2C +:10806000A67270BD408500400012004040F50140FE +:1080700010100040448100409C130020BC130020DD +:108080002E48002101704170704770B506461446B5 +:108090000D46012000F072F828490120284B087095 +:1080A0009E60DC601D6170BDF8B50446012000F0E3 +:1080B00065F822490120087021494C6021490026B9 +:1080C0004E601121204D8902A960204F002C0AD05A +:1080D000012C03D01EA140200AF0F3FC3E601120C9 +:1080E00080026860F8BD386001208002F9E710B5B1 +:1080F0001248017800290ED01121134A890291609B +:1081000010494A680021002A03D0154A12684270BB +:1081100000E041700170002000F030F810BD074809 +:108120000178002907D007484068002802D00C4891 +:108130000068C0B2704740787047000055000020CA +:1081400000F5004000F1004000F5014000F2004061 +:108150007372635C68616C5F63636D2E6300000023 +:1081600000F4004001202949C0030860284900208C +:1081700008701120274980028860704770B5244D2F +:1081800004462878A04207D0002C05D0002803D050 +:1081900021A14D200AF095FC2878A04210D00020A3 +:1081A00022492C70002C23D01A4A214D214B8032B9 +:1081B000012C06D0022C13D017A16A200AF081FCF2 +:1081C00070BD0860022008604D6112481A494030B5 +:1081D00001624362081D10601648001D506070BDAA +:1081E0000860032008604D6114481060536070BD42 +:1081F00008600860112007498002886070BD10B5D2 +:1082000005A173200AF05DFC10BD000080E100E0D4 +:108210005700002000F501407372635C68616C5F79 +:1082200063636D5F6161722E6300000000F50040C2 +:10823000D413002000F000400011004048810040AD +:10824000364800210170417010218170704770B56F +:10825000064614460D460220FFF790FF01202F49E5 +:108260002F4A0870E41E14619660556070BD10B509 +:108270000220FFF783FF29490120087029480021C7 +:1082800001604160816028490014486010BD10B54C +:10829000224C2078002811D00120234980038860D7 +:1082A00000F02EF80021002804D0012060701F4843 +:1082B000006801E061701020A07021700020FFF7BD +:1082C0005DFF10BD10B515480178002905D000F0FC +:1082D00017F8002800D0012010BD407810BD10B55F +:1082E0000E480178002909D000F00AF8002803D0D0 +:1082F0000E480068C0B210BD102010BD807810BDBF +:1083000008480168002905D04168002902D080682A +:10831000002801D00020704701207047580000203D +:1083200000F5004000F1004000F5014000F400407D +:1083300010B528210AF085FA10BD40788006800E1D +:10834000704740788006800EC01C70472820704718 +:1083500070B5054600780A0700090001120F1043A6 +:1083600028700B000AF0B2FC070507050705090590 +:108370000B00062408E00C2406E0222404E000247C +:10838000FEA158200AF09DFB6878800980012043F7 +:10839000687070BD00780007000F704710B50622A6 +:1083A000C01C0AF0F1F910BD0B4610B5C11C062225 +:1083B00018460AF0E9F910BD10B5062209300AF096 +:1083C000E3F910BD0B46014610B5062209311846E7 +:1083D0000AF0DAF910BD0278BF23C9071A40490E26 +:1083E0000A430270704700784006C00F7047027859 +:1083F0005206520EC9010A43027070470078C00944 +:10840000704770B50C460546C11C2046062209304F +:108410000AF0BAF920784006400E20702978490603 +:10842000C90FC9010843207070BD70B515460E46CE +:1084300004461F2A03D9D1A1A9200AF042FB2046F5 +:108440002A46314609300AF09FF96078AD1D80094F +:108450008001A906890E0843607070BD70B505469D +:1084600040780E468406A40E062C03D2C3A1B92080 +:108470000AF027FBA41FE4B21F2C00D91F242946B1 +:108480002246093130460AF07FF9204670BD70B5AA +:1084900015460E4604461F2A03D9B8A1CD200AF07E +:1084A00010FB20462A46314609300AF06DF9607803 +:1084B000AD1D80098001A906890E0843607070BD5A +:1084C00070B5044640780E468506AD0E062D03D2E3 +:1084D000AAA1DE200AF0F5FAAD1FEDB21F2D03D9D7 +:1084E000A6A1E2200AF0EDFA21462A4609313046DB +:1084F0000AF04AF9284670BD10B504220F300AF080 +:1085000043F910BD0B46014610B504220F31184641 +:108510000AF03AF910BD10B5032213300AF034F90D +:1085200010BD0B46014610B50322133118460AF060 +:108530002BF910BD4176090A81767047817E427E13 +:10854000080210437047C176090A01777047017F1E +:10855000C27E0802104370474177090A817770474D +:10856000817F427F080210437047C175090A017676 +:108570007047017EC27D08021043704781757047C5 +:10858000807D704720300279C90652095201C90E18 +:108590000A430271704720300079C006C00E704750 +:1085A00020300279D206D20E49010A430271704787 +:1085B000203000794009704710B505221F300AF0BD +:1085C000E3F810BD0B46014610B505221F311846D1 +:1085D0000AF0DAF810BD30B5411C837E0A46190254 +:1085E000D37D447E927D1B0221431343674D827DE0 +:1085F0008C1FAC4210D8002A0ED0082A0CD88A4210 +:108600000AD28B4208D8817F427F08021043A91DFD +:10861000884201D8012030BD002030BD00210A462B +:108620004254491C2229FBDB70474078C006C00E2B +:1086300070474078C006C00EC01C704722207047AB +:1086400010B502788B07920892009B0F1A430270B4 +:108650004278520952014270012908D0022906D0FD +:10866000032905D0FF2045A1A3300AF02AFA10BD46 +:1086700001210A43427010BD10B502788B079208A1 +:1086800092009B0F1A4302704278520952014270C5 +:10869000012908D0022906D0032905D0FF2037A1DF +:1086A000BD300AF00EFA10BD01210A43427010BD20 +:1086B00000788007800F70470278FB23C9071A40B3 +:1086C000490F0A430270704700784007C00F704797 +:1086D0000278F723C9071A40090F0A43027070474E +:1086E00000780007C00F70470278EF23C9071A40CF +:1086F000C90E0A43027070470078C006C00F704769 +:1087000070B50546C1700B000AF0E0FA0E080A0CBD +:108710000E1012120C14141212160C180C2413E062 +:10872000082411E002240FE017240DE00D240BE0D3 +:10873000012409E0092407E0062405E0452000247F +:108740000EA1C0000AF0BDF968784009400120433D +:10875000687070BDC078704770B5044640780E46AA +:10876000C506ED0E1B2D03D904A109480AF0A9F98D +:108770006019C01C042231460CE000007372635C77 +:10878000756C5F7064752E63000000007A0C000049 +:108790003A02000009F0F8FF70BD70B50446407859 +:1087A0000E46C506ED0E1B2D03D9A049A0480AF0C0 +:1087B00088F96119C91C0422304609F0E5FF70BD33 +:1087C000C171090A01727047017AC2790802104327 +:1087D00070474172090A81727047817A427A0802B1 +:1087E00010437047C172090A01737047017BC27A56 +:1087F0000802104370474171090A817170478179FD +:108800004279080210437047017170470079704740 +:108810004173090A81737047817B427B08021043D0 +:10882000704730B5411C037A0A46C47919022143C6 +:10883000537914791B0223437E4D00798C1FAC427F +:1088400010D800280ED008280CD888420AD28B42B3 +:1088500008D8D07A917A00020843A91D884201D82D +:10886000012030BD002030BD10B50522001D09F0EB +:108870008BFF10BD0B4610B5011D0522184609F0EF +:1088800083FF10BD4172090A81727047817A427A72 +:10889000080210437047017170470079704710B5A6 +:1088A0000822001D09F070FF10BD0B4610B5011D18 +:1088B0000822184609F068FF10BD0A78027349784B +:1088C00041737047027B0A70407B4870704710B557 +:1088D00008220E3009F058FF10BD0B46014610B5B6 +:1088E00008220E31184609F04FFF10BD10B50422C2 +:1088F000163009F049FF10BD0B46014610B50422A1 +:108900001631184609F040FF10BD10B50822001DB1 +:1089100009F03AFF10BD0B4610B5011D082218469C +:1089200009F032FF10BD10B504220C3009F02CFF05 +:1089300010BD0B46014610B504220C31184609F053 +:1089400023FF10BD017170474171090A81717047A1 +:10895000C171090A017270470079704781794279C3 +:10896000080210437047017AC27908021043704729 +:108970000171704700797047017170470079704745 +:1089800010B50822001D09F0FFFE10BD0B4610B502 +:10899000011D0822184609F0F7FE10BD10B5082287 +:1089A000001D09F0F1FE10BD0B4610B5011D082297 +:1089B000184609F0E9FE10BD70B515460E4604468E +:1089C0001B2A04D93720194900010AF07AF82A46EF +:1089D0003146E01C09F0D8FE6078E9064009400104 +:1089E000C90E0843607070BD70B5054640780E46EC +:1089F000C406E40E1B2C04D9DF200C4980000AF0C9 +:108A000060F82246E91C304609F0BEFE204670BDE3 +:108A10004078C006C00E1B2801D8012070470020F6 +:108A2000704710B5222209F0AFFE10BD7C87000010 +:108A3000430200007A0C0000FEB50F4601460646D0 +:108A40000546C031203640350446032F04D0002FA0 +:108A50002BD0012F29D049E000206080A080E08049 +:108A600020816081A082E082E873A074E074A07627 +:108A7000E076A073E0732074607430740123AB73EC +:108A80006882E88208762146A883603108702883CE +:108A90002873687320776077B072B0730872487279 +:108AA00088720A7488746883FEBD00206882E88238 +:108AB000012F50D0E08B0090608C0190C000009995 +:108AC00009F0DCFE401C80B2A882009919224143C3 +:108AD0009202914201DD401EA8827D200002009991 +:108AE00009F0CCFE401CE883002F01D0022FDBD11F +:108AF000307AC006C00E30720020E872221824219D +:108B00008B5C4032D9075B08DE07C90FF60F71187E +:108B10005B08DE07F60F71185B08DE07F60F7118A9 +:108B20005B08DE07F60F71185B08DE07F60F711899 +:108B30005B08DE07F60F71185B0859189171EA7A25 +:108B4000401C5118C0B2E9720528D7D3002FABD111 +:108B500000202874FEBD4A7F2046E030022A12D051 +:108B6000097F022913D050A1722009F0AAFF012029 +:108B700000900190E08B698B4843009909F08CFECE +:108B8000688301989AE7818800910089F1E7018A5A +:108B90000091808AEDE770B504464034E67A0546D8 +:108BA000002E68D0252E66D8002964D03C20405D78 +:108BB000227B48431018252109F060FE08462173E6 +:108BC0004207C908520F3C4B691820319A5C097959 +:108BD0008A4367D0314609F051FE491CCAB20020D1 +:108BE00006E0002804D0291840314979511ACAB248 +:108BF000291846235B5C93423AD320310979C94353 +:108C0000CB07DB17D21A521E1206120E34D08B0776 +:108C1000DB17D21A521E1206120E2FD04B07DB178B +:108C2000D21A521E1206120E2BD00B07DB17D21AC5 +:108C3000521E1206120E27D0CB06DB17D21A521E76 +:108C40001206120E23D08B06DB17D21A521E120602 +:108C5000120E1FD04B06DB17D21A521E1206120E2E +:108C60001BD00906C917511A491E0A06120E17D041 +:108C7000401C0528B5DB70BDC00013E0C000401CDF +:108C800010E0C000801C0DE0C000C01C0AE0C00065 +:108C9000001D07E0C000401D04E0C000801D01E091 +:108CA000C000C01D607370BD7372635C6C6C5F75D7 +:108CB00074696C2E63000000042D010010B5FF489C +:108CC0000021017041708170C17041718171C17169 +:108CD000083008F0E0FC002804D0FF20F8A1843020 +:108CE00009F0EFFE10BD10B5F44900204872081DD0 +:108CF00008F0D1FC002804D0FF20F1A1C33009F016 +:108D0000E0FEFFF7DBFFF148FFF788FC0021EF48AA +:108D1000FFF7EAFC0121ED48FFF792FC10BDE2E706 +:108D20001B207047E5494A7A002A01D0002070478D +:108D3000488101204872704710B5E0494A7A002AFC +:108D400002D04989814201D0002010BDDB48001DBE +:108D500008F0A9FC002804D0FF20D9A1B43009F004 +:108D6000B0FED648001D08F0B6FCFFF7A7FF0120B3 +:108D700010BD70B5D14C0025627A002A02D06289FC +:108D8000824201D00D700DE0227863789A4203D3BD +:108D900022786378D21A04E062782378D21A1023FA +:108DA0009A1A0A70FFF7C8FF002801D065720120E7 +:108DB00070BDC2494A7A002A04D04989814201D152 +:108DC0000120704700207047BC490A784B78521C3C +:108DD0001207120F9A4207D0097822225143BC4A47 +:108DE000891801600120704700207047B34801785E +:108DF0004278491C0907090F914206D00178491CA5 +:108E00000907090F01700120704700207047AB4926 +:108E10004A7A002A04D04989814201D10120704751 +:108E200000207047A5490A784B789A4207D04978C4 +:108E300022225143A64A8918016001207047002070 +:108E4000704710B59D4C20786178884216D06078C4 +:108E5000401C0007000F6070201D08F024FC002853 +:108E600004D0E078401CE070012010BDA078401CC8 +:108E7000A0709248001D08F02EFCF5E7002010BD00 +:108E80008E4801784078814201D10120704700204E +:108E900070478A4801784278914202D3017840783D +:108EA00003E041780078081A1021081AC0B2704710 +:108EB0000F20704770B5814C0D46617A002916D09D +:108EC0006189814213D100262E70201D08F0EBFB32 +:108ED000002805D1A0782870A670201D08F0FBFBA3 +:108EE0002878E17840182870E670012070BD0020D5 +:108EF00070BD76490160704770494A7A002A04D0F3 +:108F00004989814201D101207047002070476B4997 +:108F10004979002901D0002070476E490160012085 +:108F2000704766484179002901D00020704701212F +:108F300041710846704761494A7A002A04D049893C +:108F4000814201D101207047002070475B49497977 +:108F5000012901D0002070475E490160012070475F +:108F600056484179012901D0002070470021417104 +:108F70000120704751484079012801D001207047F5 +:108F8000002070474D494A7A002A04D0498981421D +:108F900001D1012070470020704770B5474C05464D +:108FA000A0790721401C09F069FCE079814208D0D2 +:108FB000A0792221484347492231401828600120E6 +:108FC00070BD002070BD10B53C4C0721A079401C3D +:108FD00009F054FCE079814207D0A0790721401CB8 +:108FE00009F04CFCA171012010BD002010BD3348D8 +:108FF0008179C079814201D10120704700207047FA +:109000002E494A7A002A04D04989814201D101209F +:1090100070470020704710B504462848083008F013 +:1090200042FB002815D125498879CA7990420CD095 +:10903000C8792221484327492231401820601F481F +:10904000083008F048FB012010BD1C48083008F02B +:1090500042FB002010BD10B504461848083008F047 +:1090600022FB002815D115498879CA7990420CD085 +:10907000C8792221484317492231401820600F48FF +:10908000083008F028FB012010BD0C48083008F01B +:1090900022FB002010BD094810B5083008F003FB82 +:1090A000002822D1054CA079E17988421AD0E079D4 +:1090B0000721401C09F0E2FBE1710DE05C0000209B +:1090C0007372635C646D5F712E6300002F17002064 +:1090D000FF1300201F1600202046083008F0FBFA7E +:1090E000012010BD0C4808F0F6FA002010BD0A4817 +:1090F00008388179C079814201D101207047002070 +:109100007047054808388179C079814201D1012032 +:1091100070470020704700006400002070477047CF +:10912000FF2070477047704700207047002070474D +:1091300000207047002070470020704700207047D3 +:1091400000207047002070470020704701207047C2 +:1091500000207047002070470020704700207047B3 +:10916000F8B5FA4D0446A87F002600280CD0002947 +:1091700023D1667010202070E87FA0702846203030 +:109180000078E070AE7718E0287A012801D000203E +:10919000F8BD002911D16670EC49687A01270A31BF +:1091A000002801D0132000E0052020701422A01C0C +:1091B00009F0EAFAA7716E722E720120F8BDF8B5B7 +:1091C000E3480078002802D00C273846F8BD002775 +:1091D000DE4D3C46203DAF74EF742F7528466F730B +:1091E0002038DA4E47737771687D002804D0FEF787 +:1091F0001FFDFFF74CF86C7534727472B477D34866 +:109200002430FFF795F8D1484C30FFF791F8D0485B +:109210004470DAE710B5CE4C00232370CB4C203CD1 +:109220006375CA4B01241C71603B583307C3FFF7B9 +:10923000C6FF002803D0C7A1FF2009F042FC10BDE3 +:10924000C2482038807C7047F8B5C04D0646407B48 +:10925000203DE873BD4837791346AF73B27B827106 +:109260000446603C217006221946601C09F08CFA05 +:10927000B07960730622F11DE01D09F085FA687B64 +:109280000126002800D0EE74B0484038407B00280A +:1092900000D02E75002F09D0012F09D0022F24D025 +:1092A000032F43D0FF20ABA14B3013E000211DE082 +:1092B000A64801212430FFF74BF8A448E11D2430D3 +:1092C000FFF77AF8607B002807D0012807D0FF203D +:1092D000A0A1413009F0F5FB0CE0002100E00121E4 +:1092E0009A482430FFF783F804E006219748243099 +:1092F000FFF72EF89548611C2430FFF74FF893488C +:1093000021782430FFF767F8904804214C30FFF7AC +:109310001FF88E48611C4C30FFF740F88B482178CD +:109320004C30FFF758F8AE740020F8BD0221DDE79D +:1093300070B50446854D0020203D287528462246FC +:10934000323809F021FA2846203844730120287564 +:1093500070BD7E490871704710B57C4C0022203CDE +:10936000E274607302462046123809F00DFA0120BB +:10937000E07410BDF8B500F02DFB744C0025203CC6 +:10938000607D002804D0FEF753FCFEF780FF657572 +:109390006F4E3570FEF70BFCA07B012804D0002136 +:1093A000084601F02DF9F8BD0021022001F028F94E +:1093B000664C207A0127002809D0A07F0028F2D12E +:1093C0000520E077204620300570A777F8BD70783B +:1093D0000028FBD05D4906226039487BE073C91D37 +:1093E0000846693009F0D0F93C20A07227727570E8 +:1093F000F8BD10B5554C203CE17B207CCA0701D05C +:10940000C2070BD08A070FD582070DD42620FEF79E +:109410009BFA207C02210843207410BD2520FEF712 +:1094200093FA207C0121F6E74907F6D54007F4D4EA +:109430002720FEF789FA207C0421ECE770B5444828 +:109440000078002861D1414C203CA07C00285CD0F1 +:10945000FEF7A1FB0026267466743046FEF798FBE3 +:109460000020FEF76DF93F48FEF765FA2546403DBE +:10947000296E8857FEF72BFA3A48C01EFEF741FBCB +:10948000FEF7BAFBFFF7B5FFFEF7DBF9FEF77CFB53 +:109490000120FEF7BBFA0F210520FEF7F6F9297827 +:1094A000681CFEF7E4F9A07B01280AD0E07C0028C4 +:1094B00007D0214612390846627B5630FEF7B5FFC9 +:1094C000E674207D002808D0204840380146427BC1 +:1094D00012398C30FEF7DBFF2675E86D0178002924 +:1094E00003D00178001DFEF7D4F9A86D017800299A +:1094F00007D00178154A401C7732FEF7A8FE0120FC +:109500006075FEF754FB002070BD0C2070BD104943 +:109510004860704770B50546FEF76EFB002D06D01B +:109520000020FEF72DFAFEF78CF9FFF762FF074CDB +:10953000203C607C002819D0A07B012803D105A124 +:10954000094809F0BEFAFFF715FF70BDB4170020F7 +:10955000680000207372635C6C6C5F6164762E63DC +:10956000000000000F2D0100CF0300000126002D98 +:1095700004D00220FEF74AFAFE484671FD48243026 +:10958000FEF71AFB012008F03CF8FEF762F9A07B19 +:1095900000280ED001280CD002280AD003280AD0B7 +:1095A000F549F64809F08DFAE07B217C884306D026 +:1095B00009E0032000E00120FEF7E2F9F4E7A07BD8 +:1095C000012803D06674EE480670BEE700202074C0 +:1095D000F9E710B5FEF7DFFAE948007800280ED168 +:1095E000E4482038807C002809D00020FFF792FF53 +:1095F000F6F7F9FEDF480079012806D007E000F011 +:10960000E9F9FEF7D4FA0C2010BD09F059FB00204F +:1096100010BDDB494870704770B500F0AFFE002800 +:1096200019D0FF202D30FEF7A8F9D54E3078D14C57 +:10963000012813D0022801D003282ED0CE49D148CA +:1096400009F03FFA3078002807D0F6F7CCFE2079F1 +:1096500001282CD030E0FFF78DFE76E7C54D203D88 +:10966000A87B032819D0FEF7B8FA687D002803D03C +:10967000FEF7FDFDFEF7D5FABE487430FEF79CFA02 +:10968000012007F0BFFFA87B01280BD0A1796F2034 +:10969000012906D0032904D004E00120FFF73AFF96 +:1096A000D0E77F20FEF76CF902203070CAE76079BE +:1096B000002801D1FEF76AFB0020607145E770B514 +:1096C000AC4C203C607D002803D0FEF7B1FAFEF7D9 +:1096D000DEFD00F053FE00281CD0A94D287802289A +:1096E00004D0A848A4492B3009F0EBF9A07B01284D +:1096F00013D0FF202D30FEF740F90120FFF70AFFBD +:109700002878002808D0F6F76EFE9A4C20790128B8 +:1097100006D00AE0FFF72EFE17E799208000EAE75F +:109720006079002801D1FEF731FB002060710CE761 +:10973000F8B50446FEF7FBF80546FEF7C3FD012821 +:1097400000D0002000908E480078022804D08D4878 +:109750008949673009F0B5F9864E203E707D0028B2 +:1097600003D0FEF765FAFEF792FDFEF745FA814851 +:109770007430FEF70FFE21007E4C07464DD0FEF7F9 +:1097800080F80028FAD03B0009F0A0FA06474747C6 +:1097900004471D47B07B0128F0D00098054304D151 +:1097A000A079002801D0022837D172484C30FEF74A +:1097B00003FA012007F025FF0120FEF7E1F87048C9 +:1097C00003210170F5E06B4F74373846D438F978CF +:1097D000C27991421BD13979027A914217D17979B4 +:1097E000427A914213D1B979827A91420FD1F979B3 +:1097F000C27A91420BD1397A027B914207D13978F2 +:10980000407B4906C90F814201D1012100E00021BE +:10981000B07B012802D0002803D0C3E0002908D182 +:10982000C0E00098054304D1A079002801D00128A8 +:109830007ED150487430FEF7CEFE002878D0504DCF +:109840004C49686804228331323008F09DFF387833 +:109850003E214006C20F68680A540622F91C3F30B8 +:1098600008F092FF4349686803228731363008F0D8 +:109870008BFF6868BA7D39210A543E4974310A7EEB +:10988000CB7D12021A4342878A7E4B7E12021A4314 +:10989000C2830A7FCB7E110219430184354974319A +:1098A0008A7F4B7F1102194341843249052293314B +:1098B000243008F069FF2F486D68943001792F46F5 +:1098C000C906C90E20373977007940097877207AA0 +:1098D000002810D0A07F002858D1607A002801D03D +:1098E000132000E005202349E07700202031087094 +:1098F0000120A0774AE01F48717D1030002925D053 +:109900000021A172A989A181B97FE17329460622AC +:109910003F3108F039FFE88BE082288C2083688C87 +:109920006083787F2077607F00994008400000E0E6 +:1099300038E008436077FEF7D2FC617F4000C9073A +:10994000C90F01436177012060721EE00021A172FE +:10995000A989A181B97FE173294606223F3108F028 +:1099600013FFE88BE082288C2083688C6083787FEB +:10997000207709E0B417002054950000ED030000A3 +:10998000680000206B02000001202072194D0020A9 +:10999000287000F01FF8FEF70AF90120696800F04E +:1099A0002FFE06E0FF202D30FDF7E7FF0120FFF737 +:1099B000B1FD1048007800280BD0F6F714FD20798F +:1099C000012804D16079002801D1FEF7DFF90020D9 +:1099D0006071F8BD10B5FEF719F9FEF70DF9FEF745 +:1099E00058F80020FDF7CCFFFEF715F9FEF795F8C3 +:1099F00010BD0000680000208107C90E002808DAA9 +:109A00000007000F08388008F94A80008018C069F4 +:109A100004E08008F74A800080180068C84000060B +:109A2000800F7047F448C07D7047F44800780028E4 +:109A300001D00020704701207047F048007870473F +:109A400010B5EE4A1378EC4CA47DA34202D007F087 +:109A500059F910BD1078032803D1E8490120891D68 +:109A6000887000F04AFE10BD38B5E44DE24CAD1DE3 +:109A7000687801281ED00121684606F041F8684642 +:109A80000078DF49000208F0F9FE68684118606854 +:109A900007F08FF86060DB48A060A18A00200029F1 +:109AA00010D06070032121702073A07ED249FFF78F +:109AB000C7FF38BD7D21C900606807F07AF8606093 +:109AC000D148E9E70121A18202216170EAE7FFB5EF +:109AD000C94C85B01C3461680191A1680391C749E4 +:109AE0001E46891E4A6807995388C91A89B202918D +:109AF000002E04D025463C3521464C3102E0BE4DB7 +:109B0000114664310091BC4F03213C372970002875 +:109B100018D0BA49891E4968403101287ED00228F0 +:109B20005CD003287BD0B9A1BC4808F0CAFF2878D4 +:109B3000002E75D0032804D0B848B4A1093008F02D +:109B4000C0FF35E1A068002804D1B448AFA1663851 +:109B500008F0B7FFA948B149801E40686031408FC6 +:109B600048434018069900F0CEFDE061A348AB4998 +:109B7000801E40686031C08B4843069900F0C3FDE9 +:109B80009E492062891E4B68A44A598FA0686032A2 +:109B9000514386464118E069A04A091A4C3A89188F +:109BA0008C462033E1629D4A597E60325143411810 +:109BB0000818FF3016306062A06261467046081ACD +:109BC000FF38974935388842B1D29649884204D245 +:109BD00092488EA1593808F074FFD0E0508F8F4A18 +:109BE0002169603250430818069900F08CFDE0614D +:109BF00082488A49801E40686031C08B484306997C +:109C000000F081FD2062A068002804D183487FA174 +:109C1000513808F056FF7948801E02E02FE05EE0E0 +:109C2000C1E040685621095A7F4B0029418F2269C3 +:109C30001DD059435118E269891AE1626269E168ED +:109C4000794B5143E26989183922125C5A438A18C8 +:109C50005118FF3114316162C08B216A5843411A97 +:109C600072480818A062A168E06A401A81E059436E +:109C70005118E269891A6268D3398918DDE7C88A00 +:109C8000002802D0A068002804D164485FA13938B8 +:109C900008F017FF59486449801E4068C28B4A4348 +:109CA000216A8E46511AE1628C4656226369125A25 +:109CB000E168D21A5943E3692030CB187146514309 +:109CC000407E594A5918504308184018FF30143044 +:109CD0006062564861466044A062A06848E0D08B4C +:109CE000514A5043226A801A029A5043E062C88A5D +:109CF000002805D0002E19D0B87D002816D0A1E08C +:109D0000002E02D0B87D0028F6D10198002802D09C +:109D10000398002804D141483CA1213808F0D1FE25 +:109D20000198E16AD3380818E06207E0019800283A +:109D300004D08D2035A1C00008F0C3FE2F48801E3E +:109D400042685620815A02980818216A4843400008 +:109D5000FF3014306062D08B334A5043411A33488D +:109D60000818A0622448C07D00280BD0E16A03983F +:109D7000081AFF382A492338884200D3D7E6022040 +:109D80002870D4E606F072FC01461B48006907F013 +:109D9000C7FBE16A081AFF3821491E388842EDD214 +:109DA000012009B0F0BD032802D1144907204870F2 +:109DB0001148E16A006906F0FCFE6860A16A606A09 +:109DC000884202D90098016001E00099086000987B +:109DD000174900680818A8600848801E40688188F4 +:109DE0000798081A00B2002824DD022023E00000B2 +:109DF00000ED00E000E400E05018002072000020B8 +:109E000010270000F82A0000B78913007372635C02 +:109E10006C6C5F6C6D2E73302E630000820400004A +:109E20004707000082020000E204000061FCFFFF1F +:109E3000EF160000002068702E73002E04D0B87D4D +:109E4000002801D00220ACE701204640BE76F7484A +:109E5000807E2946FFF7F4FD0020A2E7F8B5F3481D +:109E60003C30807EF14FF24D3C461C3400280CD033 +:109E70006968208F4988884207D17878002804D102 +:109E8000A920EC49C00008F01CFE06F0EFFB0146DB +:109E9000386907F045FB00F044FC6968228F4B8865 +:109EA0001E18B24202DB521C228702E0401C181826 +:109EB0002087208F0A89904201D1401C2087B88AD0 +:109EC000032802D2401CB88201E0208F8880084617 +:109ED0004030828A408A4988101A401E401886B253 +:109EE00017E028786B6841002033D3485B7F415AE4 +:109EF0005B00C05A081881B2207E0023FFF7E7FDFF +:109F0000002811D0012810D00B20CA49C00108F048 +:109F1000D8FD228FB01A00B20028E2DA6868082162 +:109F20002030417400F0A7FDF8BD208F401C208731 +:109F3000EFE770B5BD4C00261C3466600120A660BA +:109F400000F0C9FBBA481F21801C41700078B74D52 +:109F5000030008F0BBFE044545033745B3482670AF +:109F60003C30807EB24E002806D106F07FFB216C8B +:109F700007F0D6FA002811DC7068228F41888A42E7 +:109F800004D10289511A4181428003E0511A418172 +:109F9000218F41806868206428610BE0A18E706881 +:109FA0004288891A4181A18E4180216C69602961B2 +:109FB000E16C4166706801F0FFFB00280DD09D49FF +:109FC0009E4808E068682861FFF738FA002804D046 +:109FD0009A489849401D08F074FDF6F704FA70BDE0 +:109FE000964894490C30F6E7F8B505468F4A0120AB +:109FF0003C3290758D4C17466576213F00260B004C +:10A0000008F064FE09061D2E4E2B69691C64690068 +:10A0100020768748801C0078022807D0384607F051 +:10A0200042FB002803D1A07EA84200D12676207EE4 +:10A03000002803D1FFF77DFF00F0A0FBF8BD207ED4 +:10A04000002806D006F064FA6676384607F043FB2F +:10A0500001E000F075FB2676F8BDFDF79CFEF8BD2B +:10A060007348801C017802290ED0A17E0078A94295 +:10A070000DD0002804D0FF206E497B3008F021FD70 +:10A08000284606F0D8FAF8BDFFF7E8FEF8BD032829 +:10A0900003D0FF206749813015E0FFF7E5FCF8BDEC +:10A0A000A07EA84204D0FF206249873008F009FD55 +:10A0B0005F48801C01780229E6D000780328ECD0A4 +:10A0C000FF205C498E3008F0FCFCE6E7284606F0ED +:10A0D000B2FA6676F8BDFF2056499D3008F0F1FCD3 +:10A0E000F8BD524988755248801C00E020BF0278B4 +:10A0F0008B7D9A42FAD00078002803D000200022FD +:10A100008A7570470120FAE710B500280BD00128A6 +:10A1100005D04A484749853808F0D3FC09E00320B8 +:10A12000FFF7DFFF01E000F049FB002801D000202D +:10A1300010BD0C2010BDF8B5FF273D4D1F24D037B2 +:10A14000AD1C2E78330008F0C1FD040811030C117A +:10A150000220FFF7C6FF002801D000240FE00C24E6 +:10A160000AE00120FFF7D0FF044603E031493846FA +:10A1700008F0A7FC002C02D02878B042E1D1287862 +:10A18000002804D0FF202B49D53008F09AFC27493D +:10A1900000201C3108761C39887501226A70244A17 +:10A1A00008325070C87508612046F8BD70B5044685 +:10A1B0000120FFF721FCC5B20B20FFF71DFCC0B248 +:10A1C000854204D0FF201B49A73008F07AFC01200B +:10A1D000FFF712FCC5B21820FFF70EFCC0B2854293 +:10A1E00004D0FF201349A83008F06BFC0420C043C2 +:10A1F000FFF702FCC5B21920FFF7FEFBC0B2854293 +:10A2000004D0FF200B49A93008F05BFC08484470DB +:10A2100006481B3007F03FFA05490020891C0870EA +:10A2200002498875FFF787FF70BD000050180020B5 +:10A23000700000200C9E0000142D0100220300007D +:10A24000F74840787047F649891E08707047F3B5A3 +:10A2500081B006F0E9F9F349884200D20846FF30A0 +:10A260009930EF4D87B22878002801D00C20FEBD30 +:10A27000ED4806F08CF9ED4CA076E9490320087012 +:10A2800000268D1DAE70A07E002804D19720E849DD +:10A29000800008F016FC0298012827D0E5490198B3 +:10A2A00048436860012028700146684605F028FC94 +:10A2B00068460078E049000208F0E0FA0D4606F032 +:10A2C000D5F9791906F075FC6060DC48A0600320C0 +:10A2D0002070022060702673A07ED449FFF7B0FB87 +:10A2E000CF48A682072141700020FEBD06F0BEF9CE +:10A2F000394606F05EFC6060D148A0602E700120F7 +:10A300006870E4E7704770B5C5490A78002A01D043 +:10A310000C2089E702220A70C14CC44DA41E1C35D2 +:10A320006060287E002804D0C248C1494E3008F041 +:10A33000C8FB207800234100C248425A616820319E +:10A34000497F4900405A101881B21A461846FFF753 +:10A35000BEFB002804D0B748B549503008F0B1FB27 +:10A36000002068610121E8602976B049888262682E +:10A370005188491E51802887A88655E770B5A8489E +:10A380000124801D4078A94D002813D028461C3098 +:10A390008168AD48814202D8AA7D032A00D10024F9 +:10A3A000814207D9A87D032801D0012000E00020C8 +:10A3B000FFF72FF9A87D032800D10024204633E7BA +:10A3C0009A481C300178491C0170026B81689142E7 +:10A3D00004D8007E012801D001207047002070477A +:10A3E0000020704770B5914C1C34207E032849D161 +:10A3F0000021204620308175894DAD1E68684030AF +:10A40000007C00283ED106F031F988490A690146EE +:10A41000104607F085F8002834DD00F082F96968FD +:10A42000401C4A888018A0860889A28E904229D9AB +:10A430004888088140318A8A498A511A491E081879 +:10A4400086B21AE0287841007E48425A6968203175 +:10A45000497F4900405A1018A28E81B2207E012304 +:10A46000FFF735FB00280DD001280CD0022809D0B9 +:10A470006C486F49C43808F024FBA08E301A00B233 +:10A480000028DFDAD0E6A08E401CA086F5E7F8B5FC +:10A49000664C634F00251C34BF1E012819D00720CD +:10A4A000B91C487006F034F8604E304675761B30A3 +:10A4B00007F011F97878F8F7A5F8B5827868314691 +:10A4C0004088208701203C318875002000F003F986 +:10A4D000F8BD267E52495B48891E0A7853004A68B7 +:10A4E00011462031032E18D0267E022E21D0267E42 +:10A4F000012ED7D1497FC35A4900405A12891818F2 +:10A5000081B200230120FFF7E2FA0028CAD04548B3 +:10A510004749213808F0D5FAC4E76561E560497F0D +:10A52000C35A4900405A1289181881B200230320E7 +:10A53000E9E75626B65A6661497FC35A4900405A30 +:10A540001289181881B200230220FFF7C0FA0121F6 +:10A550002176DAE7F8B5324E0021B61D7078334C1B +:10A560000D46002801D075701AE03078002809D017 +:10A570000121684605F0C4FA684600782E490002B9 +:10A5800008F07CF970684118606806F012FB6060A2 +:10A59000257302206070607E2449FFF751FAA5827E +:10A5A00005F0B6FF214865761B3007F094F81C488B +:10A5B000801E4078F8F726F8002000F08CF8F8BDEF +:10A5C00010B5030008F082FB060A0E0406130916F4 +:10A5D000012000E0002000F037F910BD0120FFF756 +:10A5E00056FF10BD114903201C31087610BD00F044 +:10A5F0003DF910BD0B480E498E3008F062FA10BDCF +:10A6000070B50A4D002821D0054EB61D012828D06E +:10A61000022837D003480649AD3008F052FA03E665 +:10A6200072000020F6050000E99F0000501800208D +:10A630000C9E00007102000010270000F82A0000A4 +:10A64000B7891300142D01002E841300FFF782FF39 +:10A65000A97D9448002901D01F2100E00721417005 +:10A66000E2E5002490487470047600F046F8032078 +:10A67000F7F7C7F805F04CFF8B486C76401E07F0E3 +:10A680002AF8D1E5FFF766FF0120B07000F035F839 +:10A690000420F7F7B6F8C7E582490978022907D1FF +:10A6A00081490A78002A03D148600A6B10180863B0 +:10A6B000704710B57C4A00290BD0012906D0022929 +:10A6C00006D07A497A4808F0FCF910BD401E00E037 +:10A6D000401F906010BD744910B51C39C875002822 +:10A6E00005D0F5F781FE0220F5F778FE10BDF5F7ED +:10A6F0007CFE0120F5F77AFE10BD6A48002101704A +:10A7000001214170704710B504460020002907D090 +:10A71000684808F0B3F80146204608F0AFF8401C3E +:10A7200010BD10B500280AD05E49634A891E4968E9 +:10A73000C98B51435C4A126A891A08F09FF810BD10 +:10A7400010B558480078030008F0C0FA0414140348 +:10A750000A1401F035F900280BD05449574806E097 +:10A76000FEF737FF002804D054485049001D08F078 +:10A77000A8F910BD51484D490B30F8E710B505F068 +:10A7800053FF4849891E4968CA8B4B494A43464989 +:10A790000B6AD21AD33AFF2332330A63984202D2A9 +:10A7A0004748101802E0101A464A801808634648C5 +:10A7B0000A6B824200D81046086310BDF0B53A4CCF +:10A7C000032685B01C3CA67520461B30009001E096 +:10A7D00020BF009806F067FF0028F9D10025A57575 +:10A7E00030480178032903D0007800281DD021E0EB +:10A7F000A07E002803D12D49344808F062F9A77ED5 +:10A80000684606710221417105F030FF0290FF2079 +:10A81000F5300390012168460174A57601A93846F8 +:10A8200006F070FAFFF769FF0CE01E48801D817882 +:10A83000012906D00024009806F04DFF204605B0FF +:10A84000F0BD85700124F6E710B5002803D0002084 +:10A85000FFF71DFE04E01348801E4078F7F7D2FE94 +:10A86000FFF74BFF0020F6F7CCFF10BD10B50E4AE6 +:10A87000114B106AD0600B48801E4068C18B594351 +:10A8800011610146E0314B8843870C7839231C5411 +:10A890008B88C383CB880384098941840220107686 +:10A8A00010BD0000720000206C1800200C9E0000FB +:10A8B000C306000040420F00E20400004303000012 +:10A8C000A5F8FFFFD6F9FFFF1612000029020000CD +:10A8D000F8B5FEF7DEFA0646FEF74CFBF94D0746E3 +:10A8E0006879F94C002809D0012823D0022826D005 +:10A8F00003282ED0FF20F5A1BC3033E0F2481430FD +:10A90000FEF724FB002801D003200FE0EE481430AE +:10A91000FEF788FA002804D020696030007A002809 +:10A9200006D0E9481430FEF7E4FA012068711BE014 +:10A930000220FBE7E4481430FEF7DBFA14E0E248BB +:10A940001430FEF76FFA00280ED1FF20DFA1AE30E1 +:10A9500008E0DD481430FEF7F9FA002804D1FF20A2 +:10A96000DAA1B63008F0ADF86169F7220878104036 +:10A970000870AA79D207120F1043FB22104008700A +:10A98000EA79D207520F104308706B79EF22022B3D +:10A9900004D0012B07D0032B07D00CE0012E06D8E2 +:10A9A000002F04D007E07F1E3E43002E03D010404E +:10A9B0001022104300E010400870287C002811D0BD +:10A9C000687901280ED0BF484A38FDF7F5F8BD492F +:10A9D00020694A3978306269FDF757FB0020FDF79E +:10A9E00063FB04E00846FDF7E7F8FDF780FB6069CC +:10A9F0000078C00606D4A0690078C00602D4E079C9 +:10AA0000002802D0A079002801D0012000E0032016 +:10AA1000FCF7B6FF0320207001202071F8BDAA4882 +:10AA200010B51830FEF7B9FAA74C002802D0002064 +:10AA3000607004E001206070A2484A38A061A1481B +:10AA4000407C002802D06078002805D0A069FDF77E +:10AA5000B3F8FDF74CFB10BD9A484A38FDF7ACF847 +:10AA6000984A20694A3AA030A169FDF70EFB0120FF +:10AA7000FDF71AFB10BD10B5934900220869302379 +:10AA80008276C27601221A544030007C002803D01E +:10AA90000A700021022001E000210320FFF790FD51 +:10AAA00010BD70B5884C6079C20620460169084621 +:10AAB0004030002A01DA002202E0C28A4B89D21813 +:10AAC0000B46C282C0331A7E002A03D0428B4D89C6 +:10AAD00052194283627A002A03D03D2001F0A3F884 +:10AAE00052E08A7E032A4FD0227A002A13D05007E0 +:10AAF00001D4D00601D51E2036E0100701D53D2037 +:10AB000032E0D00705D1900703D470A1734807F055 +:10AB1000D8FF2A2028E060310978002905D0818BF0 +:10AB20004A1C8283C28B91420FD2597F062902D0E0 +:10AB3000197F062905D1018B4A1C0283C28B9142E1 +:10AB400003D2428B818A8A4201D322200CE0827B8D +:10AB5000408A002A0FD006280FD35A48C07B01280C +:10AB600001D03E2000E0082001F05DF82069807EE1 +:10AB7000032809D001E08842F5D20120207000218D +:10AB80000846FFF71DFD70BDFFF775FF70BD10B5DE +:10AB90004C494D48CA7B002A2BD0012A29D0022AD1 +:10ABA00027D0032A04D049A14D4807F08AFF10BDE1 +:10ABB000897B02290FD007291BD00069014640314B +:10ABC0008A8A498A511A891E89B2032900D303212E +:10ABD000028951180BE00069014640314A8A032A74 +:10ABE00001D2018903E04288898A5118491C818079 +:10ABF00010BD0069F5E700B5030008F067F806042A +:10AC0000070B0F12121700290ED00FE0491E022960 +:10AC10000AD90BE0491F012906D907E0072903D00B +:10AC200004E00A390C2901D8012000BD002000BD34 +:10AC3000FEB5054624481430FEF769F9002804D112 +:10AC40003D2022A1400107F03CFF1F4C6069FDF749 +:10AC5000E5FC03216069FDF70FFD6069EF220178D3 +:10AC6000114001702946FDF74BFD002601272B00FE +:10AC700008F02CF80E5D5D085D1D6161155D4D5D90 +:10AC8000613D385D20697121095C002901D00621F0 +:10AC900001E0C030417E6069FDF7FDFD4BE0A06939 +:10ACA000FDF758FD01466069FDF766FE43E0216946 +:10ACB0006069D031FDF729FE216960699531FDF7A2 +:10ACC00032FE38E006190020800000207372635CB9 +:10ACD0006C6C5F736C6176652E630000610200002E +:10ACE0006F08000006216069FDF742FE23E0E0687E +:10ACF00001786069FDF726FEE06881886069FDF7EC +:10AD000023FEE06841886069FDF722FE13E00096AB +:10AD1000019620696030007C002803D069460878DD +:10AD20003843087069466069FDF738FE03E0FA4968 +:10AD3000FA4807F0C6FEFEF7F4F8002804D1F748F9 +:10AD4000F549801D07F0BDFE0C2D07D0072D04D05E +:10AD500020695C210E5260300770FEBD20694030D2 +:10AD60000683FEBDF0B5EE4CDC2021698DB0405C61 +:10AD7000042809D0052834D16031487A002829D028 +:10AD800001204874022026E01022EA31684600F0D3 +:10AD90007AFF21691022C83104A800F074FF6846C8 +:10ADA00005F007F8216908AA6CCA0F46CB67783707 +:10ADB0008A670846FE608030BD60074620376CC752 +:10ADC0000023036343630120A0310876D54948740A +:10ADD000052000E00D20FFF72BFF21690020C03186 +:10ADE00008770DB0F0BDF8B5CD481430FEF78FF8F8 +:10ADF000002842D0CA4C207A00283ED12069002584 +:10AE0000C030007EC74E00280BD0B17B0120FFF779 +:10AE1000F2FE002805D1B17B0420FFF7ECFE0028EC +:10AE200006D020690127C030407F062807D00CE0FB +:10AE300020695A210D526030457402202FE0B17B09 +:10AE40000420FFF7D8FE002810D0B07B030007F0E5 +:10AE50003DFF173F3F3F3F1E3F3F3F3D3F203F3FAE +:10AE60003F292C3F3F3F3F3F3F2F3F0020696A2152 +:10AE7000095CC90702D0C0304577F8BD0C20FFF748 +:10AE8000D7FE20696030817A39438172F8BD07208E +:10AE900005E0FEF7ACF80028F8D075740B20FFF73A +:10AEA000C7FEF8BD00F0FEFEF8BDFFF75BFFF8BD82 +:10AEB0002069002180308160C160057437740620EC +:10AEC000FFF7B6FE206960300570F8BD0920E6E79F +:10AED00000F0B2FEF8BD70B5924DA87B072831D1C5 +:10AEE0008F4CDE2220694188125A491C914229D197 +:10AEF000217A002926D10146E0318B88C28B93420A +:10AF000007D1CA88068CB24203D10A89468CB24264 +:10AF10000AD0844A8689283A9680D380CB881381C8 +:10AF2000098951810121117001221146FDF784FD2B +:10AF300000210420FFF744FB21690020C03148773D +:10AF4000A873E87370BD70B5764CA07B162803D04B +:10AF50007149754807F0B5FD7148002102697148D3 +:10AF60006032117211702838067C0B250123002EE7 +:10AF700006D0027B002A12D14573817303730EE061 +:10AF8000567A002E06D051722288828281740C2259 +:10AF9000027404E022888282817483750574A1732F +:10AFA00070BDF8B55E4DA879800723D5287A0028B2 +:10AFB00020D15C4C0120A17BFFF71DFE002819D198 +:10AFC00068690026C0780127030007F07FFE0E594C +:10AFD0005908592E3B4F0A591459205245590220FD +:10AFE00021E0A07B042804D04F484B49333807F0B8 +:10AFF00068FDA673F8BDA07B082804D04A484649DE +:10B000002D3807F05EFD286960300670F1E7A07BFF +:10B010000A2804D015204049800107F052FD286914 +:10B02000603007720B20A073F8BDA07B0E2804D0FF +:10B030003D4839491F3807F044FD286960300772E0 +:10B040000F20F0E7A07B0F2804D03748324918388A +:10B0500007F037FD1120E6E7A07B0F2804D0324827 +:10B060002D49123807F02DFD1320DCE7FFF76BFFA9 +:10B07000F8BD2869C030417F0629F9D14677F8BD6F +:10B0800029482549813007F01CFDF8BD10B5254C35 +:10B090000020A17BFFF7AFFD002804D1204801224A +:10B0A000017A114301720420A07310BD10B51C4C2D +:10B0B000DD212069095C002903D0217A0122114396 +:10B0C00021726030807A800715D4A069FDF744FCB6 +:10B0D00021696031C872A069FDF740FC21696031C7 +:10B0E0008881A069FDF73FFC216902226031C88197 +:10B0F000887A10438872206900220146C0310B7F94 +:10B10000062B13D06A231B5CDB0703D106234B7786 +:10B110004030028310BD0000CCAC0000E40700000A +:10B120008000002006190020660500000A77F1E77C +:10B13000F8B5FE48817B0020FFF75DFDFC4C012641 +:10B14000002807D120696030407A002802D1207A97 +:10B1500030432072216900255C204552602046540E +:10B16000C831A069FDF7B9FB2169A0699131FDF7EC +:10B17000C3FB2169042208469131B93007F004FB72 +:10B18000EA482838017C0827002906D0017B0029DD +:10B1900012D14773857306730EE0216905468989CC +:10B1A0004182E249A0691439FDF77FFBDF49A069BC +:10B1B0000C39FDF787FB2F74DC480E218173F8BD35 +:10B1C00070B5DA4D0020A97BFFF715FDD84C00289B +:10B1D00003D1207A012108432072A069FDF721FBE9 +:10B1E00000280ED0A069FDF717FB2169DE2250521E +:10B1F000498800F0A2FD002806D0282000F013FDA9 +:10B2000070BDFFF743FF70BDA069FDF7FFFA21692C +:10B21000E0310870A069FDF7F2FA2169E031488059 +:10B22000A069FDF7D1FA2169E0318880A069FDF7B6 +:10B23000D4FA2169E031C880A069FDF7D7FA216905 +:10B24000E03108810720A87370BDF8B5B84CA0792B +:10B25000C0076ED0207A00286BD1B44D0120A97BA5 +:10B26000FFF7C9FC002853D1A0690027C17802224A +:10B2700001260B0007F02AFD0D161308354A4A383F +:10B280004C474A1929444A00FDF707FB2169DA2295 +:10B290005054AE735C20475260310E7038E000F0BD +:10B2A00057FD35E0FFF78CFF32E0A97B0020FFF768 +:10B2B000A2FC002802D1207A3043207220695C2150 +:10B2C0000F52603006700A2018E0A87B0B2802D0CD +:10B2D000207A104320722F742069603046720C204F +:10B2E0000CE0FFF725FF13E0A87B112802D0207A9D +:10B2F000104320722069603007701620A87307E0A1 +:10B30000FFF7D4FE04E000F0F0FC01E0FFF7BEFE22 +:10B31000FDF759FE002803D18649874807F0D1FB85 +:10B32000206900238030016B426B491C5A41426303 +:10B330000163F8BDF8B57D4F787C002802D1387CD8 +:10B34000002801D0FCF7D3FEFCF760FCFCF754FCAE +:10B350000020FCF715FBFCF79CFBFCF75CFCFCF702 +:10B36000DCFBFCF724FCF87B01260025704C002850 +:10B370000FD16079C10705D00220F87320694030F1 +:10B38000857302E0800717D5FE7300210120FFF7C7 +:10B3900017F9F87B012802D0022808D00CE0607968 +:10B3A000C00709D00220F8732069403085736079A6 +:10B3B000000701D50320F87300F0EEFCFFF713FD42 +:10B3C0002079002801D03D8102E03889401C388175 +:10B3D0006079C007206904D072210D544030458245 +:10B3E00003E04030418A491C4182E079002806D0C0 +:10B3F00021696031887C022806D8401C8874206945 +:10B400006030807C022804D93D817D8120696030D4 +:10B410008574B97B0020FFF7EEFB002802D1B87BD2 +:10B4200006284BD120690146C0310A7F062A45D043 +:10B43000497F062942D03D49C97B03293ED160306E +:10B44000807C00283AD1FDF71BFD002836D0FDF79F +:10B4500091FD002832D02169C88801282ED90A46DA +:10B460004032D673908A578A831E9F4201DB0120A7 +:10B4700002E0C01B401E80B22C4B0F8C1B89BB42CC +:10B4800001D3012302E0FB1A5B1C9BB2984200D956 +:10B490001846012800D1D5732A22525C002A11D007 +:10B4A000224A898D52898A4201D3012102E0891AF8 +:10B4B000491C89B2884205D9084603E02169012068 +:10B4C0004031CD7321694A8810180881FFF75FFB6E +:10B4D0002069122215490C3007F056F9FFF7E1FAFE +:10B4E000FEF77EFF002808D010482838817F002909 +:10B4F00003D121698989018486770D481830FDF7C9 +:10B50000AAFD00280FD0A06900788007800F0128CD +:10B5100009D0022807D0FDF7BEFD002803D1054958 +:10B52000064807F0CEFA2069403009E006190020ED +:10B5300080000020CCAC0000DF040000720300009B +:10B540000574F8BD70B5FE4C607900283DD0FD4D06 +:10B55000022811D1FDF775FC002804D17320FA49A7 +:10B56000000107F0AEFA2A69002380329068D168A2 +:10B57000401C5941D16090600026667120790128F5 +:10B5800004D12671A87910210843A871E078012818 +:10B5900016D1E670A87908210843A871FDF7E0FCF0 +:10B5A000002804D1E920E849C00007F08AFA296997 +:10B5B000002380318A68C868521C58418A60C8607C +:10B5C000A079012802D00120A07170BDA67170BDC4 +:10B5D000F8B5DC4CDA4DA269002710780421830706 +:10B5E0009B0FE8790126012B11D0022B0FD0032BE2 +:10B5F00001D0207A2FE06178002905D1AE70A179C1 +:10B600003143A17122E0EF71F8BDEE71F8BD5278BF +:10B61000D3061BD060780028F8D1D006C00E1B28B6 +:10B6200017D8607908436071FDF7CDFC002803D17D +:10B63000C549C64807F045FA206900238030026BEF +:10B64000416B521C594102634163E8790128DCD106 +:10B65000D9E7207A102108432072F8BD70B5B84DA3 +:10B660000446283D287B002600280AD0002976D1F0 +:10B67000667010202070687BA070A87BE0702E732D +:10B680006DE02878002810D0002968D16670072066 +:10B69000207005E02E700A22A91CA01C07F074F887 +:10B6A00028780028F6D1A67059E0287C002839D0E7 +:10B6B000002954D1297CA3480B0007F007FB0D2E6D +:10B6C0002E2E2E2E2E2E2E112E2E22082E0066709D +:10B6D0000C212170A97CA17000698089A0801AE0EA +:10B6E00008216670217000690A468089944960804B +:10B6F0001439201D07F048F891484A38C08FA081BE +:10B7000009E066700B212170A97CA1700069808915 +:10B71000A080A87DA0712E7421E08B498C4807F091 +:10B72000D0F91CE0AA7F86480838002A08D00029F2 +:10B7300015D166701121217000886080AE770EE00F +:10B740007F4A083A9378002B0BD0002907D1667006 +:10B750001221217081886180C088A08096700120AC +:10B7600070BD002070BD77480078012801D00C2002 +:10B770007047734900202839087008730874887767 +:10B78000704770B56F4C064620780D46002804D0EF +:10B790006F486D493F3007F094F90120E660E07290 +:10B7A000E5612070FFF7DFFF002804D09320664991 +:10B7B000000107F086F970BDF8B5624C21780129C7 +:10B7C00002D12178012901D00C20F8BD014605469F +:10B7D000206112220C315A4806F0D6FF012740356D +:10B7E0002F74574D2888FDF712FB002827D0288892 +:10B7F000FDF7C8FB002822D02888FDF77DFB002834 +:10B800001DD02888FDF797FB002818D0FCF7C3F956 +:10B8100020690026C088002824D04A481430FDF74B +:10B8200076FB00281ED02069C030007E002819D089 +:10B83000A97B0120FFF7DFF9002802D012E01220D7 +:10B84000F8BDA97B0420FFF7D6F900280AD12169A9 +:10B850005A20465260314E740220FFF7E9F9206900 +:10B860004030C67320694189491E8AB229898918E6 +:10B870002981297B002902D06E812E7302E069891B +:10B8800089186981014640314B8A9B184B82C388D5 +:10B89000012B01D85B1CC380002A01D072221654F0 +:10B8A000AA7B032A16D0C97B002915D02989008CD0 +:10B8B000814211D2FDF7E4FA00280DD020692A2137 +:10B8C000095C00290BD06989808D814207D3A6705D +:10B8D000E7700CE0A7700AE0A670E67007E06889E0 +:10B8E0000021401C6881A7700520FEF769FE2069D1 +:10B8F0004F210E54A178002930D12030807A0028C1 +:10B9000000D06E810120FBF71BFF20693630FCF769 +:10B91000F8F820693230FCF70EF8E169002008568B +:10B92000FBF7D5FF0120FCF733F9FBF78EFFFCF79F +:10B930002BF90120FCF76AF82069406E0AE000004C +:10B940000619002080000020CCAC00007B0700001E +:10B95000E7080000FCF733F9FFF761F8A87B05283A +:10B9600001D0062816D12069DE224188125A891A90 +:10B9700009B200290EDB01460522E0312430F4F73C +:10B9800023FC012202212069FDF756F82069C0300E +:10B990004677AE7320694189FDF7FDF82069403094 +:10B9A000407BFBF7D1FF6671E671A6712672A67225 +:10B9B0006672267102202070FCF7F9F80020F8BDAD +:10B9C00010B5FE4C2078022801D00C2010BDFCF7E9 +:10B9D000E2F8A078002802D0FFF7ACFC15E000F0F8 +:10B9E0001AF920692030807B012809D0FCF736F94C +:10B9F000FBF730FFF4F7F7FCE07A012803D004E00E +:10BA0000FCF734F9F4E707F05BF9002010BDEB49CF +:10BA1000C872704710B5E94C2078032803D0E84974 +:10BA2000E84807F04EF8E84801218278002A06D05D +:10BA3000002282700171A27904231A43A271626903 +:10BA40001378DB439B0707D1C378002B04D1C17067 +:10BA5000A07902210843A0711078C00606D4A0691D +:10BA60000078C00602D4E07900280CD06078002865 +:10BA700009D1A079002806D1FEF7A2FC002802D047 +:10BA8000207A002802D0FFF755FC03E0FEF7C7FF3D +:10BA900000F0C1F82078012806D0F4F7A4FCE07A81 +:10BAA000012801D1FCF772F910BD38B5C34C2069EB +:10BAB0002030807B012820D1A07A00281DD1684643 +:10BAC000FCF7DCF8002818D021692F20405C012801 +:10BAD00010D1BD4A0D236D460020D356285683420F +:10BAE00008D050738989283A918411462031887191 +:10BAF00001208870A07A401CA07238BD70B5AF4C90 +:10BB000006462078042804D0AE48AD49553006F0EA +:10BB1000D8FF607910210843AB4D6071002E47D0EB +:10BB2000FCF7FDFA61780126084300280ED1687CF5 +:10BB300000280BD0A0694178C90607D00078E979C0 +:10BB40000007C00F884201D1667247E0E078002804 +:10BB500009D0A0694178C90605D10078C00602D491 +:10BB6000FFF7A3FF3AE0FFF7A0FFA069A9790078EB +:10BB70004007C00F884205D0FFF7E4FC6079082138 +:10BB800008436071A069E97900780007C00F884216 +:10BB900001D1FFF71DFD6079304360710020E07135 +:10BBA000A079000702D5A87B022817D0207A13E0DD +:10BBB000022108436071E079401CC0B2E0710128A5 +:10BBC0000CD8687C00280CD07F484A384078C106E1 +:10BBD000C90E052905D2C006002802D0FFF7AAFB2E +:10BBE00001E0FEF775FE2078012806D0F4F7FBFB94 +:10BBF000E07A012801D1FCF7C9F870BD10B56F4893 +:10BC00000078042804D06F486D49B73006F059FF1A +:10BC1000FFF790FB10BD10B50720FBF7B1FE674999 +:10BC20000420087010BD6549312209695054664AE4 +:10BC3000032090738876704710B5604C2069C0303F +:10BC4000007F00281ED06048817B0020FEF7D3FFD4 +:10BC5000002817D02069DC21095C0B0007F036F8BA +:10BC6000071212121212120512006030807AC007F9 +:10BC700008D10C20FEF7DCFF206901226030817AB8 +:10BC80001143817210BD10B5002A0AD0002306E0CE +:10BC9000D41A6418203CE47FC4545B1CDBB293428A +:10BCA000F6D310BD10B503F02AFF0C281CD3434C6B +:10BCB00008212069D03003F023FF002806D0206936 +:10BCC0000421953003F01CFF002803D13C493F4874 +:10BCD00006F0F7FE2169042208469531BD3006F0D2 +:10BCE00053FD0420FEF7A4FF10BD7CB5364E0020A6 +:10BCF000B17BFEF780FF0125304C002802D1207A6D +:10BD0000284320726946A069FCF74EFE6846007819 +:10BD10000021C207D20F684602702069002A02D0B3 +:10BD20006030057401E06030017420695C221152BA +:10BD3000603005700820B0737CBD401A244900B201 +:10BD4000884201DC002801DC012070470020704798 +:10BD500070B51D4D0020A97BFEF74DFF174C002844 +:10BD600003D1207A012108432072A069FCF78EFDDF +:10BD70002169DE2250524988FFF7DFFF002803D0F7 +:10BD80002820FFF750FF70BD2169A069E031FCF762 +:10BD900071FD0520A87370BD70B500F054F8074C14 +:10BDA000094D6079400716D5A97B0520FEF723FFD2 +:10BDB000002810D0207A082108430BE080000020E2 +:10BDC000CCAC00001D0A000006190020640600002B +:10BDD000FE7F00002072FFF738FA00F012F8FFF73C +:10BDE000E0F8A079C00609D5A87B030006F06EFF35 +:10BDF00006060606060604060620A873FFF76BF87B +:10BE000070BD10B525488179490714D5017A0029FC +:10BE100011D12349897B0B0006F058FF080D050D51 +:10BE20000D0D0E0D100D0069002260210A54C03066 +:10BE3000807EFFF7F8FE10BD012100E002210069BD +:10BE4000C030417710BD10B51448817909071DD560 +:10BE5000017A00291AD1124A947B230006F036FF9A +:10BE60001416160B1616161616161616161616167F +:10BE7000161616161716006960300170407C0028EF +:10BE800001D0062000E01620FFF7CDFE10BD0069AE +:10BE9000603001720170917310BD000080000020BD +:10BEA0000619002010B5031D03600020521E04E097 +:10BEB0005C181C60401C2346C0B29042F8DB002096 +:10BEC000186010BD01460A680020002A02D0104602 +:10BED00012680A60704702680A60016070470000DB +:10BEE00000B51A2822D00ADC030006F0EFFE0D117F +:10BEF0001F131F1F191915171F1F1F1B1F002A288B +:10BF000014DD3A38030006F0E1FE030F11091100B9 +:10BF1000002000BD1E4800BD042000BD0D2000BD56 +:10BF20000F2000BD082000BD112000BD032000BD72 +:10BF300010B50C46F5F7C8FB00281AD02046F4F7D8 +:10BF400061FE002812D020780E280BD00F2809D0CF +:10BF5000022807D0032805D00EA1772006F0B1FDF6 +:10BF6000002010BDA078FFF7BBFF10BD09A17D2008 +:10BF7000F4E708A18320F1E710B5F4F7CBFD10BD7D +:10BF800010B5F4F73FFE10BD10B5F4F721FE10BD5B +:10BF9000013000007372635C686F73745F6863697B +:10BFA0002E630000F0B597B00021032004F0F7F8ED +:10BFB0000025FE4E022775807574347C12E0F0680F +:10BFC000E1004018818800290CD0858069460F70F7 +:10BFD0004D7001680291808869468880002168461A +:10BFE000F8F7F0FD2046641EE4B20028E7D117B050 +:10BFF000F0BDEE4BD86019741A80D3E7EB49EC4BD7 +:10C000004A8800201A4200D00120497C002901D032 +:10C01000082108437047F7B504460E460078012111 +:10C02000E34A8140521C114098B0E04A0091518887 +:10C03000E04B994205D0009B002B05D0DC4B194208 +:10C0400002D001201BB0F0BD009BD84A194351809B +:10C050001A9D002D11D00020287022781A980027F0 +:10C06000401C130006F032FE10EF0D152137555D10 +:10C070006A39AFAB85B3EEEDECEF0B28EDD00420C1 +:10C08000E0E702212970A1880170090A41700320AC +:10C0900093E004212970A1880170090A4170E188A8 +:10C0A0008170090AC170052087E006212970A188E6 +:10C0B0000170090A4170E1888170090AC170218903 +:10C0C0000171090A4171A289E81D216906F05CFB32 +:10C0D000A089C01D71E0082129702178082901D1AB +:10C0E00010212970A1880170090A4170E1888170CE +:10C0F000090AC1700520308020466A1D01A9083058 +:10C1000003F047FB00287DD1694630880979401843 +:10C1100053E00A212970A1880170090A41700320A7 +:10C120000AE00C212970A1880170090A4170E18898 +:10C130008170090AC170052030809DE0A088844686 +:10C140004000401C81B2308888425BD3052959D316 +:10C150000E202870002008E0A36842009B5A521964 +:10C1600053701B0A401C937080B26045F4D3318039 +:10C17000B6E08E49487C002873D0401E4874C868D9 +:10C1800021790822C9004518A9882868401808386C +:10C19000A16806F0F9FA0221684601710021417197 +:10C1A00028680390A98868460181002101A8F8F752 +:10C1B00009FD0020A880002E00D0308090E0297872 +:10C1C000802211432970297840221143297029784F +:10C1D0008909890112312970A1880170090A417009 +:10C1E000E288E81CA16806F0CFFAE088C01C308025 +:10C1F0002878410640D5C00972D0012168460171F6 +:10C20000002100E02BE041713188ED1C091D018106 +:10C210001A980390E08840190490001D634D059022 +:10C22000297C68460176002101A8F8F7CBFC074677 +:10C2300030880C303080022F06D0002F50D060E0C4 +:10C240003CE032E01CE059E06946097EE868CA003B +:10C2500080182A7C914202D28188002902D00427CA +:10C260004FE02EE0697C491C69741A99016031889D +:10C2700081800020308044E04C48A188C1802FE0BC +:10C2800029788909890116312970A1880170090A64 +:10C290004170E1888170090AC1702289681DE168D6 +:10C2A00006F072FA2089401D46E72878800980014F +:10C2B000183028702079687002207EE73B480A0415 +:10C2C00001D405271DE00289A3889A4201D00627E0 +:10C2D00017E01E222A70012249043280490C418055 +:10C2E000009800280DD0314D002228881146830087 +:10C2F000032003F0B2FE2078287107E00020308090 +:10C3000003272A48009942888A434280384699E6A2 +:10C31000F7B59AB002000C4606D0172A04D8234875 +:10C32000244B4088984202D107201DB0F0BD2378ED +:10C330005D0601D4DB0901D00820F6E700236D4635 +:10C340002B706B701D462378611C9F06931E1893FB +:10C35000531E19939BB2169302AB1793134BBF0E48 +:10C36000DE883B0006F0B2FC208511F15EF16BF136 +:10C37000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F127 +:10C38000EBF1EAF1E9F1E8F185F1052A71D1042236 +:10C3900069460A7005490A7969460A71E178A37805 +:10C3A0000A021A436946CA80227905E0181900205A +:10C3B000FE710000FFFF00004A7061788906890E57 +:10C3C0000C2923D009DC891E0B0006F07FFC091321 +:10C3D00052155219521B521D520012291CD004DC56 +:10C3E0000E2915D01029D1D114E0162916D01829FC +:10C3F000CCD115E0800700E04007002839DA2AE1B7 +:10C400000007FAE7C006F8E78006F6E74006F4E71B +:10C410000006F2E7C005F0E7C004EEE78004ECE7B1 +:10C420004004EAE7800724D5032AAFD105206A46F5 +:10C430001070487809780002084390800BE14007AB +:10C44000F1D5062A15D31898617880B2012902D057 +:10C4500002299BD101E0022700E01027062269464D +:10C460000A7000228A8001AEA11C0236BA1C179203 +:10C4700018E0B6E04A780B7812021A433280801E28 +:10C48000891C1890B21C1691384603F05CF9169975 +:10C4900018986B469A88C919C01BB61D521C9A8001 +:10C4A000179A80B28242E5D900289CD1D3E00007D8 +:10C4B000B9D51998694682B2072008700020888093 +:10C4C000601C891D11E0437806781B0233430B8002 +:10C4D000C37886781B0233434B806E46121FB388A5 +:10C4E000001D091D5B1C92B2B380042AEBD2002A06 +:10C4F00077D1B0E0C00674D5022A72D3189808210B +:10C5000082B2684601700021C18063780371A01C6B +:10C5100017990EE04678077836023E430E80861C57 +:10C520004E606F46D21AFE88C0180831761C92B24F +:10C53000FE809342EED9DAE76FE076E065E051E005 +:10C5400046E01EE014E00AE000E0A0E0800648D5E6 +:10C5500009206A46107096801698D0800FE0400639 +:10C560003FD50A22684602708680169AC28006E08D +:10C57000000636D50B206A461070169890800291FE +:10C5800069E0C0052DD5022A7FD318980C2182B20C +:10C59000684601700021C18063780371A01C17995F +:10C5A00013E04678077836023E430E80C6788778D7 +:10C5B00036023E434E80061D4E606F46D21AFE88FC +:10C5C000C0180831761C92B2FE809342E9D98EE7FA +:10C5D000C0045AD5012A58D10D21684601708680C1 +:10C5E00039E052E0800450D5052A4ED30E23684628 +:10C5F00003708680C8788B78010219436846C18031 +:10C60000521F0281601D039025E040043DD5012AA0 +:10C610003BD10F20694608701DE0030435D44B78E8 +:10C620000E781B023343244E3381032A2DD31B2F54 +:10C6300027D011236E46337001261F4BF60330437B +:10C64000588048780B780102194368468180D21ED1 +:10C65000C280E01C029020788006800E1B280AD041 +:10C660001D2808D00021032003F099FD12484188BD +:10C67000C90BC903418068461C99F8F7A3FA2846FC +:10C6800053E610206B461870DBE70725F7E708250F +:10C69000F5E700B50022D243074997B04A80032846 +:10C6A00007D1032268460270097901710021F8F769 +:10C6B00089FA17B000BD000018190020FFB589B035 +:10C6C0000020019009981027FE4C1E4615460828A8 +:10C6D00006D0E06901F05EF8002809D03770BEE0AE +:10C6E000288809213843108013980227017016E02A +:10C6F000E169012088710521E269C9029180E1693F +:10C700008872E169F0480881E1690020887328880F +:10C7100020210843288011211398042701701398C1 +:10C720000225801C0290307806900A203070E5487F +:10C730001830049001F00DFA0020059020462C30AE +:10C7400003906DE00998102808D1022D06D00199B8 +:10C750000298A28D401A8270110AC170E08D0A9968 +:10C76000884202D901F0D5F806E0884204D1069843 +:10C77000002801D030701CE00298E18D0170090A98 +:10C78000417012980088401BC01B82B2FF20C01B62 +:10C79000904200D2024607A8009002980021C319D7 +:10C7A000E08D01F041FA3070002805D0C0B2832836 +:10C7B00058D0E08D20833EE00598002804D0206CFE +:10C7C00000790A282CD336E06846808BC119C9B29B +:10C7D0000191022D0DD01399019A4978914202D10D +:10C7E000228F824208D00191206C0178032908D061 +:10C7F00023E0084613994870206C0178042906D07C +:10C8000007E000790A2818D20120059008E0E18DA0 +:10C81000818002990198081802900198281885B221 +:10C820000399049801F098F9002804D1129800881F +:10C83000401BB84286DA022D0DD00998102806D187 +:10C8400002990198A28D081A8270110AC17012987B +:10C85000058000203070206C0078032802D0002072 +:10C860000DB0F0BD0220FBE7F8B5964A0026126D28 +:10C87000002A2ED0401F934D84B24035E88A2346CB +:10C880000833AF8AC318BB4222D88B784F781B027B +:10C8900010183B4303701B0A43700B79CF781A02C0 +:10C8A0003A438270120AC2700471220A427122460F +:10C8B000491D801D05F068FFE88AA41D001980B29B +:10C8C0008049E882096D002208180270427000E079 +:10C8D00009263046F8BD30B57A4B028840339B8A32 +:10C8E000934213D9774B1C6DA3185C781D782402F2 +:10C8F0002C430BD05C791D7924022C436404640C16 +:10C90000A41D1219028000200B6030BD822030BDB2 +:10C91000F0B585B0074600266846068155E00198C7 +:10C92000417802780D0215434179027908021043DB +:10C9300000044AD43D8003A8002301220090520243 +:10C940001946284601F070F9040044D1684601896F +:10C9500001820198417902790902114343780278F2 +:10C960001C021443AC421CD10A041AD44A0401210B +:10C97000520C89030A430096C1788078090201436A +:10C980000023204600F0C9FF040010D10199487926 +:10C990000A79000210430122D20310430871000AF1 +:10C9A000487101A904A8FFF796FF0400D1D00199AE +:10C9B00000964878097800020843694600238A896E +:10C9C000194600F0AAFF822C05D101A902A8FFF7A1 +:10C9D00082FF0400A3D06846068109E001994879E6 +:10C9E0000A79000210434004400C0871000A4871A3 +:10C9F00001A902A8FFF76FFF0028EFD0822C02D018 +:10CA0000204605B0F0BD0020FBE7F7B584B0144622 +:10CA10000646002700F079FF2A480025006D00280F +:10CA20002FD0059801282CD12046FFF771FF070071 +:10CA300027D1002E29D06846058118E00199487851 +:10CA40000978000208432080019B009558791979E4 +:10CA50000202D8780A4301029F78587839431F7838 +:10CA600000029B1D384300F058FF002805D101A9A2 +:10CA700002A8FFF730FF0028E0D0822800D1002074 +:10CA80000746002E01D00F48056500F042FF3846EA +:10CA900007B0F0BDF0B597B00021042003F07FFB94 +:10CAA000084F00243D467C8040356C73AC73287B76 +:10CAB000B96CC00008380E18B08800280DD00120CD +:10CAC000694603E02C190020012800000870306836 +:10CAD000019000216846F9F77AFBB4803C65AC828E +:10CAE000EC8217B0F0BDFE4B9864184640300173DD +:10CAF0001A803838D861CDE7F949002049880A07FB +:10CB000000D501200A06120F01D002221043CA05E7 +:10CB100001D5042210438A0501D51022104349058E +:10CB200001D520210843EE494031497B002901D03D +:10CB3000082108437047FFB5A7B00400289816469F +:10CB40001B9022D00178E6484D0642882292024688 +:10CB500040320092002D14DB8A06920E1E2A0ED05F +:10CB6000229A5205520E10D13288172A0DD3009AFC +:10CB7000927B002A09D1DB4D229AAA4205D0CA092C +:10CB800006D08A06920E122A02D003202BB0F0BDE6 +:10CB9000D348826C0098007B2590C000083810189C +:10CBA0001F9048060CD40098407B002808D00099BC +:10CBB00088731F99289808601F9884800220E5E7F1 +:10CBC000002718A90F7069460F72C54902AA0A64A6 +:10CBD000309A4A6410A90F850F861B981D4600786D +:10CBE00020908106BE4B601F24901A462C32219261 +:10CBF0002898DA691833890E1E93401C0B0006F042 +:10CC000065F81FFDFD11FD1AFD90FDFCFDFBFDFA11 +:10CC1000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFD5B +:10CC2000FDF5FD00032C7BD10320287017226A70CC +:10CC30000022AA70E0E2052CF5D1417802780902C1 +:10CC40001143A74B10AA19831185C278807812026C +:10CC500002435A8300297DD091427BD80021184697 +:10CC600081720181491E01841E9800F072FF052027 +:10CC70002870A81C1D900220009021991E9800F099 +:10CC80006BFF002803D047E018A90870F0E2944831 +:10CC90002030807C012803D002206870102002E040 +:10CCA00001206870022022908D48303023900022AD +:10CCB00020A9239802F06DFD00282AD120A8007831 +:10CCC0002299814225D132880099801C511A8142D3 +:10CCD0001FDB83481D99C08D0870000A48701D989D +:10CCE00020A9801C1D9000981D9A801C00902398FC +:10CCF00002F04FFD20A909781D9840181D9000985A +:10CD0000401880B2009021991E9800F025FF00285D +:10CD1000CDD0009802288DD10A2018A908706CE2A5 +:10CD20006DE0072C6BD341780378090219436C4BF3 +:10CD30008446198310AB1985C37880781B02184389 +:10CD4000674B0029588305D0814203D8012118463A +:10CD5000817200E0A4E061464B7909791B020B4324 +:10CD6000038100218173104600F014FD00280FD1CB +:10CD70005B480121C26991710522C369D2029A8080 +:10CD8000C2699172C26958491181C06900218173D9 +:10CD90005349E01F08841B98C01D48621E9800F08C +:10CDA000D8FE07202870681C009001201D904C4878 +:10CDB0000021C18530E01D98012815D04848C1697F +:10CDC000897901292FD000981038C17B807B090216 +:10CDD000014300980170090A41700098801C00907E +:10CDE0001D98801C80B21D903D4809E013E2BEE111 +:10CDF0007AE1D8E00DE2A0E080E03BE01EE2B6E0A0 +:10CE0000C18D00980170090A41700098801C009043 +:10CE10001D98801C80B21D9021991E9800F09CFEE8 +:10CE2000002802D006E0818DD3E731881D98081ACA +:10CE30000428C0DA1D98012800D16DE72848C1698F +:10CE40008979012903D0828D26498A4205D1818DB5 +:10CE500000980170090A417009E000981038C17B00 +:10CE6000827B0802009910430870000A48701D98E0 +:10CE7000801CC1E1072C01D0152C78D141780378B2 +:10CE800009021943164B198310AB1985C3788078B2 +:10CE90001B02034312480029438301D0994201D960 +:10CEA0000120F1E60E480121817200210181817388 +:10CEB000052C07D024981B99C0B2491D02F043FCF1 +:10CEC0000028BAD100200649C04308841B98009668 +:10CED0000195007818AB8006800E1CAA002105E0A1 +:10CEE0002C190020FFFF000001280000FFF7E6FBDF +:10CEF0000746FE4810A9008B08857EE1032CBCD1B3 +:10CF0000402210A90A86417802780802F7491043A6 +:10CF1000088310A9088520A9009131886B1C491E3F +:10CF20008AB2002100F080FE18A90870002830D1D4 +:10CF30000B20287020A8008833E0052C9DD180218B +:10CF400010AB1986014640780B780202E7481A4375 +:10CF50000283CB7889781B021943E44B104619846D +:10CF600010AB1A85E24A914202D307208CE697E083 +:10CF70003F23DE4A9B021943118421AA0092328882 +:10CF80006B1C521E92B200F04FFE18A908700028C8 +:10CF900003D08328B1D102272FE10D20287020A8CB +:10CFA0008088401C28E120990C22C9095143C91CE2 +:10CFB0001E91A14204D92098400671D500201BE1A2 +:10CFC000417800780902014310A801851B98007878 +:10CFD00042062898C01C1D90002A62DA05206A4685 +:10CFE00010721B980078C00944D00822684602726B +:10CFF0008181A01A87B268468782289806901E9879 +:10D00000201A81B26846C1811D980490401805F02D +:10D010001CFC079006982599C0190890491E08A87D +:10D02000017102A83099F9F7D2F807460021684645 +:10D030000172002F1BD0022F18D1009808A9007B85 +:10D040000979401E884210DDA848289A836CC900DF +:10D050005A50816C08A80079C000001D0C5200983D +:10D060000099407B401C4873C7E00527EAE0062092 +:10D0700069460872002000901E980021201A209016 +:10D0800082B21B9B10A8DB1C008D00F046FC014601 +:10D0900018A80170002268460272832903D003E0B9 +:10D0A00093E00720E4E702271B98007840060ED59E +:10D0B0008E484188C90506D510AA018B128D914270 +:10D0C00001D100214162002018A9087094E0FF21DD +:10D0D000013110A80186018D8448018320990184C3 +:10D0E0001D994162132085E0052C6ED341780378A9 +:10D0F0000A021A4310A90A859446092269460A724F +:10D100000021009101222499D20311438AB2C178EF +:10D11000807809021B9B01435B1D604600F0FDFB0C +:10D1200018A90870002269460A720122520210A949 +:10D130000A86832802D0002805D099E06B48098D23 +:10D14000018302277EE06948006D002807D0204651 +:10D150001B99FFF789FB18A9087000284DD12B46B1 +:10D16000324620461B9900F024FB074645E01B98F9 +:10D17000022C4078009064D1002801D0012860D1B1 +:10D180000A2168460172009901731AAA00200099C9 +:10D19000FFF73BFC0146684641730021817302A8FA +:10D1A0003099F9F714F80746002168460172012109 +:10D1B000890210A80186022F08D04C48006C8079A3 +:10D1C000002807D018A9087020E04BE047490098D4 +:10D1D000088337E0002F03D0812018A9087031E0C0 +:10D1E0001AAA01200099FFF710FC18A9087000285E +:10D1F00003D119202870012030806846007A002869 +:10D2000004D002A83099F8F7E2FF0746002F2BD090 +:10D2100018E0062038E522993448090711D5012C79 +:10D220000FD10B2269460A72C08888810021042030 +:10D2300002F0B5FF082010A90886BFE62098400636 +:10D2400010D50327294810AA4188128E1143418026 +:10D250005005400E04D01F99289808601F988480BC +:10D26000384693E404200FE518A8007800280ED073 +:10D27000012028701B980078687010A8008DA87095 +:10D28000000AE87018A80078287105203080174837 +:10D2900010AA4188128E91434180E1E7FFB506460E +:10D2A0009FB000201B903178012088401149124A1C +:10D2B000084010A908860D494988914203D00028EA +:10D2C00004D0080702D5012023B0F0BD219D00271E +:10D2D0002F7020983C46018810A8018418A8077177 +:10D2E00000F013FB6846077202A907E02C19002022 +:10D2F0000102000009F80000FFFF0000FA48016485 +:10D3000001464031826C1A91097BC90008395718CF +:10D3100022994164307801282AD0022809D00328B4 +:10D3200079D12878800980011D302870EE48B188B5 +:10D33000C1803078022804D12878800980011B3010 +:10D34000287001A8009010A8008CEB1CC01E82B2AF +:10D35000B088002100F068FC0028E1D1B188697034 +:10D36000090AA9706946888810A9C01C08842DE1A3 +:10D37000717918A801713079012802D00228CFD123 +:10D38000E6E0D9487F2340881B010246184010ABD5 +:10D390001886802840D006DC102810D020280ED017 +:10D3A00040280AD120E0FF38013859D0FF38013831 +:10D3B0006AD0FF38FF3802387ED0052491E0D006CD +:10D3C00001D5082000E010201B9004206946087257 +:10D3D0000020888118A800900195318919AB1CAAFA +:10D3E0001B98FFF76BF977E0BF4B3289188B8242AD +:10D3F0004FD10A221B92002973D101A9009110A9D3 +:10D40000098C6B1C491E8AB2002100F00DFC18A982 +:10D4100008710B2017E0F6E0B34B3289188B82427B +:10D4200037D10C221B9200295BD101A9009110A9D0 +:10D43000098C491E8AB21946098C6B1C00F0F4FB5A +:10D4400018A908710D2028706946888810A9401C09 +:10D450000884042069460872A348008B888140E054 +:10D46000A14A3389108B834213D112231B930029C5 +:10D4700037D1536A002B05D00091128C00F04DFA81 +:10D4800018A9087113205EE097483289038B9A42ED +:10D4900001D00424E7E016221B92026D002A09D174 +:10D4A000F268002A06D002651A98328A82821A9A95 +:10D4B0000020D082002900E02FE012D1B88839681E +:10D4C000FFF7D2F918A9087100280AD1B8882B46AD +:10D4D00018AA396800F06DF90446022818D0042C07 +:10D4E00016D0B88800280FD06846007A002804D0EB +:10D4F00002A82299F8F76BFE0446012069460872DB +:10D50000386803900020B880002C5FD0052C7BD0B9 +:10D510006846007A032873D0A5E018201B900029E4 +:10D5200005D071483189018300210165D9E76E4832 +:10D530000246017E18320120FFF767FA18A9087128 +:10D540000028CED119202870012010A90884C8E72E +:10D550001A98407B002856D0307AC0001358001D1E +:10D560000193105A1D9000291AD100F0D2F906201B +:10D5700069460872002000901D980F3882B2019809 +:10D580008178437808021843019B0021DB1C00F0DE +:10D59000C4F918A90871002269460A72832830D09C +:10D5A000002118A8017110A80184012168460172A8 +:10D5B000019803901A981A99407B401E48731A9854 +:10D5C000807B002802D01A99401E887310A8008E14 +:10D5D0007F21090102468A431DD04348002200886A +:10D5E00011468300042002F038FD3F483178017174 +:10D5F00010A94088098E08433B4948800FE003E0AA +:10D600002BE002242FE00524374810AA4188128E0F +:10D610009143418027E034494A8882434A806846E2 +:10D62000007A002805D03048416C02A8F8F7CFFDF9 +:10D63000044618A80079002815D01B9868700120AE +:10D6400028702948008BA870000AE87018A8007993 +:10D650002871052110A8018405E02348416C02A827 +:10D66000F8F7B5FD044600F054F91F48408840051E +:10D67000400E20D11A98807B00281CD1B888002841 +:10D6800019D0209910AA098811842299009139682B +:10D6900018AA219BFFF74FFA044602280BD001205D +:10D6A000694608723868039002A82299F8F78FFD3E +:10D6B00004460020B88010A8018C209801802046E4 +:10D6C00002E600B50022D243074997B04A800428F9 +:10D6D00007D1022268460270097901710021F8F72A +:10D6E00076FD17B000BD00002C19002010B5394C94 +:10D6F00003780022216C012B02D0022B44D126E0BA +:10D700000B78002B01D0042B03D10A71226C03216A +:10D710001170216C83880A79D200921D8B52216C82 +:10D720000A79D20008328918C2880A80216C0389DC +:10D730000A79D2000A328B524289206C0179C900E1 +:10D740000C314252216C0879401C087120E00A74A7 +:10D75000226C81889180216CC288CA80226C0189E8 +:10D760001181226C41895181216CC068C860616C53 +:10D77000206CF8F72CFD0146022807D0206C007CB5 +:10D78000002802D1002903D0812010BD832010BDC4 +:10D79000002010BD8178012909D100880521C90226 +:10D7A000884202D0491C884201D1002070470520E0 +:10D7B000704710B51488844201D2052010BD17248B +:10D7C0001C701080421E491C581C04F0DDFF002014 +:10D7D00010BD00002C19002010B50446FEF759FFBB +:10D7E0002046FFF76EFF10BD10B58B78002B11D0CF +:10D7F00082789A4207D10B88002B0BD003E0091DD9 +:10D800008B78002B08D08B789A42F8D103880C884B +:10D81000A342F4D1002010BD812010BD10B5002915 +:10D8200002D001290DD102E00088000501E0008846 +:10D830008004800F07D001281CD0022809D00328BB +:10D8400010D0812010BD002901D0032010BD02207E +:10D8500010BDF6F754F803280CD004280AD000288D +:10D8600006D009E0F6F74BF8042803D0022803D0CD +:10D87000052010BD002010BD0F2010BDF3B5C81C41 +:10D8800080080E46800081B0B04201D08620FEBDE7 +:10D89000FE4C354626600198A08000202081E08063 +:10D8A00014E0B807A978800D0843F94904F0E6FFB1 +:10D8B000E088401CE080B80607D42089401880B278 +:10D8C00020810199081A8019A8600C352F887807E3 +:10D8D000E7D40020A072FEBDEC480C22C18800896C +:10D8E0005143081880B2704770B51346E74A45188F +:10D8F0009488AC4201D2842070BD126810180A4688 +:10D90000194604F041FF002070BDE04901208872F3 +:10D910007047DE49002088727047FFB589B09704D0 +:10D920000E460546BF0C029200F017FA040021D003 +:10D93000002069460873D548807A012812D0012159 +:10D940002046FFF76BFF002815D12078400609D547 +:10D950000221684601730582218841828682C7823E +:10D960000C9806900298000407D500273E46012532 +:10D9700001970CE001200DB0F0BD2078A178800760 +:10D98000800D0843C249019004F078FF0D460298CB +:10D9900040040AD50198A84207D12088E178800583 +:10D9A000800F00020843B04201D3AE4201D90720E4 +:10D9B000E1E7B81980B20290A84201D90D20DAE758 +:10D9C0006846007B002804D003A8F8F7FCFB002879 +:10D9D000D1D10198A8420BD12088032109028843A4 +:10D9E00002998905890F0902084320800298E07096 +:10D9F0001298002800D007800C9800280CD02078BE +:10DA0000000609D4A0683A4680190C9904F0BCFEBF +:10DA100020881021884320800020ACE7FFB59B4D73 +:10DA200081B00E46E8882F680C21009048433C18CE +:10DA30009749039804F022FF0A462889E11B84468F +:10DA40000C314018318880B28B0601D5002300E0EC +:10DA500013461818AB8880B2834202D8842005B0E0 +:10DA6000F0BD0098894D401C80B2E88021800D995E +:10DA7000002900D00C600399A170E2702188039DF9 +:10DA80008908AD058900AD0F294303252D02A9435F +:10DA90009505AD0F2D0229430425294321800C99BA +:10DAA000002900D0088001998978A171019909881D +:10DAB000A1803178890601D50B9905E0734962444C +:10DAC00092B20A81991AC919A16000212173327892 +:10DAD000920601D50020C2E700910B9B0A9A049997 +:10DAE000FFF71BFFBBE710B5044600F036F900282E +:10DAF00006D06649641ECC8000210170084610BD26 +:10DB0000012010BD002803D0401E0880002070476F +:10DB10000120704710B55D490288CB889A4201D335 +:10DB2000822010BD0B680C21514359180B88CC780A +:10DB30009B059B0F1B02234341608C7904738C88E7 +:10DB40004481C3818968521C0161028002810020E6 +:10DB500010BD012101827047FEB505460020C0437B +:10DB6000088068680F468178684681706868018817 +:10DB70006846018000218171288A2C88A04200D348 +:10DB800004462C8234E0288A401C2882301D6968B3 +:10DB9000FFF72AFE002829D139883E48814201D169 +:10DBA000601E38806888A04227D33088F1788005CD +:10DBB000800F0002084302906946301DFFF714FEF3 +:10DBC000002813D12989334881421AD000213046D8 +:10DBD000FFF724FE002809D12A890298824205D144 +:10DBE000E968B06804F0A3FD00280AD0641CA4B260 +:10DBF000204600F0B2F80600C5D1641E2C828220B7 +:10DC0000FEBD7C80B079B871B088B880308838812A +:10DC100030788007810DB078014379810298B8810E +:10DC2000B06838610020FEBDFFB585B014460F46D0 +:10DC3000059800F092F8050037D01448BE05807AA8 +:10DC4000B60D012815D000212846FFF7E7FD002872 +:10DC500029D1287840060CD5012168460170059924 +:10DC600081802988C18006814481F8F7ACFA0028B8 +:10DC700019D12888AA788107890D11438005800F62 +:10DC8000EA7800021043BE4211D005E0841900205A +:10DC900001020000FFFF0000374A914207D3611ED6 +:10DCA000814204DD0B2009B0F0BD0120FBE7864274 +:10DCB00001D90720F7E7801B82B2A24200D9224691 +:10DCC0000E98002800D002800898002804D0A86888 +:10DCD0008119089804F058FD0020E4E770B5144657 +:10DCE0000D4600F03AF800280DD001882980002C5C +:10DCF0000DD0017880788907890D01431E48814243 +:10DD000003D2012002E0012070BD0020207000201D +:10DD100070BD70B516460D4600F01FF804000DD01A +:10DD20002D882580FF2E16D0A807A178800D0843E6 +:10DD3000114904F0A3FD002E06D101E0012070BDC1 +:10DD4000FF31FF31033189B2A170A8088000890535 +:10DD5000890F08432080002070BD0849CA8882428C +:10DD600007D3002805D00C22096850430C38081846 +:10DD70007047002070470000010200008419002055 +:10DD8000F0B585B00E4605460020694608707078EB +:10DD9000FE49C00003900C58FD4F002D0ED0022DFF +:10DDA00073D0002C72D02078801E030004F08EFF08 +:10DDB00009837F7F7F83797F77727F00002C03D177 +:10DDC000F4A16B2004F07DFE2078801E030004F097 +:10DDD0007DFF09065E5E5E19365E50545E00307847 +:10DDE000062803D0EBA1762004F06BFEB8687168BA +:10DDF000806A032204F0C8FC0120694608700028EC +:10DE000035D1CEE730780C2803D0E2A1812004F090 +:10DE100058FEE0680078002806D0B8687168C06BCA +:10DE2000102204F0B1FC28E0B8681021406B04F027 +:10DE300008FDB868C16A406B0A787168F1E730780C +:10DE40000D2803D0D3A1942004F03BFE04206946A2 +:10DE5000087071684878097800020843B9684A6A0E +:10DE60005178127809021143484069468880084673 +:10DE700008E0C8A1AF2004F024FE6846007800281E +:10DE80008FD06846F5F740FD8BE727E01CE0C1A185 +:10DE9000B420F0E7B8686169406CFEF71CF8A1692E +:10DEA00000E0E168B868406CFEF715F803E0B9A13E +:10DEB000E32004F006FEB8682146406CFEF70BF83C +:10DEC000B24A039900205050022D07D0002D05D0F2 +:10DED000012D03D0AFA1EF2004F0F3FD05B0F0BD9C +:10DEE00010B501780124012902D0022910D112E0D5 +:10DEF0004268A748002182600170A4486C38C1665E +:10DF0000016741678167928902214C3001F083F9F2 +:10DF10000024204610BDFF209EA11C3004F0D1FD3E +:10DF2000F7E7F0B505469EA103C997B01491139089 +:10DF3000002108A8017595482A781030944C049067 +:10DF40002078012605903746A068130004F0BEFE35 +:10DF50000CEE073098EFF5EBEAE9E8E8E7EE217020 +:10DF60000124FF2655360D4610A80570457001F0B6 +:10DF700063F90746012803D086A1304604F0A1FDCD +:10DF800010A93846FFF7FCFE2046641EE4B20028C4 +:10DF9000EAD10A20694608706846029501F02AFA1B +:10DFA000002803D0FF207BA15E3066E00026E6E279 +:10DFB000006B0078C0072ED06846077001F01AFA8F +:10DFC000002804D0FF2073A1713004F07AFDA0680E +:10DFD000406CFDF777FF050004D1FF206DA1743080 +:10DFE00004F06FFD08984078C1006848455006204D +:10DFF0002870A068016869600069A8606448C01C56 +:10E00000E860284601F0F6F9022804D0FF2061A15B +:10E010007E3004F056FDA068006B00784007C5D53F +:10E020006846077001F0E6F9002804D0FF2059A1E6 +:10E03000863004F046FDA068406CFDF743FF050004 +:10E0400004D1FF2053A1893004F03BFD08984078AB +:10E05000C1004E48455006202870A06801686960DC +:10E060000069A8604A48401DE860284601F0C2F9EE +:10E0700002289BD0FF2047A1933004F022FD95E7B2 +:10E08000A8680028684632D001712879012833D069 +:10E09000022804D0FF203FA1AD3004F012FD3B4820 +:10E0A00010221030A96804F06FFB38481030014688 +:10E0B000103148602078C1062DD5EF21084020702E +:10E0C000032069460870314810300290684601F01C +:10E0D000B3F80446022808D0002C06D0012C04D046 +:10E0E000FF202CA1BE3004F0ECFC69462AE1077148 +:10E0F000264820304160DDE7244A04986C3AD16715 +:10E1000041608160C1600621A86803F087FA1F4959 +:10E1100010310860C9E720210843207046E758E124 +:10E1200014E1D6E0A3E046E007E000E031E2FF20A2 +:10E1300018A1E73004F0C5FC21E2172269460A72F3 +:10E140000F7089788A08297992008907890F0A4314 +:10E1500069468A70FB210A4029794907C90F89005D +:10E160000A4369468A70EA888A80826C02A96846F6 +:10E1700001F082F9002804D0FF2006A1F73004F056 +:10E18000A0FC052108A8017568460DE0FC190020D7 +:10E19000A00000207372635C736D2E6300000000AA +:10E1A00004411A8800A48000017A0187A068002633 +:10E1B000806C0F90E7E16846077001F01BF90028BA +:10E1C00003D0FD49FD4804F07CFCA068406CFDF7DD +:10E1D00079FE060004D18320F749800004F071FC29 +:10E1E000A068406CFDF76EFE070004D1F348F249C9 +:10E1F000801D04F066FCF2488068406CFDF762FE0A +:10E20000040004D1ED48EC49093004F05AFC0898A8 +:10E210004078C100EB4846500A203070287A3071AF +:10E220006868E74DB060A868806C30611720307373 +:10E2300077613046B46101F0DDF80446022808D069 +:10E24000002C06D0012C04D01120DB49400104F041 +:10E2500038FC2046316AFFF793FD297805220A40F1 +:10E26000042A00D0A2E6FB22114029702AE0059979 +:10E270004908490021708A071CD5FD2211402170F0 +:10E280000F216A46117017211171806C0290684647 +:10E2900000F0D2FF0546022808D0002D06D0012D3F +:10E2A00004D0C648C4493A3004F00BFC69462846FD +:10E2B000FFF766FD2078052101400429D2D1FB211A +:10E2C00008402070072008A90875BD4880780876A6 +:10E2D0006CE66846077001F08DF8002804D0B74856 +:10E2E000B549543004F0EDFBA068406CFDF7EAFD41 +:10E2F000060004D11320B049400104F0E2FBA068FD +:10E30000406CFDF7DFFD070004D1AC48AA495A3044 +:10E3100004F0D7FB08984078C100AA48465007206F +:10E320003070A068406870606868F760B060304620 +:10E3300001F060F8040004D0A0489F49653004F063 +:10E34000C0FB316A2046FFF71BFD2FE668460770C9 +:10E3500001F050F8002804D0984897497A3004F02A +:10E36000B0FB08984778A068406CFDF7ABFD06004D +:10E3700004D151209049C00004F0A3FBA068406C78 +:10E38000FDF7A0FD040004D18C488B49823004F0D5 +:10E3900098FB8C48F900465008182A694260092009 +:10E3A000307068687060A868B060A889B0818548DE +:10E3B0006C3830611030B4617061304601F01AF889 +:10E3C000022804D07D487C49903004F07AFB2F75F8 +:10E3D000ECE57C4B00212033197002216A46117054 +:10E3E00001932979002902D0184601709BE07449F5 +:10E3F00003220C314968FB230A708A7800259208B1 +:10E4000092001A408A70027A1207D20F4A706D4A3F +:10E4100020325560C37ACB70837A13724469537A81 +:10E4200024785B08E4075B00E40F2343537284699C +:10E43000D460FD242340C4692478E407A40F234357 +:10E440005372036A13614D710D71437A5C4A9C07E4 +:10E450000C32A40F1268012C04D19478A407A40FE5 +:10E46000012C1DD09B089B00437293785B0702D45C +:10E47000437A5B0728D5037A13AD5B075B0FDC009B +:10E480005B00E318147864001B19DBB2DC082C5D18 +:10E490005D076D0F06235B1BDC40A3079B0F14E099 +:10E4A000037A54795B065B0F1C404C711379062587 +:10E4B0002B400B71DB002343414C63708B789B082E +:10E4C0009B005B1C8B70D0E700238C78FB252C40D5 +:10E4D000457A6D07ED0FAD002C438C70047A64070C +:10E4E000640F0C705178012908D1017A090705D50C +:10E4F000032108A801750221017614E0022B1ED029 +:10E50000012B21D02F4B00216C3B049AD96751601D +:10E510009160D16019467C310A4610325160417ACF +:10E52000FB2211404172684600F086FE040021D0B3 +:10E53000012C20D02049244804F0C3FA1BE003201A +:10E5400008A908750F76EEE70598000704D5C320E3 +:10E550001949800004F0B5FA1A4C0D211034E01C62 +:10E5600004F06FF9204610304460022008A90875B5 +:10E570000E94D8E7002669462046FFF701FC08A85C +:10E58000007D002802D00DA8F5F7BEF9304617B07F +:10E59000F0BDCB2008498000CCE5F0B5054697B02A +:10E5A0000C460020694608700548064E2F78483E04 +:10E5B000017882680AE0000094E10000090200008E +:10E5C000A0000020FC1900201F0300003B0004F005 +:10E5D0007DFB0BA8820724394A6977778D9AA800BA +:10E5E0002B20694608730CA903A8FDF7A1FC00289D +:10E5F00003D05349534804F064FA53490D9804F08A +:10E600003DF952480160524869680160AA68426059 +:10E6100001910820694608708CE08A0610D5DF2237 +:10E620001140017003202070484810304168A160FB +:10E630004068002802D00020207177E00120FBE72D +:10E64000102256E02B2069460873404903A85C3924 +:10E65000FDF76EFC002804D03A483949293004F00F +:10E6600030FA04201BE02A206946087303A8102210 +:10E670000230696804F088F807A810220230A968FF +:10E6800004F082F8314903A85C39FDF751FC0028F9 +:10E6900004D02C482A493A3004F013FA052020709F +:10E6A000666043E02A79002A02D0012211430170FA +:10E6B00005206946087028798880A868029039E0AA +:10E6C000106B4023018819430180106C6968102287 +:10E6D00004F05AF82AE0FB22114001700620694636 +:10E6E0000870A96868680291019023E0CB0703D005 +:10E6F0000222114301704AE70F2020701720207179 +:10E70000906CA06012E0537A9B0706D0126B44789D +:10E710001388FF3401342343138004221143017012 +:10E7200004E0084806497C3004F0CBF968460078DC +:10E730000028E0D06846F5F7E7F828E701207047A1 +:10E7400094E100004D03000040420F000C1A00202D +:10E75000AC00002070B504780D460646230004F096 +:10E76000B5FA0B1C181C1C1C1C07181C1C181C00C0 +:10E770000021052001F013FDB068007805280CD0B9 +:10E78000FA480022008811468300052001F065FC4C +:10E7900003E00021052001F002FD002D0ED0002035 +:10E7A000287029463046FFF7F8FEF1482978005DC9 +:10E7B000884201D1032070BD022070BD0021304687 +:10E7C000FFF7EBFE002070BD30B5E8494B68497A91 +:10E7D0000A0111460C315C5C032C0CD00446002568 +:10E7E0002034257125725C5CA500AA18641C5C5459 +:10E7F0009850032030BD062030BDF0B504462646B3 +:10E8000020360D463279012008218FB0002A0CD025 +:10E81000012A21D0022A2BD0032A04D12A78052AE2 +:10E8200001D1297000200FB0F0BD01203071606867 +:10E8300000280AD0A0690170616841602169816087 +:10E840006169C160FFF7C0FFEDE70720287020690C +:10E8500068606069A86009E029780729E3D102208F +:10E86000307105202870C248203868600320DAE73C +:10E8700029780529D7D1A08910280AD9103880B263 +:10E88000A081A1681023091803A86A6800F033FE6C +:10E890002DE0102804D0C1B20BAA1020A76809E00F +:10E8A00010232269A16817E0491EC9B2401EC0B2F8 +:10E8B0007B5C13540029F7D100280AD0401EC0B257 +:10E8C00080211154002102E0401EC0B211540028E2 +:10E8D000FAD1626910230BA907A800F00CFE1023DF +:10E8E00007A903A86A6800F006FE0320307160687B +:10E8F000019003A8029005206946087029466846E1 +:10E90000FFF728FF8FE7F0B5044626460D46203670 +:10E91000317901208DB000290BD0012938D002298E +:10E9200005D12978052902D10920287000200DB0D1 +:10E93000F0BD217D6846CA07D20F02738807C10F58 +:10E9400068460174012203A905A800F0CCFD04A9C2 +:10E95000012205AF481D00F0C6FD0722B81CE16882 +:10E9600000F0C1FD07A807220130216900F0BBFDBE +:10E970006068019009A80290102305AAA16800F020 +:10E98000BAFD01203071052168460170294621E059 +:10E9900029780529CBD1062203A8E16900F0A3FD5F +:10E9A00004A806220230A16900F09DFD042106A8FA +:10E9B00000F091FD6068019007A80290102303AA5F +:10E9C000696800F098FD02203071052069460870E2 +:10E9D00029466846FFF7BEFEA9E7F0B5074685B0B1 +:10E9E0000C460020694608703E466248203632795F +:10E9F0008179133801250078130004F067F9180DA8 +:10EA0000FEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EF9E +:10EA1000EEEDECEBEAE9E8E7B968039100291BD0D9 +:10EA2000012269460A7003220A710A224A71396971 +:10EA30000291397900297DD0039A1278002A7AD080 +:10EA40000C2A78D2130004F041F90BF009F0354D8F +:10EA50008498B1F2EEEDF0000020BEE30021062024 +:10EA600001F09DFB3879072866D1424D133D287887 +:10EA7000022802D000287FD101E0002028700398EE +:10EA80000079C11F0A2901D30A249AE16870394824 +:10EA90000722C01F039900F026FD01203071287065 +:10EAA0000220694608703348801F01903869401C75 +:10EAB00002903BE211293DD12E4D133D0228DAD1BF +:10EAC00068686978007A884201D9062479E1039957 +:10EAD00026481022491C303800F005FD032028701C +:10EAE000022046E11129E6D1224C133C0428C2D170 +:10EAF0000520207003991D481022491C203800F081 +:10EB0000F2FC062030717869032101706268516857 +:10EB1000416016492039816021460C31C160C91D10 +:10EB20000161017D537A49084900DB07DB0F194376 +:10EB3000017502E064E34AE387E1D3688361FD2362 +:10EB40001940537A9B07DB0F5B001943017511696C +:10EB500079E10229AFD1002868D005206946087103 +:10EB60000398407848713869029045E3601A0020A4 +:10EB70004C2D0100C700002073E011299BD1F84CF7 +:10EB800006286ED1A0680399406B1022491C00F042 +:10EB9000AAFC0620694608703869029000200871B6 +:10EBA00001466846FFF7D6FD072058E00B299AD1A9 +:10EBB000EB4C07287ED1A0680399C06A0222491C49 +:10EBC00000F091FCA0680822006B17E00EE10AE358 +:10EBD000F3E2D3E2B9E2AEE28EE265E24FE248E26E +:10EBE00028E2FDE1E7E1D0E1C6E1BFE1ADE16DE1A1 +:10EBF0004AE12BE1DCE0BFE0B0E076E00399C91C1C +:10EC000000F071FC0621684601703869029000210D +:10EC100068460171FFF79EFD20461330417949088F +:10EC200049003EE041E01DE001E05CE0E2E2112944 +:10EC300090D1CB4C08283DD1A0680399806B10225D +:10EC4000491C00F050FC06206946087038690290A3 +:10EC50000020087101466846FFF77CFD09202070FE +:10EC6000BDE227E0082989D1BD49092822D10398AE +:10EC700042788868C16B0A700399006C0622891C6F +:10EC800000F031FC062168460170386902900021CD +:10EC900068460171FFF75EFDB14813304179FD22EE +:10ECA0001FE041714FE230717EE01129C0D1AC49C3 +:10ECB0000A2801D0082484E088680399406C102257 +:10ECC000491C00F010FC062168460170386902906A +:10ECD000002168460171FFF73DFDA14813304179DD +:10ECE000FB221140DDE707246BE0217802297DD16A +:10ECF0009B490128FBD162684A6014780846002CC1 +:10ED00005DD106216A46117039690291072111719E +:10ED1000029902240C70CA785207520FCA704B79BC +:10ED20005B075B0F4B718B795B075B0F8B71D207B6 +:10ED300001D18A714A7105460A794078824200D22F +:10ED40006A7087480722133000F0CDFB00202C703A +:10ED5000307101466846FFF7FDFC40E22178042946 +:10ED6000C5D1032871D108227E48616800F0BBFB41 +:10ED7000032030710420E3E121780429B7D1784FD2 +:10ED80000328B4D1774808220830616800F0ABFB53 +:10ED90000420307178684168002907D00321217070 +:10EDA000002121714068A060032531E20320C7E102 +:10EDB000207803289BD1207900281BD00446002C02 +:10EDC00014D0062168460170386902900221684615 +:10EDD0000171029805210170447000216846FFF717 +:10EDE000B9FC012168460170042100E0A2E1017133 +:10EDF000447105E25A49A06849680028486001D179 +:10EE000059484860052030717869032202704A68C9 +:10EE10004260544A8260524A0C32C260D21D026182 +:10EE2000027D4B7A5208DB075200DB0F1A43027552 +:10EE3000CB688361FD231A404B7A9B07DB0F5B0095 +:10EE40001A4302750969C16194E1F2E02178092948 +:10EE500086D14349032891D10420087006206946D1 +:10EE6000087038690290112008710298032101701E +:10EE7000401C1022616800F036FB00216846FFF755 +:10EE800069FC00203071AAE12178092992D1052876 +:10EE900090D13449626820391020401EC0B20B5C0A +:10EEA000145CA34203D000200424307189E70028B9 +:10EEB000F3D107203071786904210170284949682D +:10EEC0004968416027498160103952E120780A2859 +:10EED000BED106216846017038690290112168464A +:10EEE0000171029804210170401C10221D4900F09C +:10EEF000FAFA00216846FFF72DFC194810214078E6 +:10EF00006268091AC9B2101800F0E5FA6068019049 +:10EF100013481330C178C9070FD08179002902D175 +:10EF20004079002809D00820307109E1214668465F +:10EF3000DFE0054601287CD06AE1072069460870B9 +:10EF400000216846FFF706FC4BE120780E289DD192 +:10EF50000348616881604969407808700920A2E629 +:10EF6000B4000020501A00202C2D0100C80701D049 +:10EF70000A20E3E00F2096E620780F2859D1A068F8 +:10EF80003861207938730B20F3E620780428F5D116 +:10EF90006168F84C0822A068C06900F0A4FA0C204F +:10EFA000307178690722B9690270A268D36843603A +:10EFB000D2698260DDE020780D28DFD1ED4D6168F7 +:10EFC000A86802230269806900F095FA0D2030716B +:10EFD000786906210170A9688A68426009695FE062 +:10EFE00020780C28CAD1E34D6168A8686A78006A65 +:10EFF00000F079FA6878AA681021091A126AC9B271 +:10F00000101800F068FA062168460170386902900D +:10F01000112268460271029810220170A968401CF2 +:10F02000096A00F060FA00216846FFF793FB0E20A2 +:10F030005AE0A2E020780F287CD1062069460870AB +:10F04000386902900B200871029C0720C94D20707E +:10F05000A86802228169601C00F045FAA8680822AD +:10F06000C169E01C00F03FFA00216846FFF772FB1F +:10F0700080E7880701D5102060E0132013E6207890 +:10F080000F287AD1A0683861207938731120307147 +:10F09000786906210170B7498968C9684160B64935 +:10F0A0008160B549091D64E020780C2865D1B14D17 +:10F0B0006168A8681022406A00F015FA06216846C7 +:10F0C0000170386902901121684601710298082187 +:10F0D0000170A968401C496A102200F004FA00215E +:10F0E0006846FFF737FB122030710921684601702E +:10F0F0002146FFF72FFB1CE720780F281AD10621A5 +:10F1000068460170386902900821684601710298CA +:10F1100009210170974989680A78D207D20F427095 +:10F1200049680622801C00F0DEF900216846FFF7DE +:10F1300011FBA2E769E0480705D5142030710920CA +:10F1400069460870F2E61620ADE520780F2853D105 +:10F15000A0683861207938731520307178690621EC +:10F160000170844989688A684260096981608249BE +:10F17000891DC160FFF728FBDBE63DE020780C2805 +:10F1800043D161687B4C1022A068806A00F0ABF923 +:10F1900006206946087038690290112008710298AB +:10F1A0000A210170A168401C896A102200F09BF9B5 +:10F1B00000216846FFF7CEFAC5E76E481330407964 +:10F1C00000280ED0C10703D06A480621017006E06E +:10F1D000800701D5082000E00A2066490870002554 +:10F1E00016E017205FE56349002805D00020307144 +:10F1F00008700A206946087068460078002804D024 +:10F2000000216846FFF7A6FA00255A480021017040 +:10F21000284605B0F0BD10B5584BFF245C7258600D +:10F2200019721A80002204E0491EC9B20B010C3386 +:10F23000C2540029F8D110BDF0B5504E0546717A80 +:10F2400001208DB0FF2971D00127727A73681101F6 +:10F250005C180C31595C8900091F64586A70217868 +:10F260000B0003F033FD0B960709272C59818D4ABB +:10F270004F5492002F7075E0214620310A91097990 +:10F280000120002902D001296DD10EE060680190B3 +:10F2900005A802900D21C01C00F01DF9032205A84D +:10F2A000A16800F020F90A984EE02978052974D168 +:10F2B000062156E029462046FFF725FB69E0214656 +:10F2C0002031069109790120002902D0012964D159 +:10F2D0000EE06068019007A802900822E16800F043 +:10F2E00002F9082209A8A16800F0FDF806982BE0B1 +:10F2F0002978052951D10A2133E02946204600F01A +:10F3000005F946E029462046FFF777FA41E029460D +:10F310002046FFF762FB3CE0214620310591097948 +:10F320000120002903D0012937D116E056E060689A +:10F33000019007A802900822A16800F0D4F80821E3 +:10F3400009A800F0C8F805986946077105200870FB +:10F3500029466846FFF7FEF91BE0297805291CD1EC +:10F360000B212970002018E02946204600F014F9EE +:10F370000FE00000B4000020242D0100601A0020DE +:10F380002946204600F038F903E029462046FFF7D9 +:10F39000D5F9002801D001280CD12562717A736853 +:10F3A00009010C315A5C521E1206120E5A5401D039 +:10F3B00003204AE70328FCD0737A726819011D0103 +:10F3C0000D312C46515C7172FF270D3417550C35E9 +:10F3D000545D002C02D0FF2903D173720DB0F0BD33 +:10F3E00021460C010D34145DFF2CF9D109010D31BA +:10F3F0005354F3E770B5A24C0546607A21460346A4 +:10F400004A6811E0010108460C30105C08E0401E1B +:10F41000C0B286008E199659AE4201D1042070BD4B +:10F420000028F4D10D31505CFF28EBD19448002125 +:10F43000007A01E0491CC9B2884204D90E010C3699 +:10F44000965D002EF6D1884201D8052070BD0801D6 +:10F450000D30135461722846FFF7B6F9032806D021 +:10F46000617A626809010D31515C617270BD284694 +:10F470002830FFF7E1FE70BD10B504780123012CA0 +:10F4800014D10C78022C11D30B23137083785B07F3 +:10F490005B0F537002220A708088002805D0830019 +:10F4A00000221146062000F0D8FD0023184610BDAA +:10F4B0000EB50022012105280AD0062807D168468A +:10F4C00001700221017142710021FFF766F80EBD43 +:10F4D00068460170F6E7002202E0491EC9B24254B4 +:10F4E0000029FAD1704703E0521ED2B28B5C8354DC +:10F4F000002AF9D1704730B505E05B1EDBB2CC5C69 +:10F50000D55C6C40C454002BF7D130BD3EB50446E9 +:10F5100020300D4602790121002A02D0012A39D17A +:10F520000EE06168019157490291012101710520A6 +:10F530006946087029466846FFF70CF9014629E03C +:10F540002878052826D169681022A06800F087F87D +:10F550006868C07B000606D54A4AA06810231032AE +:10F560000146FFF7C8FF1022A168E06800F077F8B5 +:10F57000A068C07B000606D5424AE068102310321E +:10F580000146FFF7B8FF07202870A0686860E068B0 +:10F590000021A86008463EBDF0B5044626460F4649 +:10F5A00020363179012089B0002909D0012905D1FF +:10F5B0003978052902D10C203870002009B0F0BD3F +:10F5C000606803AD01900295022203A8A168FFF7CD +:10F5D0008AFF0222A81CE168FFF785FF0C21281D85 +:10F5E000FFF779FF01203071052069460870394620 +:10F5F0006846FFF7AFF8E1E710B5034620331C7902 +:10F600000122002C04D0012C10D0022C25D11EE0A8 +:10F6100001211971C16806220A70406848601948C2 +:10F62000801F8860801CC86008460CE00C780C2C99 +:10F6300013D102221A71C268052313704968516000 +:10F64000806890601046FFF7BFF8024605E0087832 +:10F650000B2802D10D2008700022104610BD10B5F5 +:10F66000002409E00B78521E5B0023430370401C0A +:10F670000B78491CD2B2DC09002AF3D110BD00007E +:10F68000601A00202C2D010070B50D46040012D028 +:10F69000002D10D02101284603F0D3F81022544940 +:10F6A000284603F071F8524801210838018044804F +:10F6B0004560002070BD012070BD70B54C4E002427 +:10F6C0000546083E11E0716820014018817BAA7B45 +:10F6D000914209D1C17BEA7B914205D10C22294696 +:10F6E00003F025F8002806D0641C30888442EADB49 +:10F6F0000020C04370BD204670BD70B50D460600A9 +:10F700000AD0002D08D03A4C083C20886188401C63 +:10F71000884203D9042070BD102070BD3046FFF729 +:10F72000CCFF002801DB0F2070BD2088616800013C +:10F7300040181022314603F027F82088401C208012 +:10F740002870002070BD70B514460D001FD0002C2D +:10F750001DD00021A170022802D0102817D108E086 +:10F76000687829780002084311D00121A170108027 +:10F770000BE02846FFF7A1FF002808DB401CA07023 +:10F78000687B297B000208432080002070BD012097 +:10F7900070BD70B5054614460E000AD000203070CA +:10F7A000A878012807D004D9114908390A8890425D +:10F7B0000BD9012070BD002C04D028782070288837 +:10F7C000000A50700220087010E0002C0CD049682C +:10F7D0000001411810391022204602F0D5FF287888 +:10F7E00020732888000A607310203070002070BDDC +:10F7F000D8000020734909680160002070477149F2 +:10F8000008600020704701216F4A704B002803D028 +:10F81000012805D06E48704791630020187001E000 +:10F82000D1631970002070476A4901200860684858 +:10F83000801C70470422684B6649002805D05A6036 +:10F84000086901221043086108E008694008400087 +:10F8500008619A605C490020C031886000207047D0 +:10F860005C490622002808D0012809D002280DD0C2 +:10F8700003280FD05648401C70470869904302E0A7 +:10F8800008699043801C0861002070470869904314 +:10F89000001DF8E708691043F5E74E494A6A02433C +:10F8A0004A62002070474B494A6A82434A620020FC +:10F8B00070474849496A0160002070474549CA6954 +:10F8C0000243CA61002070474249CA698243CA6143 +:10F8D000002070473F49C96901600020704730B57A +:10F8E0000546002072B601463A4A384C4032002D97 +:10F8F00011D00123012D0CD0022D02D0072062B6B9 +:10F9000030BDA3706478002C01D09363F7E7916356 +:10F91000F5E7A170F9E7A170F9E72F4904208860A5 +:10F9200029490020C03188602849012008702B49EE +:10F930000A688023120A12021A430A6028490860E2 +:10F94000704722480078704770B5EFF31080C50704 +:10F95000ED0F72B61D4C6078401C0006000E607002 +:10F9600003D120A1CC2003F0ACF86078012806D1A7 +:10F97000A078002803D01749012040318863002D6A +:10F9800000D162B670BD70B5EFF31080C507ED0F02 +:10F9900072B60E4C6078002803D112A1DC2003F06F +:10F9A00090F86078401E0006000E607006D1A078C6 +:10F9B000002803D00749002040318863002D00D182 +:10F9C00062B670BD0004004040000040E800002026 +:10F9D00004200000000500400003004000E400E0B7 +:10F9E00000E100E07372635C736F635F706F776553 +:10F9F000722E63008107C90E002808DA0007000F85 +:10FA000008388008B94A80008018C06904E080087E +:10FA1000B74A800080180068C8400006800F704711 +:10FA2000B44948788978884201D3401A02E02122FB +:10FA3000511A0818C0B27047AE4923314878897806 +:10FA4000884201D3401A02E02122511A0818C0B29C +:10FA50007047A849463148788978884201D3401ACE +:10FA600002E02122511A0818C0B27047A04810B510 +:10FA70000C300168FF22120291430122D20311438C +:10FA800001609C49002023314870887023394870F8 +:10FA90008870463148708870974801F0FCFD9648A0 +:10FAA000401C01F0F8FDF2F723FE00F015F910BD3F +:10FAB00020207047B4E770B50C4605460026FFF7D6 +:10FAC000AFFF8C49A04214D30A46203A00232046B7 +:10FAD000641EE4B200280BD08878105C2870887807 +:10FAE0006D1C401CC0B288702128F0D18B70EEE7ED +:10FAF000012600F0F1F8304670BD202070479BE7EA +:10FB000070B50C4605460026FFF796FF794923316C +:10FB1000A04214D30A46203A00232046641EE4B2D1 +:10FB200000280BD08878105C287088786D1C401CE9 +:10FB3000C0B288702128F0D18B70EEE7012600F06A +:10FB4000CBF8304670BD202101700020704710B501 +:10FB50000446FFF77EFF2070002010BD70B50C46F4 +:10FB60000546FFF776FF63494631A04215D30A46A2 +:10FB7000203A00232046641EE4B200280BD0887887 +:10FB8000105C287088786D1C401CC0B288702128D9 +:10FB9000F0D18B70EEE7002400E0584C00F09CF8A8 +:10FBA000204670BD70B50C460546212904D9FF20BA +:10FBB00053A1473002F085FF4C484068103840B2EE +:10FBC000FFF718FFC6B20D20FFF714FFC0B2864240 +:10FBD00007D2FF204AA14D3002F073FF01E0F2F797 +:10FBE000C7FD21462846FFF766FF0028F7D070BD05 +:10FBF000F8B5404E07462336B1787078212200F0E0 +:10FC000060F8354623353B4C00280ED0A17860784B +:10FC1000212200F056F8002814D0A9786878212213 +:10FC200000F04FF800281AD025E032497078C91C3E +:10FC30000F547078401CC0B2707021281BD1002076 +:10FC4000707018E02B49607820390F546078401CA0 +:10FC5000C0B2607021280ED1002060700BE02549F1 +:10FC6000687826310F546878401CC0B2687021282B +:10FC700001D100206870B1787078212200F021F85D +:10FC800000281DD0A1786078212200F01AF8002801 +:10FC900016D0A9786878212200F013F800280FD038 +:10FCA000F2F748FD144801F0FEFC012149038842A7 +:10FCB00003D013A1C12002F004FF0F4801F00BFD97 +:10FCC000F8BD401C884205D0904201D1002901D0E6 +:10FCD000002070470120704710B5074801F0E3FC91 +:10FCE000002801D1F2F715FD10BD000000ED00E085 +:10FCF00000E400E08C1A0020EB0000200720000048 +:10FD00007372635C736F635F72616E642E63000075 +:10FD100010B5284801F0BFFC002803D026A11D2003 +:10FD200002F0CFFE2348401C01F0B5FC002803D0B0 +:10FD300021A1212002F0C5FE10BDF1B5224D6F6852 +:10FD400001261C4801F0AFFC1A4C002803D1002604 +:10FD5000601C01F0C0FC1D4A1D490120506000BF1D +:10FD600000BF00BF00BF00BF00230B604B60009BC3 +:10FD70006B60106000BF00BF00BF00BF00BF08681D +:10FD8000002802D148680028F9D048680028E4D14A +:10FD9000002E04D06F60601C01F085FC07E0601C41 +:10FDA00001F081FC0028D3D1024801F094FC00202E +:10FDB000F8BDC2E7ED0000207372635C736F635F90 +:10FDC0006563622E6300000000E5004000E0004033 +:10FDD00000E1004030B5EFF31081CC07E40F72B6BC +:10FDE0001D4A116910230D461D431561002C00D1D9 +:10FDF00062B61A4DC406E40E0120A0402C680442ED +:10FE00000DD0C8060AD4EFF31080C007C00F72B639 +:10FE1000116999431161002800D162B630BD20BF3D +:10FE200040BF20BFEAE70E4908784A78401CC0B2BC +:10FE3000904200D008707047084A094820BF40BF70 +:10FE400020BF4178037843701368002B02D10378F8 +:10FE50008B42F3D00020704700ED00E000E200E0AC +:10FE6000EF000020FEB5F44C07466068FF213E011C +:10FE700081552178FF2913D00901083141583246B4 +:10FE8000491E083209020192090A805800F0CBF994 +:10FE9000002802D02478254615E06168207888552E +:10FEA0002770FEBDE448426801981158280100906F +:10FEB0000830105800F0B7F9002806D1DE482C466B +:10FEC000416800980D5CFF2DECD1DB4821014068B2 +:10FED00085554754FEBD70B5D74A04460020157AB3 +:10FEE00053680AE00201561C9E5DA64203D10C3203 +:10FEF0009A588A4204D0401CC0B28542F2D8FF20F2 +:10FF000070BDF8B5CC4F3E7801F042FB0146FF2EA4 +:10FF100071D03401254678680835405900F083F9DE +:10FF200002280CD97868405901F025FB01F030FB1C +:10FF300001467868405900F076F902285BD8BE493E +:10FF40004868025D0A70A11C425C002A0CD0521E57 +:10FF5000425441590122D20589180902090A415126 +:10FF60003046FFF77FFF30E0631CC25C0092221D29 +:10FF700094468258002A10D001239B029A420FD93E +:10FF80009205920D43595703DB191B021B0A43517B +:10FF90006346C3589A1A920A09E0FF21C1540AE045 +:10FFA000435952039A181202120A42510022425433 +:10FFB0003046FFF757FFA0480C344168C2680098EC +:10FFC000095980001258009890479B4C2078FF28D0 +:10FFD00011D0000161680830085801F0CCFA01F036 +:10FFE000D7FA01462078626800010830105800F006 +:10FFF0001AF9022886D3F8BDF8B51C4615460E46F8 +:020000040001F9 +:100000000746FF2B03D38DA1D12002F05AFD8A4869 +:10001000FF21C760456004720674017000224270BF +:10002000104604E00201521C401CA954C0B2A04278 +:10003000F8D3F8BD70B5804C06466578207C8542C3 +:1000400003D37EA1E42002F03CFDE068A900465005 +:100050006078401C6070284670BDFFB581B01D46B9 +:10006000FF2401F095FA744F064679780198814291 +:1000700003D872A1F22002F024FD6F480021037A18 +:10008000406810E00A019446521C825CFF2A25D089 +:10009000019FBA4205D162460C328758029A9742B4 +:1000A0001ED0491CC9B28B42ECD8FF2C18D02101BC +:1000B0004A1C019B83540B460C33029AC250039B8B +:1000C0005D4F0022012B0ED00B1DC25001239B025D +:1000D0009D4216D9AA05920D08D008E00C46E0E72B +:1000E000FF2005B0F0BD0B1DC550EFE71A465303C6 +:1000F0009B190E461B0208361B0AAA1A8351920A44 +:1001000009E0002D00D101256B039B191D022D0A6A +:100110000B460833C550891C42543D463E78204664 +:10012000FFF7A0FE2878B04214D0000169680830BB +:10013000085801F020FA01F02BFA29786A680901C1 +:10014000083152580146104600F06DF8022801D2DD +:10015000FFF7D7FE0198C4E770B50C46054601F0DD +:1001600017FA064621462846FFF7B5FEFF2814D0A9 +:10017000314D04012046696808300858314600F0C6 +:1001800052F80121090340186968A41C095D400B5D +:10019000002901D08902081870BD002070BDF3B598 +:1001A00081B00F460198FFF796FEFF282AD0224E15 +:1001B0003578726829460C4604E0844205D025460D +:1001C0002301D45CFF2CF8D11CE0FF2C1AD0A542EF +:1001D0001CD10801105C3070FF2815D000010830D8 +:1001E000105801F0C8F901F0D3F90146307872686F +:1001F00000010830105800F016F8022806D2FFF768 +:1002000080FE03E00020FEBD01F0BDF939460198F3 +:10021000FFF7A2FF22017168FF23541C0B558A5C73 +:100220002B01CA54FEBD401A00020121000AC90573 +:10023000884200D900207047D81A00207372635C8E +:10024000736F635F74696D65722E6300F0B500248F +:100250001C4A01211C4B0803546018601B4B1C6096 +:100260001B4C20601B480469E443E406E61704695C +:10027000761C10252C430461174C6160174D2960D2 +:1002800000E020BF1F68002FFBD0002E03D10769BC +:100290001026B743076190688005906801D5104A21 +:1002A00010436960A160002119600121084A090317 +:1002B0001160F0BD10B50446FFF7C8FF20600020B4 +:1002C00010BD000000C5004080E100E000C100401A +:1002D00080E200E000ED00E000C3004000C000400C +:1002E00000FCFFFF70B51F490A68002A17D00023E1 +:1002F0001D4601244A68521C4A60092A00D34D60F9 +:100300000E792246B2400E6816420AD072B60B68C9 +:1003100093430B6062B649680160002070BD052000 +:1003200070BD5B1C092BE5D30FA1362002F0C9FB81 +:10033000F5E701201049800508607047EFF3108150 +:10034000CA07D20F72B601218140064803681943DB +:100350000160002A00D162B6EBE70248002101608B +:1003600041607047F40000207372635C736F635FD9 +:100370006576742E6300000000E200E00120810732 +:100380000860704701208107486070471048C068C6 +:10039000C00700D0012070470D488068C00700D01A +:1003A000012070470A484069C00700D0012070470B +:1003B0000748C069704706498A69D20306D589692A +:1003C0008907890F814201D10120704700207047C1 +:1003D00000040040F8B5FE4C607A217A88421BD0B8 +:1003E0000126FC4D0027207A215C14200A46424356 +:1003F0005019037C052B10D0062B19D0072B23D0C6 +:10040000437C012B2BD02120F3A1400102F059FBAA +:10041000617A207A8142E6D1F8BD0674207A401CC8 +:100420004007400F2072491CC8B2AA58022109E0B7 +:100430000674207A401C4007400F2072491CC8B245 +:10044000AA5803219047E3E70674207A401C40072E +:10045000400F2072491CC8B2AA580821F2E747741D +:10046000207A401C4007400F2072491CC8B2AA588D +:100470000721E7E770B5DB4D05202871DA48002435 +:1004800044700470183044720472D84801F003F9C3 +:10049000D7480474AC71D748611E41606C70847792 +:1004A000C4772C704477D448022104704470D34838 +:1004B000047528300470491EFAD10120F2F7DAF9E8 +:1004C0000020F2F7D7F90120A870F2F765F8CC48C0 +:1004D000F2F774F8CB4C2070CB48F2F76FF86070ED +:1004E000F2F76CF970BD10B5F2F793F9C54C2078AE +:1004F000F2F782F86078F2F77FF8BA4CE0780028DB +:1005000005D0FFF740FAF1F7A8FE0020E07010BD1B +:1005100070B5B44CA078002805D0FF20AEA1B23051 +:1005200002F0CFFA70BDA079002804D1FF20AAA163 +:10053000953002F0C6FA0125A5700026A671207933 +:10054000042114225043A34AAA4C80180174606805 +:10055000401C04D0481F60600120F2F78BF9002096 +:10056000F2F788F9F2F76CF9F2F773FAF2F7F8FAA2 +:10057000A1480078022804D0032804D1E07F002895 +:1005800001D0A57700E0A677F2F74FFA70BD0346D9 +:1005900090490420142242435218203A127F002A24 +:1005A00004D0401E0006000EF4D1704714224243CE +:1005B00051180A46403AD362012220390A7770471F +:1005C000012805D0032805D1002903D10020704758 +:1005D0000029FBD010B4874C00236377864A00289B +:1005E00090700CD002280AD007291AD20B007B4445 +:1005F0001B79DB189F441505070D0F111300D370ED +:1006000003E01B2000E03A20D0700120607710BC8E +:1006100070475820F8E77720F6E79620F4E7B520F2 +:10062000F2E710BC0020704710B573484078F2F72D +:1006300014FA80B210BD411E1422504310B5654A11 +:100640008418203C032902D8207F002803D162A10E +:100650006E4802F036FA207F012804D001205EA106 +:10066000400202F02EFA0020207710BD70B55E4CDB +:1006700060782178884201D1012500E00025F2F759 +:1006800088F9F2F7EAF961782278914201D10121E3 +:1006900000E00021A942EBD170BDF7B58CB0064651 +:1006A0000D98401EC1B20090029114204143494868 +:1006B0000D1828460195007C2D1D07282BD1444F8D +:1006C00000203C7A797AA14222D03A5D02998A428E +:1006D00007D1002803D040A14D4802F0F2F90120D3 +:1006E00001E0002804D0611C4907490F795C3955A5 +:1006F000641C6407797A640FA142E6D1002807D010 +:10070000787A002802D0787A401E00E007207872BC +:100710000199012008740099324C0D9803290FD8D3 +:10072000142148432B4940182038007F002807D067 +:100730000198007C012807D00E98C07A012807D0C4 +:1007400025A1344802F0BDF90E98C07A012839D1AC +:100750000198204B007C02280FD01D4C607A217A32 +:10076000401C4007400F884203D11BA12A4802F0D9 +:10077000A8F901990120487434E12079029A0146D0 +:10078000904206D0014614277843C018807C9042DE +:10079000F8D12279824208D1217914225143C91813 +:1007A000897C21710121617107E014224243D21832 +:1007B00014277943927CC9188A7414220521504366 +:1007C000C01881740E98007A06283BD226E00000FB +:1007D000D41B0020EC1A00207372635C72656D2ECE +:1007E00063000000001C0020BC1B0020071C002030 +:1007F000C01B0020E01B0020FE000020E81A0020A3 +:1008000003FF0000FC000020D5030100FF010000F1 +:10081000450200004E0200005B02000003007B4422 +:100820001B79DB189F44020C0A08060400200FE025 +:10083000B4200DE073200BE0322009E00A2007E02D +:10084000062005E0FF20F749443002F03AF9002085 +:1008500003900E98C07A02280E9824D0807A2872CD +:100860000E9803990068401A28600E99097A0029A9 +:1008700061D00221401A0002000A28600E98016827 +:10088000406808186860C01D0002000A68600E9881 +:100890000627407AA8720E98007A6872FFF776FDF4 +:1008A00000284AD053E04168007A00282DD0022069 +:1008B00009180398C01D09182079052827D0DA489F +:1008C000039A4078904200D81046801A4218D748C0 +:1008D000921D8446207914235843D54BC018436891 +:1008E00080689B1B801B1B0200021B0A000A9A42A5 +:1008F00004D8CE4A934201D8604508D92079142201 +:100900005043CB4A801880680CE00420D0E7C648EA +:10091000039A4078904200D81046801A8019801DB2 +:100920000002000A286040180002000A68600020E7 +:1009300028726868A7E704219CE7687A032806D232 +:10094000002804D0039838210F1A32200390B649AA +:100950000878012801D003280AD1487803998842F1 +:1009600006D9B449C97F002902D10399401AC71991 +:100970002968AE488B1B69681A02891B0591090218 +:10098000120A090A97421ED8074682421BD8B9426A +:1009900019D82079012205282FD0002001210491A7 +:1009A00021799C46059B14225143A14A89184A6823 +:1009B000921B9A4203D28A68921B62452BD800226E +:1009C0000AAF3A5430E0019905209B4C0874607AD4 +:1009D000217A401C4007400F884203D197A19A48D2 +:1009E00002F06FF8617A02986054607A401C400708 +:1009F000400F607200200FB0F0BD019802230299F1 +:100A000003742379052B00D02379837421716271DB +:100A100001200FB0F0BD01220AAF3A548A7BAF7AB1 +:100A2000BA4201D800220492897C401CC0B2052938 +:100A300003D0049A002AB6D1A1E00498002877D008 +:100A400025790520002704900AA8C05D012827D039 +:100A500004951420454376487F1C2818857CFFB2F6 +:100A6000052DF1D1019802230374714F20790528D7 +:100A700053D025790520049001984068811B1420EB +:100A80006843C0194268921B8A4262D92079A84201 +:100A90004FD1019902980B742279052A42D142E084 +:100AA0002079A8420BD121791420414360480818CD +:100AB000807C2071012060710020207011E004987A +:100AC000052803D15DA1614801F0FBFF28461421F0 +:100AD0004843574914234018827C049858434018CF +:100AE0008274284614214843514906224018027452 +:100AF0005148417A007A491C4907490F814203D184 +:100B00004EA1534801F0DDFF4B48417A4554417AEC +:100B1000491C4907490F41729BE7227901990298C4 +:100B2000052A00D022798A7420710120607123E0A7 +:100B300025E00498052803D140A1464801F0C1FFF3 +:100B4000049814225043C019029981740198857445 +:100B500012E0807C052807D0049505468FD137A187 +:100B60003D4801F0AEFF21E014214D43E919029800 +:100B7000887401990520887401200FB0F0BD019898 +:100B800005212D4C0174607A217A401C4007400FEA +:100B9000884203D129A1314801F093FF617A02987C +:100BA0006054607A401C4007400F607200200FB014 +:100BB000F0BD70B50D460646294900242046891B24 +:100BC000A04103D21DA1274801F07BFF2649002048 +:100BD000491BA04103D219A1244801F072FF244A05 +:100BE00070190021821A8C4101D32249401870BD2E +:100BF000F8B5401EC0B2142148430D494518687B22 +:100C000006283DD203007B441B79DB189F44023643 +:100C100034080604002067E0B4203AE0732038E08E +:100C2000322036E0D8070100FE000020FFFF3F0021 +:100C3000EC1A0020E01B0020D41B00207372635CC0 +:100C400072656D2E63000000A3020000DE0200004A +:100C5000E302000007030000170300001D0300006B +:100C6000FF7F841E290300000020A1072A03000043 +:100C70000080841E00807BE10A200AE0062008E054 +:100C8000FF20FE49443001F01CFF697B0020002951 +:100C90002AD0022140186968002440180C21000263 +:100CA0006956000A002921DBF1F7D7FEF44A06460F +:100CB0000C27EF570021101AA14103D2EF49F14848 +:100CC00001F0FFFEF0490020C91BA04103D2EB490F +:100CD000EE4801F0F6FEEE4AF0190021821A8C412E +:100CE00001D3EC494018F8BD0421D3E7F1F7B5FE74 +:100CF0000C21695600224018E149091AA241F2D29A +:100D00004042F8BDF0B5074683B0E3480E46029076 +:100D100000F0C9FCE14C00282ED0E14D287C0028D1 +:100D200003D0E0A1E24801F0CCFE012028742F732B +:100D3000DB4D30782872707868722A460A3229466C +:100D40007068F1F794FE0A2028560F2804DD1F383A +:100D5000A8722868401C28600021B0686A4600918B +:100D6000117101AA6946F1F782FE6A460420105605 +:100D70000F2846DD012045E060782178401C4007BF +:100D8000400F884203D1C7A1CA4801F09AFE60789B +:100D90000101C94809180F73617809010D183078ED +:100DA0002872707868722A460A3229467068F1F70C +:100DB0005EFE0A2028560F2804DD1F38A872286816 +:100DC000401C28600021B0686A460091117101AA98 +:100DD0006946F1F74CFE6A46042010560F2801DDE3 +:100DE000012000E00020009940186860307BE87224 +:100DF0006078401C4007400F6070029800F06BFC68 +:100E000005E00020009940186860307BE872607847 +:100E10002178884224D0A9480579052D22D0F1F700 +:100E2000B8FD14214D43A64969180A7C042A17D03D +:100E3000032A15D04B6889681B1A091A180209027F +:100E4000A04A000A090A06280AD31346904207D886 +:100E5000994205D860782178884201D0F1F7E5FD04 +:100E600003B0F0BD607821788842F7D103B0F0BDBF +:100E700010B50020F1F7EBFC10BD10B50120F1F723 +:100E8000E6FC10BDF8B5074602281ED08B4C207931 +:100E9000052803D183A18C4801F013FE0020A07027 +:100EA0000125A571207903211422854E5043801914 +:100EB0000174F1F7BFFD3800844F0BD001281FD01B +:100EC00003286FD077A1824838E082480078F1F794 +:100ED00099FBF8BD65700020F1F7CCFC7968481CDF +:100EE00004D0012300221846F1F7FAFC2079217979 +:100EF000401CC0B214225143725801219047F8BDE2 +:100F00000120F1F7B7FC607800280CD07868401C0D +:100F100009D020792179401CC0B214225143725863 +:100F200006219047F8BD387E01280AD0022812D049 +:100F3000032824D0042836D05AA1674801F0C1FD07 +:100F4000F8BD2078002804D000202070F1F777FD4C +:100F5000FD77002024E0E078002804D1FEF7F4FCBF +:100F6000F1F752F9E57020792179401CC0B21422C2 +:100F7000514372580021904700203876F8BD397AE5 +:100F800038680123411A00221846F1F7A9FC20789D +:100F9000002804D000202070F1F751FDFD770220D9 +:100FA0003876F8BD1AE0397F38680123411A0022EB +:100FB0001846F1F795FCE078002804D1FEF7C4FC50 +:100FC000F1F722F9E57020792179401CC0B2142292 +:100FD00051437258002190473D76F8BD2079217920 +:100FE000401CC0B214225143725805219047F8BDED +:100FF00010B5324C2079052803D12AA1374801F0D9 +:1010000060FD20792179401CC0B2142251432C4A42 +:1010100052580421904710BDF0B583B00526F1F772 +:10102000B8FC054629484068401C03D01DA12C4847 +:1010300001F047FD214C21792A480190052956D01D +:101040002179142041431E480918097C04294ED0F7 +:101050002179142251430818007C03287ED001987E +:10106000184902684068521B401B12020002120A13 +:10107000000A062A72D30B468A4235E03C0C010076 +:10108000FF7F841E290300000020A1072A0300001F +:101090000080841E00807BE1071C0020BC1B002018 +:1010A000C01B00207372635C72656D2E63000000CC +:1010B0006E0300005F0300003C1B0020001C0020AA +:1010C000EC1A0020FFFF3F00A2030000E01B0020FD +:1010D000F3030000FC000020E7030000FA03000017 +:1010E0002B040000EC1B002038D8984236D8002092 +:1010F00060702079052808D1F648407F002804D088 +:10110000F548C1784170817801702079052814D0A4 +:10111000207914214843F1494018007C04280CD15F +:1011200026792279012014235A4352181074227907 +:101130005A435118897C21716071E94F7878397868 +:10114000884215D038780101E6480A183978090133 +:101150000818017B2846FFF7A0FA00E071E1387813 +:10116000401C4007400F3870787839788842E9D1C0 +:10117000DD4F387C002806D0397B3A462846FFF7F9 +:101180008CFA00203874052E1BD0142031464143C0 +:10119000D2480818017C012913D10721D34F0174CB +:1011A000787A401C0840397A884203D1D0A1D348CC +:1011B00001F087FC787A3E54787A401C4007400F53 +:1011C0007872207905287DD0607900287BD00020B6 +:1011D0006071217914204143C048BE4F0E18C849A0 +:1011E000B3687268F6688E604B600A60797D00298A +:1011F00010D0022621791422B84851430818407BA8 +:10120000062815D203007B441B79DB189F44040E8B +:101210000C0A08060426EDE700200FE0B4200DE0DC +:1012200073200BE0322009E00A2007E0062005E0E9 +:10123000FF20AFA1443001F044FC00203872797DDA +:10124000022901D001290FD1F96809184A1B12029D +:10125000120A382A08D90320787532390802000AA0 +:10126000F860322038720AE0322808D2E07800288C +:101270000ED1FEF769FBF0F7C7FF012007E0E07829 +:10128000002805D0FEF77FFBF0F7E7FF0020E070B5 +:10129000914A0621507838771278012A01D0032A22 +:1012A00006D1012222703A7A904201D9811A891D11 +:1012B000BA7F002A00D0891C2378002B01D1002A94 +:1012C00061D001E088E098E08C468E490091019958 +:1012D0000B6849685B1B491B09021B02090A1B0AB0 +:1012E00001919C451CD8874DAB4219D8019B0099B0 +:1012F0008B4215D8397A884223D9FB68421A9A1A48 +:101300001202120A101880190002000AFA603860EE +:10131000002914D0032038760006000E3ED144E0A8 +:1013200000202070B877397A002925D0F868401855 +:1013300080190002000A3860022038762EE0012071 +:10134000E9E781420BD9FA68511889190902090A9B +:101350003960002801D00420DDE70220DBE7002A05 +:1013600003D163A1684801F0ACFBF8688019000262 +:10137000000A3860002004E0F96889190902090AA6 +:101380003960387611E0387A00281DD0F9680818DD +:1013900080190002000A386002203876F8680123BC +:1013A000811900221846F1F79BFA2079142148434D +:1013B0004A490C2240188256012300203968F1F76F +:1013C0008FFAF1F7C1FB18E0F86880190002000AF3 +:1013D000386000203876E8E70120F1F74BFA00206A +:1013E000F1F748FAF1F72CFAE078002805D0FEF77B +:1013F000CAFAF0F732FF0020E070364DA87F0028CF +:1014000004D0F1F71CFB0020E877A877687F00285C +:1014100004D03148C178417081780170207800286B +:1014200006D000202C49E8770978002900D12070E7 +:101430002E48417A007A814203D034484078F1F74F +:10144000E1F803B0F0BDF0B5314C0746207983B028 +:10145000052803D126A12F4801F033FB2079142160 +:101460001E4E48438019007C032803D020A12A483F +:1014700001F027FB174D6868401C03D01CA12748CA +:1014800001F01FFB20791421484381190C200856D4 +:1014900000216A4600911171C01901AA6946F1F74D +:1014A000E6FA6A46042010560F2801DD012000E00C +:1014B000002000994018296840180102090A696053 +:1014C0006078002804D0012300221846F1F708FABA +:1014D00003B0F0BDE01B0020FE000020EC1A00204D +:1014E000BC1B00203C1B0020C01B0020D41B002084 +:1014F0007372635C72656D2E630000005C04000013 +:10150000EC1B0020FFFF3F00AE040000FC000020A9 +:10151000001C00200B0500000C0500000D0500005C +:10152000F8B51D4D0A1A00242346551BA34106D3C6 +:10153000194E431A254600279E1BBD4101D2104675 +:10154000F8BD164E0025B21AA54103D2721C101A1E +:101550004018F8BD114D0022EB1AA24104D26A1CBA +:10156000511A08184042F8BD53200DA1000101F0A6 +:10157000A8FA0020F8BD10B5014601230022022080 +:10158000F1F7AEF910BD10B50220F1F773F910BDF7 +:1015900010B5F1F7FEF910BD0020A107FF7F841EF2 +:1015A0007372635C72656D2E6300000010B50146B6 +:1015B00020220A4801F0E8F808490020C8770846C8 +:1015C00010BD0749012048610648074A0168914259 +:1015D00001D100210160704770477047081C00204E +:1015E0000005004004010020EFBEADDE064A107089 +:1015F0005170704704481C2201784171427001709B +:101600007047704770477047080100207047704767 +:1016100070477047704770477047704730B5034652 +:10162000002002460DE09C5C2546303D0A2D02D389 +:101630000020C04330BD0A25684330382018521CB2 +:10164000D2B28A42EFD330BD70B50D46144608E0E1 +:101650000A2101F013F92A193031203A641ED1779A +:10166000E4B2002CF4D170BD10B5002310E0040AE0 +:1016700000020443A0B2CC5C44402006000F60404E +:101680000407240C44402006C00C60405B1C9BB245 +:101690009342ECD310BD002101700846704701460B +:1016A000002008707047EFF31081C907C90F72B6A8 +:1016B0000278012A01D0012200E0002201230370F8 +:1016C000002900D162B6002A01D000207047012015 +:1016D00040037047E7E7EFF31081C907C90F72B6FF +:1016E00000220270002900D162B600207047F2E7A4 +:1016F0000348004703480449024A034B704700006F +:10170000312B0100481C0020481C002010B5203857 +:101710000C46030001F0DAFA331B1F23272C313764 +:101720003C41474D5054585C606D71656974787CDC +:101730008084888C9094989C9FA2A6AAAEB2B8BCD4 +:10174000C0C5CACFE9F0F3D3D7E0DBE4F8002068E6 +:10175000FFF7A1FFD6E02068FFF7A5FFD2E02068E1 +:10176000FFF7B9FFCEE0207840B200F0F3F9C9E00E +:10177000207840B200F011FAC4E02078616840B2ED +:1017800000F024FABEE0207840B200F034FAB9E06C +:10179000207840B200F03FFAB4E02078217940B2DE +:1017A00000F04AFAAEE02078616840B200F074FAC6 +:1017B000A8E000F080FAA5E0206800F084FAA1E03B +:1017C000207800F099FA9DE02068FEF7BCF999E0D6 +:1017D0002068FEF7BCF995E021792068FEF7BEF994 +:1017E00090E02068FEF706F88CE02068FEF707F826 +:1017F00088E02078FEF707F884E0FEF715F881E02E +:101800002078FEF717F87DE02078FEF729F879E0D8 +:101810002068FEF742F875E02068FEF744F871E0B2 +:101820002068FEF746F86DE02068FEF747F869E0AB +:101830002068FEF749F865E02068FEF74BF861E0A4 +:101840002068FEF74CF85DE00846EEF77FFC59E0B3 +:10185000F0F7EDFC56E0F0F71AFD53E02068F0F7E2 +:1018600022FD4FE0206800F079FA4BE0206800F09C +:101870007BFA47E0206800F07CFA43E02078A26819 +:10188000616800F07BFA3DE0207800F083FA39E0EF +:10189000207800F08BFA35E02078616800F093FA48 +:1018A00030E02078616800F09AFA2BE02179207806 +:1018B00000F0ACFB26E02068FEF73FFA22E020684B +:1018C000FEF710FD1EE02068FEF7F4FC1AE020464B +:1018D00007C800F078FC15E0206800F0C0FC11E0BB +:1018E0006168206800F0E2FC0CE0206800F04EFE29 +:1018F00008E009E003E0FFE700F061FE02E0206895 +:1019000000F079FE206010BD0120086010BD0000CD +:1019100010B572B600F0E4F800280BD0EEF7C0FC6A +:10192000FEF7E1FD00F039FB72490020C8628862D1 +:101930007149086062B6002010BDF3B50025012092 +:101940000007C06A81B0C0430006000E0AD16B4890 +:101950000168491C05D000686949884202D069487D +:10196000FEBD012572B600F0BBF8002801D062B6BA +:1019700088E0EEF701FCEEF797FC634C634A002128 +:101980002368CB40DB0720D00346CB40DB0718D1D0 +:101990004BB2002B07DA1E07360F083EB608B6001A +:1019A000B618F66904E09E08594FB600F619366875 +:1019B0009B07DB0EDE4033069B0F012B05D0032B6C +:1019C00003D062B64F48401EFEBD491C2029D7D324 +:1019D000019C01204F49230001F078F914222424AE +:1019E0002424242424240B0D1012142016181A1C4D +:1019F0001E2F002400E00124C86314E00224FBE74A +:101A00000324F9E70424F7E70824F5E70924F3E7BA +:101A10000A24F1E70B24EFE70C24EDE70524EBE7BC +:101A2000072400E00624D06901210002000AC9074A +:101A30000843D061002D04D009E062B60120000304 +:101A4000FEBD2C4D3448E862EEF72EFCA8622A4910 +:101A500032480860324902980860EEF725FC2146BA +:101A600000F082FAFEF706FD00F04CFC00F0FEFAF2 +:101A70000198EEF7E3FB040062B603D0FFF748FFDE +:101A80002046FEBD0020FEBD10B5044600F028F83B +:101A9000002800D001202070002010BD21491848E6 +:101AA00008600020704710B50C46102808D0112897 +:101AB0000BD012280CD013280ED00120086010BDC6 +:101AC00061682068FFF739FF08E0FFF721FF05E0B4 +:101AD0002068FFF7D9FF01E0FFF7E0FF206010BDAD +:101AE00005480E490068884201D101207047002056 +:101AF00070470000000500400401002000100010A5 +:101B0000004001000210000000E100E000ED00E0F4 +:101B100000E400E04000004000200000EFBEADDE29 +:101B200010010020000000208107C90E002808DAFB +:101B30000007000F08388008814A80008018C069BB +:101B400004E080087F4A800080180068C8400006D2 +:101B5000800F704710B5044600F0DBF8002813D062 +:101B60002046FFF7E1FFC0B200F0E1F800280DD0F9 +:101B70007549E2060B78D20E01209040002B08D068 +:101B80004A681043486006E0704810BD6F48401C2A +:101B900010BD6F490860002010BD10B5044600F06C +:101BA000B8F800280BD06849E2060B78D20E012065 +:101BB0009040002B05D04A6882434A6004E06348A5 +:101BC00010BD634980310860002010BD70B50D461E +:101BD000044600F09EF800280BD05E480068E2063C +:101BE000D20E01219140084000D001202860002041 +:101BF00070BD564870BD10B5044600F08AF8002844 +:101C000007D0E106C90E0120884052490860002033 +:101C100010BD4E4810BD10B5044600F07AF80028FB +:101C200008D0E106C90E012088404A498031086089 +:101C3000002010BD454810BD70B50D46044600F0AB +:101C400068F8002819D0284600F071F8002816D04E +:101C5000A007C20EFF209040A907090E9140002C5A +:101C600010DA2207120F083A9308354A9B009B1896 +:101C7000DA6982430A43DA610CE0344870BD3348C4 +:101C8000401C70BDA3082F4A9B009B181A68824312 +:101C90000A431A60002070BD70B50C46054600F07E +:101CA00038F8002805D02846FFF73EFF20700020B6 +:101CB00070BD264870BDBFF34F8F21492648C860CC +:101CC000BFF34F8FFEE770B51F4C0546217801200A +:101CD00000290ED1207072B600F06EF91C4E8036CD +:101CE00031688143616000F067F9C043306062B6DB +:101CF00000202870002070BD13490A78002A06D001 +:101D0000002804D1124A48681060002008700020A2 +:101D1000704710B50446202805DA00F04DF901217E +:101D2000A140084201D0002010BD012010BD0128B3 +:101D300003D0032801D00020704701207047000025 +:101D400000ED00E000E400E01401002001200000AC +:101D500000E100E000E200E00400FA05364909680D +:101D6000C9B20160002070473349C0B2486000200A +:101D700070473149C0B2886000207047082801D3FD +:101D80002E4870472C4BC0001033C01801604260D1 +:101D900000207047022802D32848401C7047284979 +:101DA000C00040180121016000207047022802D3C2 +:101DB0002248401C70472249C000091D40180121DB +:101DC000016000207047022802D31C48401C704765 +:101DD0001C4A80008018C9B20160002070470228A8 +:101DE00002D31648401C7047164A800080180068CD +:101DF000C0B208600020704710B5FF200E49C043F4 +:101E000088600D4B082210330021D000C0180160FB +:101E10004160521C102AF8D30A4B00208200D218CD +:101E2000022801D3116002E01468E4B21460401C7F +:101E30000428F3D310BD000000F501400820000085 +:101E400000F0014000F80140F8B504468007002585 +:101E50000126002804DA5A48C563C6630220844379 +:101E6000E00404D55748C563C6638014844360000A +:101E700003D55548456080058443E00504D55348A3 +:101E8000C563C66380158443A00404D55048C56368 +:101E9000C6634014844360042704C00FF90F8842CE +:101EA00003D04CA1612000F00CFEB80F0AD04E49BF +:101EB000CD634E48C563C563CE63C663C663032066 +:101EC0008003844320050AD5494FFD632F20EEF798 +:101ED0006BF9FE632F20EEF767F9F8148443002CAA +:101EE00003DAFFF789FF640064084248044203D024 +:101EF00038A1902000F0E5FDF8BDF0B500210A46BC +:101F0000FF230446CC40E4072AD04CB2E606F60E86 +:101F10000125B540384E3560384E3560002C11DA59 +:101F200025072D0F083DAE08354DB6007619F56929 +:101F3000A407E70E1C46BC40A5431446BC402543FD +:101F4000F5610DE0A6082F4DB60076193568A40797 +:101F5000E70E1C46BC40A5431446BC4025433560F3 +:101F6000491C2029CDD3F0BD70B5274C0D4620600B +:101F7000FFF76AFF2068FFF7C0FF2846F0F720FA56 +:101F8000FDF7C6FEFDF772FDFFF736FFFDF7C5FC56 +:101F9000F0F702FB00F06AF870BD10B51A4C20682B +:101FA000FFF752FF2068FFF7A8FFFFF725FFF0F7C4 +:101FB0008CFA0020206010BD1348006870470000B4 +:101FC000C01F0040C0CF004000E50140C08F00406E +:101FD000C0DF00407372635C736F635F636F6E6634 +:101FE00069672E6300000000C0EF0040C0FF0040A2 +:101FF000C0BF0040FEFF0FFC80E100E080E200E097 +:1020000000ED00E000E400E01C01002070B50024B9 +:1020100002460D4620462146002A1ED0012A04D041 +:10202000022A04D0032A1ED103E0012002E002208C +:1020300013E003202B0000F049FE07160507090BEB +:102040000D0F1600012108E0022106E0032104E043 +:10205000042102E0052100E00621FEF7B1FA002884 +:1020600001D0204670BD0724FBE700009B490020FB +:10207000087088709A490870704770B5974C0E4682 +:102080006178884203D097A15A2000F01AFD0325F9 +:10209000330000F01BFE0953063030535353534AAC +:1020A00053002078022803D08EA15E2000F009FDA5 +:1020B0002570A078022802D0012804D014E0A0687E +:1020C00000F004FB10E000250BE0E0680168A06868 +:1020D00000F00DFBA068001DA060E068001D6D1CF5 +:1020E000E06020698542F0D30020A070FEF710FA6E +:1020F0000420207070BD2078022803D079A17620BA +:1021000000F0DFFC60687649401C6060032801D85D +:102110004D7003E0062806D80220487070496078A8 +:10212000FEF7F0FD70BD032003E0A0780028FAD18F +:102130000220FEF703F900F0C7F870BD69A19E20E8 +:1021400000F0BFFC70BD70B50546644C00206060B7 +:102150002078012803D063A1A52000F0B2FC6049DB +:10216000022008738D6003224A7020706078FEF7A9 +:10217000C9FD70BD10B5594CA078002802D1207857 +:10218000002801D0112010BD5A48FEF700FA6070F7 +:102190006078002803D001202070002010BD0320AB +:1021A00010BD10B50124020B64040121524BA04262 +:1021B00002D29140186802E0203A586891400840E5 +:1021C00000D0012010BDF8B50E46910005464F190C +:1021D00014463F1F009100F09CFA00998002891973 +:1021E000091FB14201D2012200E00022002C03D0DD +:1021F000FF2101318C4201D90920F8BD3F498D42B0 +:1022000019D3AF4217D3854205D2874203D228465D +:102210003043800701D01020F8BD8E420BD3002A36 +:1022200009D12846FFF7BDFF002804D13846FFF743 +:10223000B8FF002801D00F20F8BDFFF79BFF002852 +:10224000FAD126480121C66085600461817020466C +:10225000312148431430FFF776FF0020F8BD10B558 +:1022600004462648800A84420BD300F052FAA0426A +:1022700001D8102010BDA0020446FFF792FF0028ED +:1022800001D00F2010BDFFF775FF0028FAD11348C9 +:102290000221846081701A48FFF755FF002010BDAD +:1022A0001648010B01208840401E704700B50B46C0 +:1022B0000246FFF7F5FF104201D00F2000BD0E4887 +:1022C00002604360002000BD10B5044C6078FEF74A +:1022D000B2F900202070A07010BD00002001002085 +:1022E000281C00207372635C736F635F666C61739C +:1022F000682E63007B2001000006004000400100C2 +:1023000010540000E349002048700870887048604D +:10231000E1490873704710B5E048826A81158A4325 +:10232000DC498B691A438262826A0223C9699A4333 +:102330000A438262FEF7ECF810BD002814D0417801 +:10234000002901D001290ED18168D54A6439914212 +:1023500009D24068D349884205D8CE494978012935 +:1023600003D1002801D0002070470120704770B5CC +:102370000446FEF782FD0068002803D0CAA1802031 +:1023800000F09FFB0126C34D002C06D020780028CA +:102390002BD0012827D0022801D0EE7023E0287826 +:1023A000002820D16068FFF7C8FF0028F5D06068DA +:1023B0000078002800D00220B74E30706068806836 +:1023C0009630B06060684168E868FEF7F2FB7060C4 +:1023D000606803244078002808D07470AE49A8785B +:1023E000FEF790FC6C70FFF796FF70BD02207070D6 +:1023F000F4E7F8B5A74C0D46A178884203D0AAA10E +:10240000BF2000F05EFB284600270526A24D0300F2 +:1024100000F05CFC09061135587F8997B8A2B80016 +:102420006078032806D06078022803D09EA1C320DC +:1024300000F047FBF8BD6078032806D060780228DA +:1024400003D099A1C72000F03CFB04206070E77026 +:102450002078002802D0FEF75BF8F8BDA86896380F +:10246000FEF7F1FF6868E0608C48816A82151140D0 +:10247000A161806A02210840E06100205CE0607890 +:10248000032806D06078022803D087A1E22000F05C +:1024900018FB2078002802D000F0EFF8F8BD607833 +:1024A000032802D02069410020E004202DE07A4971 +:1024B000A078FEF727FCF8BD0420FDF73FFF0120C0 +:1024C0006070F8BD6078032807D06078022804D0D7 +:1024D000FF2075A1043000F0F4FA20780028DBD149 +:1024E0006078032810D06868A06076492161A068F0 +:1024F000FEF75FFB686069686069FFF711F868497B +:1025000063318842D8DCD2E70520FDF717FF6670FB +:10251000F8BD6078042804D0FF2063A1263000F0C5 +:10252000D0FA022008E06078042804D0FF205EA1E1 +:102530002B3000F0C6FA012061688847FFF717FFCB +:10254000F8BD6078042804D0FF2057A1303000F097 +:10255000B8FAFFF7E0FEF8BD6078042804D0FF2049 +:1025600051A1353000F0ADFA2078002894D1E07800 +:10257000002805D00620FDF7E1FE6670E770F8BD83 +:102580000720C2E7FF2048A14B3051E770B5050096 +:1025900005D0404C6078002803D0112070BD102079 +:1025A00070BD4948FDF7F3FFA070A078002804D063 +:1025B000656001206070002070BD032070BD10B503 +:1025C00034480178002901D0112010BD417800293C +:1025D0000BD0417805290AD04178012907D0012183 +:1025E00001704078052802D003E00F2010BD00F0F4 +:1025F00044F8002010BD70B5264C064660780528CA +:1026000004D06078012801D00F2070BD002E25D0A5 +:102610003046FFF792FE002822D060781E4D012838 +:1026200020D07168E068FEF7C4FA6860B068963040 +:10263000A8603078002800D0032028707078002827 +:1026400017D0032068706078052814D002206070CD +:102650001149A078FEF756FB002070BD102070BD18 +:10266000072070BDFEF702F86061A0601549216186 +:10267000D9E70220E6E70320E9E710B5054CA0788A +:10268000FDF7D9FF0820FDF759FE0020607020708B +:1026900010BD000034010020381C0020000500405F +:1026A0003D860100FF1FA1077372635C736F635F58 +:1026B000726164696F5F74696D65736C6F742E63AA +:1026C0000000000024080000F3230100134A022147 +:1026D000516013490B68002BFCD0906008680028FB +:1026E000FCD00020506008680028FCD0704710B56E +:1026F0000A4B01225A600A4A1468002CFCD001607F +:1027000010680028FCD00020586010680028FCD019 +:1027100010BD0120000740697047000000E501403E +:1027200000E40140704770477047704770470346A8 +:1027300010B50B439B070FD1042A0DD308C810C94D +:10274000121FA342F8D018BA21BA884201D9012039 +:1027500010BD0020C04310BD002A03D0D30703D012 +:10276000521C07E0002010BD03780C78401C491C67 +:102770001B1B07D103780C78401C491C1B1B01D183 +:10278000921EF1D1184610BDF8B5042A2CD3830748 +:1027900012D00B78491C0370401C521E83070BD0CB +:1027A0000B78491C0370401C521E830704D00B7821 +:1027B000491C0370401C521E8B079B0F05D0C91A81 +:1027C000DF002023DE1B08C90AE0EDF7FDFCF8BDA1 +:1027D0001D4608C9FD401C46B4402C4310C0121FC2 +:1027E000042AF5D2F308C91A521EF0D40B78491CFA +:1027F0000370401C521EEAD40B78491C0370401C25 +:10280000521EE4D409780170F8BD01E004C0091F2C +:102810000429FBD28B0701D50280801CC90700D098 +:102820000270704700290BD0C30702D00270401C11 +:10283000491E022904D3830702D50280801C891E09 +:10284000E3E70022EEE70022DFE70378C2781946CB +:10285000437812061B0219438378C0781B0419437E +:1028600011430902090A000608437047020A08706A +:102870004A70020C8A70020ECA7070470022030967 +:102880008B4273D3030A8B4258D3030B8B423CD346 +:10289000030C8B4221D312E003460B437FD400226A +:1028A00043088B4274D303098B425FD3030A8B42E4 +:1028B00044D3030B8B4228D3030C8B420DD3FF224E +:1028C000090212BA030C8B4202D31212090265D01C +:1028D000030B8B4219D300E0090AC30B8B4201D3CF +:1028E000CB03C01A5241830B8B4201D38B03C01A16 +:1028F0005241430B8B4201D34B03C01A5241030B8D +:102900008B4201D30B03C01A5241C30A8B4201D33D +:10291000CB02C01A5241830A8B4201D38B02C01AE8 +:102920005241430A8B4201D34B02C01A5241030A5F +:102930008B4201D30B02C01A5241CDD2C3098B4244 +:1029400001D3CB01C01A524183098B4201D38B01C1 +:10295000C01A524143098B4201D34B01C01A524164 +:1029600003098B4201D30B01C01A5241C3088B42A9 +:1029700001D3CB00C01A524183088B4201D38B0094 +:10298000C01A524143088B4201D34B00C01A524136 +:10299000411A00D201465241104670475DE0CA0F0D +:1029A00000D04942031000D34042534000229C46CD +:1029B00003098B422DD3030A8B4212D3FC228901D7 +:1029C00012BA030A8B420CD3890192118B4208D3AD +:1029D000890192118B4204D389013AD0921100E00F +:1029E0008909C3098B4201D3CB01C01A5241830923 +:1029F0008B4201D38B01C01A524143098B4201D350 +:102A00004B01C01A524103098B4201D30B01C01A7A +:102A10005241C3088B4201D3CB00C01A52418308F4 +:102A20008B4201D38B00C01A5241D9D243088B424A +:102A300001D34B00C01A5241411A00D201466346ED +:102A400052415B10104601D34042002B00D5494251 +:102A5000704763465B1000D3404201B50020C0467A +:102A6000C04602BD704770477047704710B500F010 +:102A700077F810BD30B58C180278401C13071B0F77 +:102A800001D10378401C120906D10278401C03E0F2 +:102A90000578401C0D70491C5B1EF9D101E00B70DC +:102AA000491C521EFBD1A142E6D3002030BD0000DC +:102AB00001231B68134B1860134B1960134B1A60EA +:102AC0007047134A134B13607246053AF0E7114AF8 +:102AD0000F4B1B689A420ED10D4B002018600198D5 +:102AE0000D4B04B598470CBC9E46024602980099CF +:102AF0000A4B1B68184706980599094B1B68DB6849 +:102B0000184700005C0100206001002064010020E3 +:102B100054010020EFBEADDEAD1501001001002014 +:102B2000000000200B4A12680B4B9A420AD1004762 +:102B3000084A1268084B9A4204D101B5FDF773F9AF +:102B400003BC8E4605490968EFF305808000014407 +:102B50000968084704010020EFBEADDE0000002038 +:102B60001C481D497047FFF7FBFFEDF7E7FA00BD72 +:102B700001200007C06AC0B2FF2804D117481849D5 +:102B80000968884202D0174817490160174A136044 +:102B90005B68184720BFFDE7154B1B680F4999423A +:102BA00002D018688842F5D004D1124B18680B493E +:102BB0008842EFD080F308880F49884204DD0F482F +:102BC000026802210A4302600D4880470D48804791 +:102BD0000D480047481C0020481C0020FFFFFFFF55 +:102BE000001000102C050040040000000000002030 +:102BF00014100010004001000020002024050040B7 +:102C0000C3150100712B0100B12A01001248704563 +:102C100002D1EFF3098101E0EFF3088188690238FE +:102C20000078102812DB20280EDB0C4A12680C4BAF +:102C30009A4203D1602804DB0A4A10470220086048 +:102C40007047094A10470000084A1047084A1268AE +:102C50002C32126810470000FDFFFFFF0401002026 +:102C6000EFBEADDEAD0200000D170100A71A010096 +:102C7000000000200A480B4908470B48094908474B +:102C80000A48084908470A480649084709480549C3 +:102C9000084709480349084708480249084700000F +:102CA000E1230000252B0100412B0000EB2900004F +:102CB000992900004D270000A72A000043260000A4 +:102CC00003B40148019001BD0500002030B47446F2 +:102CD000641E2578641CAB4200D21D46635D5B0018 +:102CE000E31830BC1847000002490020C8612039B1 +:102CF00008727047A003002000020206FFFFFFFFDA +:102D00000000FFFF0102040810204080555555D6F1 +:102D1000BE898E00F401FA00960064004B00320078 +:102D20001E0014000100030000000100000000006C +:102D3000000000000000000000000000870000000C +:102D4000000000000000000000000000000002037E +:102D5000040500000E0F0000882D01000400002073 +:102D60001000000004010000982D01001400002054 +:102D700054010000742A0100C02D010068010020E8 +:102D8000E01A0000200100000249022208681042F7 +:102D9000FCD0704700E200E0A1074E56FF9900CD3D +:102DA00029023501022B013601000100D83720FB32 +:102DB000349B5F8074800010027001E4B52A01002A +:020000041000EA +:1010000000400100FFFFFFFFFFFFFFFFFFFFFFFFAB +:041010004900FFFF95 +:04000005000000C136 +:00000001FF